diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..901b01d4d --- /dev/null +++ b/.editorconfig @@ -0,0 +1,52 @@ +# Suppress: EC112 +root=true + +[*] +end_of_line = crlf +indent_size = 4 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true + +[*.cake] +indent_style = space +indent_size = 4 +tab_width = 4 + +[*.{config,xml,js,json,html,css,sql,csproj,props,yml}] +indent_size = 2 + +[*.sh] +end_of_line = lf + +[*.{cmd, bat}] +end_of_line = crlf + +[{**/tests/**,**/Tests/**,**/*.Tests/**}.cs] +resharper_async_converter_async_await_may_be_elided_highlighting=do_not_show +resharper_class_never_instantiated_global_highlighting = do_not_show +resharper_class_with_virtual_members_never_inherited_global_highlighting = do_not_show +resharper_class_with_virtual_members_never_inherited_local_highlighting = do_not_show +resharper_consider_using_configure_await_highlighting = do_not_show +resharper_event_exception_not_documented_highlighting = do_not_show +resharper_exception_not_documented_highlighting = do_not_show +resharper_exception_not_documented_optional_highlighting = do_not_show +resharper_heap_view_boxing_allocation_highlighting = do_not_show +resharper_heap_view_closure_allocation_highlighting = do_not_show +resharper_heap_view_delegate_allocation_highlighting = do_not_show +resharper_heap_view_object_allocation_evident_highlighting = do_not_show +resharper_heap_view_object_allocation_highlighting = do_not_show +resharper_inconsistent_naming_highlighting = do_not_show +resharper_missing_annotation_highlighting = do_not_show +resharper_missing_xml_doc_highlighting = do_not_show +resharper_possible_null_reference_exception_highlighting = do_not_show +resharper_private_field_can_be_converted_to_local_variable_highlighting = do_not_show +resharper_return_value_of_pure_method_is_not_used_highlighting = do_not_show +resharper_suggest_base_type_for_parameter_highlighting = do_not_show + +[**/{Startup,Program}.cs] +resharper_event_exception_not_documented_highlighting=do_not_show +resharper_exception_not_documented_highlighting=do_not_show +resharper_exception_not_documented_optional_highlighting=do_not_show +resharper_heap_view_object_allocation_evident_highlighting=do_not_show +resharper_missing_xml_doc_highlighting=do_not_show diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..ae3b5bb5d --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +*.DotSettings eol=lf +*.sh text eol=lf diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..0f008e753 --- /dev/null +++ b/.gitignore @@ -0,0 +1,293 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates +*.vcxproj.filters + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +tools/ +.ReSharperCaches/ + +# Visual Studio 2015 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ +**/Properties/launchSettings.json + +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# TODO: Comment the next line if you want to checkin your web deploy settings +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/packages/* +# except build/, which is used as an MSBuild target. +!**/packages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/packages/repositories.config +# NuGet v3's project.json files produces more ignoreable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +node_modules/ +orleans.codegen.cs + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +*.mdf +*.ldf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# JetBrains Rider +.idea/ +*.sln.iml + +# CodeRush +.cr/ + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/ + +packages/**/* +Drops +error-*.xml +SpecificationReports +NugetWorkspace +Packages +Common/AssemblyVersion.cs +Artefacts/Documentation/build/ +/ReleaseNotes.md +/ResharperCaches +/DropsErrorOutput.xml +/DropsTestOutput.xml +/Src/Common/AssemblyVersion.cs +/Docker/mssql-data +/tmp/ diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 000000000..eac5395d6 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,8 @@ +{ + // Use IntelliSense to find out which attributes exist for C# debugging + // Use hover for the description of the existing attributes + // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md + "version": "0.2.0", + "configurations": [ + ] +} \ No newline at end of file diff --git a/.vscode/solution-explorer/class.cs-template b/.vscode/solution-explorer/class.cs-template new file mode 100644 index 000000000..85ec1cd40 --- /dev/null +++ b/.vscode/solution-explorer/class.cs-template @@ -0,0 +1,11 @@ +namespace {{namespace}} +{ + using System; + + /// + /// {{name}} description. + /// + public class {{name}} + { + } +} diff --git a/.vscode/solution-explorer/class.ts-template b/.vscode/solution-explorer/class.ts-template new file mode 100644 index 000000000..ff2edefb8 --- /dev/null +++ b/.vscode/solution-explorer/class.ts-template @@ -0,0 +1,3 @@ +export class {{name}} { + +} \ No newline at end of file diff --git a/.vscode/solution-explorer/class.vb-template b/.vscode/solution-explorer/class.vb-template new file mode 100644 index 000000000..38ef67fe7 --- /dev/null +++ b/.vscode/solution-explorer/class.vb-template @@ -0,0 +1,9 @@ +Imports System + +Namespace {{namespace}} + + Public Class {{name}} + + End Class + +End Namespace diff --git a/.vscode/solution-explorer/default.ts-template b/.vscode/solution-explorer/default.ts-template new file mode 100644 index 000000000..04af87028 --- /dev/null +++ b/.vscode/solution-explorer/default.ts-template @@ -0,0 +1,3 @@ +export default {{name}} { + +} \ No newline at end of file diff --git a/.vscode/solution-explorer/enum.cs-template b/.vscode/solution-explorer/enum.cs-template new file mode 100644 index 000000000..ddadb7848 --- /dev/null +++ b/.vscode/solution-explorer/enum.cs-template @@ -0,0 +1,11 @@ +namespace {{namespace}} +{ + using System; + + /// + /// {{name}} description. + /// + public enum {{name}} + { + } +} diff --git a/.vscode/solution-explorer/interface.cs-template b/.vscode/solution-explorer/interface.cs-template new file mode 100644 index 000000000..80f99894d --- /dev/null +++ b/.vscode/solution-explorer/interface.cs-template @@ -0,0 +1,11 @@ +namespace {{namespace}} +{ + using System; + + /// + /// {{name}} description. + /// + public interface {{name}} + { + } +} diff --git a/.vscode/solution-explorer/interface.ts-template b/.vscode/solution-explorer/interface.ts-template new file mode 100644 index 000000000..3ea404b4f --- /dev/null +++ b/.vscode/solution-explorer/interface.ts-template @@ -0,0 +1,3 @@ +export interface {{name}} { + +} \ No newline at end of file diff --git a/.vscode/solution-explorer/template-list.json b/.vscode/solution-explorer/template-list.json new file mode 100644 index 000000000..284962284 --- /dev/null +++ b/.vscode/solution-explorer/template-list.json @@ -0,0 +1,46 @@ +{ + "templates": [ + { + "name": "Class", + "extension": "cs", + "file": "./class.cs-template", + "parameters": "./template-parameters.js" + }, + { + "name": "Interface", + "extension": "cs", + "file": "./interface.cs-template", + "parameters": "./template-parameters.js" + }, + { + "name": "Enum", + "extension": "cs", + "file": "./enum.cs-template", + "parameters": "./template-parameters.js" + }, + { + "name": "Class", + "extension": "ts", + "file": "./class.ts-template", + "parameters": "./template-parameters.js" + }, + { + "name": "Interface", + "extension": "ts", + "file": "./interface.ts-template", + "parameters": "./template-parameters.js" + }, + { + "name": "Default", + "extension": "ts", + "file": "./default.ts-template", + "parameters": "./template-parameters.js" + }, + { + "name": "Class", + "extension": "vb", + "file": "./class.vb-template", + "parameters": "./template-parameters.js" + } + ] +} \ No newline at end of file diff --git a/.vscode/solution-explorer/template-parameters.js b/.vscode/solution-explorer/template-parameters.js new file mode 100644 index 000000000..daba8b267 --- /dev/null +++ b/.vscode/solution-explorer/template-parameters.js @@ -0,0 +1,17 @@ +var path = require("path"); + +module.exports = function(filename, projectPath, folderPath) { + var namespace = "Unknown"; + if (projectPath) { + namespace = path.basename(projectPath, path.extname(projectPath)); + if (folderPath) { + namespace += "." + folderPath.replace(path.dirname(projectPath), "").substring(1).replace(/[\\\/]/g, "."); + } + namespace = namespace.replace(/[\\\-]/g, "_"); + } + + return { + namespace: namespace, + name: path.basename(filename, path.extname(filename)) + } +}; \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 000000000..d01dd2ca1 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,31 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "command": "dotnet", + "type": "process", + "args": [ + "build", + "${workspaceFolder}/Src/SharpArch.sln", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "test", + "command": "dotnet", + "type": "shell", + "group": "test", + "args": [ + "test", + "${workspaceFolder}/Src/SharpArch.sln" + ], + "presentation": { + "reveal": "silent" + }, + "problemMatcher": "$msCompile" + } + ] +} diff --git a/Artefacts/Documentation/ExampleConventionDbSchema.png b/Artefacts/Documentation/ExampleConventionDbSchema.png new file mode 100644 index 000000000..5de14f33e Binary files /dev/null and b/Artefacts/Documentation/ExampleConventionDbSchema.png differ diff --git a/docs/Logo.bmp b/Artefacts/Documentation/Logo.bmp similarity index 100% rename from docs/Logo.bmp rename to Artefacts/Documentation/Logo.bmp diff --git a/Artefacts/Documentation/Logo_100x100.png b/Artefacts/Documentation/Logo_100x100.png new file mode 100644 index 000000000..4551ae981 Binary files /dev/null and b/Artefacts/Documentation/Logo_100x100.png differ diff --git a/Artefacts/Documentation/Makefile b/Artefacts/Documentation/Makefile new file mode 100644 index 000000000..8e7279eee --- /dev/null +++ b/Artefacts/Documentation/Makefile @@ -0,0 +1,158 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = build + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source +# the i18n builder cannot share the environment and doctrees with the others +I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source + +.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext + +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an epub" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " text to make text files" + @echo " man to make manual pages" + @echo " texinfo to make Texinfo files" + @echo " info to make Texinfo files and run them through makeinfo" + @echo " gettext to make PO message catalogs" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + +clean: + -rm -rf $(BUILDDIR)/* + +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +singlehtml: + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +markdown: + $(SPHINXBUILD) -b markdown $(ALLSPHINXOPTS) $(BUILDDIR)/markdown + @echo + @echo "Build finished; now you can process the JSON files." + +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/SarpArchitecture.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/SarpArchitecture.qhc" + +devhelp: + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo + @echo "Build finished." + @echo "To view the help file:" + @echo "# mkdir -p $$HOME/.local/share/devhelp/SarpArchitecture" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/SarpArchitecture" + @echo "# devhelp" + +epub: + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." + +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make' in that directory to run these through (pdf)latex" \ + "(use \`make latexpdf' here to do that automatically)." + +latexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through pdflatex..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +text: + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo + @echo "Build finished. The text files are in $(BUILDDIR)/text." + +man: + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." + +texinfo: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo + @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." + @echo "Run \`make' in that directory to run these through makeinfo" \ + "(use \`make info' here to do that automatically)." + +info: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo "Running Texinfo files through makeinfo..." + make -C $(BUILDDIR)/texinfo info + @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." + +gettext: + $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale + @echo + @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." + +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." diff --git a/Artefacts/Documentation/icon.png b/Artefacts/Documentation/icon.png new file mode 100644 index 000000000..01b782c43 Binary files /dev/null and b/Artefacts/Documentation/icon.png differ diff --git a/Artefacts/Documentation/make.bat b/Artefacts/Documentation/make.bat new file mode 100644 index 000000000..41f8941cc --- /dev/null +++ b/Artefacts/Documentation/make.bat @@ -0,0 +1,190 @@ +@ECHO OFF + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set BUILDDIR=build +set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% source +set I18NSPHINXOPTS=%SPHINXOPTS% source +if NOT "%PAPER%" == "" ( + set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% + set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% +) + +if "%1" == "" goto help + +if "%1" == "help" ( + :help + echo.Please use `make ^` where ^ is one of + echo. html to make standalone HTML files + echo. dirhtml to make HTML files named index.html in directories + echo. singlehtml to make a single large HTML file + echo. pickle to make pickle files + echo. json to make JSON files + echo. htmlhelp to make HTML files and a HTML help project + echo. qthelp to make HTML files and a qthelp project + echo. devhelp to make HTML files and a Devhelp project + echo. epub to make an epub + echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter + echo. text to make text files + echo. man to make manual pages + echo. texinfo to make Texinfo files + echo. gettext to make PO message catalogs + echo. changes to make an overview over all changed/added/deprecated items + echo. linkcheck to check all external links for integrity + echo. doctest to run all doctests embedded in the documentation if enabled + goto end +) + +if "%1" == "clean" ( + for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i + del /q /s %BUILDDIR%\* + goto end +) + +if "%1" == "html" ( + %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/html. + goto end +) + +if "%1" == "dirhtml" ( + %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. + goto end +) + +if "%1" == "singlehtml" ( + %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. + goto end +) + +if "%1" == "pickle" ( + %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can process the pickle files. + goto end +) + +if "%1" == "json" ( + %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can process the JSON files. + goto end +) + +if "%1" == "htmlhelp" ( + %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can run HTML Help Workshop with the ^ +.hhp project file in %BUILDDIR%/htmlhelp. + goto end +) + +if "%1" == "qthelp" ( + %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can run "qcollectiongenerator" with the ^ +.qhcp project file in %BUILDDIR%/qthelp, like this: + echo.^> qcollectiongenerator %BUILDDIR%\qthelp\SarpArchitecture.qhcp + echo.To view the help file: + echo.^> assistant -collectionFile %BUILDDIR%\qthelp\SarpArchitecture.ghc + goto end +) + +if "%1" == "devhelp" ( + %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. + goto end +) + +if "%1" == "epub" ( + %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The epub file is in %BUILDDIR%/epub. + goto end +) + +if "%1" == "latex" ( + %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. + goto end +) + +if "%1" == "text" ( + %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The text files are in %BUILDDIR%/text. + goto end +) + +if "%1" == "man" ( + %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The manual pages are in %BUILDDIR%/man. + goto end +) + +if "%1" == "texinfo" ( + %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. + goto end +) + +if "%1" == "gettext" ( + %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The message catalogs are in %BUILDDIR%/locale. + goto end +) + +if "%1" == "changes" ( + %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes + if errorlevel 1 exit /b 1 + echo. + echo.The overview file is in %BUILDDIR%/changes. + goto end +) + +if "%1" == "linkcheck" ( + %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck + if errorlevel 1 exit /b 1 + echo. + echo.Link check complete; look for any errors in the above output ^ +or in %BUILDDIR%/linkcheck/output.txt. + goto end +) + +if "%1" == "doctest" ( + %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest + if errorlevel 1 exit /b 1 + echo. + echo.Testing of doctests in the sources finished, look at the ^ +results in %BUILDDIR%/doctest/output.txt. + goto end +) + +:end diff --git a/Artefacts/Documentation/requirements.txt b/Artefacts/Documentation/requirements.txt new file mode 100644 index 000000000..31df35718 --- /dev/null +++ b/Artefacts/Documentation/requirements.txt @@ -0,0 +1,12 @@ +Pygments==2.3.1 +setuptools==41.0.1 +docutils==0.14 +mock==1.0.1 +pillow==5.4.1 +alabaster>=0.7,<0.8,!=0.7.5 +commonmark==0.8.1 +recommonmark==0.5.0 +sphinx<2 +sphinx-rtd-theme<0.5 +readthedocs-sphinx-ext<1.1 +sphinx-markdown-builder==0.5.3 diff --git a/src/NorthwindSample/app/Northwind.Web/Content/Images/sharp_arch.jpg b/Artefacts/Documentation/sharp_arch.jpg similarity index 100% rename from src/NorthwindSample/app/Northwind.Web/Content/Images/sharp_arch.jpg rename to Artefacts/Documentation/sharp_arch.jpg diff --git a/Artefacts/Documentation/source/.vscode/settings.json b/Artefacts/Documentation/source/.vscode/settings.json new file mode 100644 index 000000000..503abaf72 --- /dev/null +++ b/Artefacts/Documentation/source/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "restructuredtext.confPath": "d:\\Work\\vk\\Projects\\Sharp-Architecture\\Artefacts\\Documentation\\source" +} \ No newline at end of file diff --git a/Artefacts/Documentation/source/_static/Logo.bmp b/Artefacts/Documentation/source/_static/Logo.bmp new file mode 100644 index 000000000..3e3ce6870 Binary files /dev/null and b/Artefacts/Documentation/source/_static/Logo.bmp differ diff --git a/Artefacts/Documentation/source/_static/Logo_100x100.png b/Artefacts/Documentation/source/_static/Logo_100x100.png new file mode 100644 index 000000000..4551ae981 Binary files /dev/null and b/Artefacts/Documentation/source/_static/Logo_100x100.png differ diff --git a/docs/ProjectArchitecture.PNG b/Artefacts/Documentation/source/_static/ProjectArchitecture.PNG similarity index 100% rename from docs/ProjectArchitecture.PNG rename to Artefacts/Documentation/source/_static/ProjectArchitecture.PNG diff --git a/Artefacts/Documentation/source/_static/favicon.ico b/Artefacts/Documentation/source/_static/favicon.ico new file mode 100644 index 000000000..7a720397d Binary files /dev/null and b/Artefacts/Documentation/source/_static/favicon.ico differ diff --git a/src/SharpArch/SharpArch.VsSharpArchTemplate/SharpArchApplicationTemplate/SharpArchProject.Web/Content/Images/sharp_arch.jpg b/Artefacts/Documentation/source/_static/sharp_arch.jpg similarity index 100% rename from src/SharpArch/SharpArch.VsSharpArchTemplate/SharpArchApplicationTemplate/SharpArchProject.Web/Content/Images/sharp_arch.jpg rename to Artefacts/Documentation/source/_static/sharp_arch.jpg diff --git a/Artefacts/Documentation/source/additional-resources/additional-information.rst b/Artefacts/Documentation/source/additional-resources/additional-information.rst new file mode 100644 index 000000000..05a92b7cd --- /dev/null +++ b/Artefacts/Documentation/source/additional-resources/additional-information.rst @@ -0,0 +1,65 @@ +Additional Information +====================== + +Asking Questions +---------------- + +Join the `google group `_ and ask questions there or post your questions to `stackoverflow `_ with the tag 'sharp-architecture' and any other tags for projects your question might be related to (e.g. fluent-nhibernate, nhibernate, castle-windsor) + +Related Projects +---------------- + +- `Sharp Architecture + Contrib `_ +- `Sharp Architecture + Cookbook `_ +- `Castle Windsor `_ +- `NHibernate `_ +- `FluentNHibernate `_ + + +Blog posts +---------- + +- `Enhanced Query Objects With S#arp Architecture `_ + +Multimedia +---------- + +- `Introduction to S#arp Architecture `_ +- `Another look at Sharp Architecture: Validation, Design Decisions and Automapping `_ + + +Must reads +---------- + + - `Domain Driven Design Quickly free pdf `_ + - `Domain Driven Design `_ + - `Clean code `_ + - `Enterprise Integration Patterns `_ + - `Refactoring `_ + - `Test Driven Development `_ + - `Continuos Delivery `_ + - And many more... + +Recommended tools and libraries +------------------------------- + +* Deployment and configuration management + + `OpsCode Chef `_ + + `Puppet `_ + + `dropkick `_ + + `Octopus Deploy `_ + + `Rounhouse DB Migrations `_ + +* Profilers and productivity + + `Resharper `_ + + `Ants Performance Profiler `_ + + `Ants Memory Profiler `_ + + `NHibernate Profiler `_ + +Contributing +------------ + +- `Contribution guidlines on S#arp Architecture github `_ + diff --git a/Artefacts/Documentation/source/conf.py b/Artefacts/Documentation/source/conf.py new file mode 100644 index 000000000..ec9f40d10 --- /dev/null +++ b/Artefacts/Documentation/source/conf.py @@ -0,0 +1,271 @@ +# -*- coding: utf-8 -*- +# +# S#arp Architecture documentation build configuration file, created by +# sphinx-quickstart on Thu Oct 04 22:38:57 2012. +# +# This file is execfile()d with the current directory set to its containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + + +import sys, os + +# on_rtd is whether we are on readthedocs.org, this line of code grabbed from docs.readthedocs.org +on_rtd = os.environ.get('READTHEDOCS', None) == 'True' + +if not on_rtd: # only import and set the theme if we're building docs locally + import sphinx_rtd_theme + html_theme = 'sphinx_rtd_theme' + html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +#sys.path.insert(0, os.path.abspath('.')) + +# -- General configuration ----------------------------------------------------- + +# If your documentation needs a minimal Sphinx version, state it here. +#needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be extensions +# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. +extensions = ['sphinx.ext.intersphinx', 'sphinx.ext.todo', 'sphinx_markdown_builder'] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix of source filenames. +source_suffix = '.rst' + +# The encoding of source files. +#source_encoding = 'utf-8-sig' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'S#arp Architecture' +copyright = u'2012, S#arp Architecture team' + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = '2.1' +# The full version, including alpha/beta/rc tags. +release = '2.1rc' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +#language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +#today = '' +# Else, today_fmt is used as the format for a strftime call. +#today_fmt = '%B %d, %Y' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +exclude_patterns = [ + 'build/*' +] + +# The reST default role (used for this markup: `text`) to use for all documents. +#default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +#add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +#add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +#show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +highlight_language = 'c#' +# A list of ignored prefixes for module index sorting. +#modindex_common_prefix = [] + + +# -- Options for HTML output --------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +#html_theme_options = { +# "linkcolor" : "#990000", +# "headbgcolor" : "#FFFFFF", +# "footerbgcolor" : "#EDECDF", +# "sidebarbgcolor" : "#FFFFFF", +# "sidebartextcolor" : "#000000", +# "sidebarlinkcolor" : "#990000", +# "relbarbgcolor" : "#EDECDF", +# "relbartextcolor" : "#000000", +# "relbarlinkcolor" : "#990000", +# "codebgcolor" : "#EDECDF", +# "headtextcolor" : "#000000", +# "headlinkcolor" : "#000000", +# "stickysidebar" : "true" +#} + +# Add any paths that contain custom themes here, relative to this directory. +#html_theme_path = [] + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +html_title = u'S#arp Architecture documentation' + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = u'SharpArch' + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +html_logo = '_static/Logo_100x100.png' + +# The name of an image file (within the static path) to use as favicon of the +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +html_favicon = 'favicon.ico' + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +#html_last_updated_fmt = '%b %d, %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +#html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +#html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +#html_additional_pages = {} + +# If false, no module index is generated. +#html_domain_indices = True + +# If false, no index is generated. +html_use_index = False + +# If true, the index is split into individual pages for each letter. +#html_split_index = False + +# If true, links to the reST sources are added to the pages. +#html_show_sourcelink = True + +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +html_show_sphinx = True + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +html_show_copyright = False + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +#html_use_opensearch = '' + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +#html_file_suffix = None + +# Output file base name for HTML help builder. +htmlhelp_basename = 'SarpArchitecturedoc' + + +# -- Options for LaTeX output -------------------------------------------------- + +latex_elements = { +# The paper size ('letterpaper' or 'a4paper'). +#'papersize': 'letterpaper', + +# The font size ('10pt', '11pt' or '12pt'). +#'pointsize': '10pt', + +# Additional stuff for the LaTeX preamble. +#'preamble': '', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, author, documentclass [howto/manual]). +latex_documents = [ + ('index', 'SarpArchitecture.tex', u'S\\#arp Architecture Documentation', + u'S\\#arp Architecture team', 'manual'), +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +#latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +#latex_use_parts = False + +# If true, show page references after internal links. +#latex_show_pagerefs = False + +# If true, show URL addresses after external links. +#latex_show_urls = False + +# Documents to append as an appendix to all manuals. +#latex_appendices = [] + +# If false, no module index is generated. +#latex_domain_indices = True + + +# -- Options for manual page output -------------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ('index', 'sarparchitecture', u'S#arp Architecture Documentation', + [u'S#arp Architecture team'], 1) +] + +# If true, show URL addresses after external links. +#man_show_urls = False + + +# -- Options for Texinfo output ------------------------------------------------ + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ('index', 'SarpArchitecture', u'S#arp Architecture Documentation', + u'S#arp Architecture team', 'SarpArchitecture', 'One line description of project.', + 'Miscellaneous'), +] + +# Documents to append as an appendix to all manuals. +#texinfo_appendices = [] + +# If false, no module index is generated. +#texinfo_domain_indices = True + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +#texinfo_show_urls = 'footnote' + + +# Example configuration for intersphinx: refer to the Python standard library. +intersphinx_mapping = {'http://docs.python.org/': None} diff --git a/Artefacts/Documentation/source/general/acknowledgment.rst b/Artefacts/Documentation/source/general/acknowledgment.rst new file mode 100644 index 000000000..ac4949e20 --- /dev/null +++ b/Artefacts/Documentation/source/general/acknowledgment.rst @@ -0,0 +1,19 @@ +############### +Acknowledgments +############### + +Sharp Architecture attempts to represent the combined wisdom of many +software development giants. Included patterns and algorithms reflect +best practices described by the GoF, Martin Fowler, Uncle Bob Martin, +Steve McConnell, many gurus in the blogosphere and other industry +leaders. Many have been personally involved with helping to shape S#arp +Architecture's current form including and in no paticular order: Alec +Whittington, Chris Richards, Seif Attar, Jon George, Howard van Rooijen, +Billy McCafferty, Frank Laub, Kyle "the coding hillbilly" Baley, Simone +Busoli, Jay Oliver, Lee Carter, Luis Abreu, James Gregory, Vitaliy Kryvosheiev +and Martin Hornagold ... along with many others who have asked WTF at all the right +times. A special thanks to Roy Bradley who was brave crazy enough to +commission Billy to develop the first version 0.1. Finally, none of this +would have been possible and/or applicable without the tireless, unpaid +efforts of the teams behind projects such as NHibernate, Fluent +NHibernate, NHibernate Validator, MvcContrib, and Castle. diff --git a/Artefacts/Documentation/source/general/architecture.rst b/Artefacts/Documentation/source/general/architecture.rst new file mode 100644 index 000000000..c5aa1ae25 --- /dev/null +++ b/Artefacts/Documentation/source/general/architecture.rst @@ -0,0 +1,74 @@ +Architecture +============ + +The project is divided into the following layers: + +- Tasks +- Domain +- Infrastructure +- Presentation +- Specs/Tests + +Despite their divergent names, the layers and their functions should be +familiar to anyone with experience with the MVC pattern. + +Tasks +----- + +Previous known as "Application Services," the *Tasks Layer* serves to +tie together any non-business logic from a variety of third-party +services or persistence technologies. While setup and defining a service +such as Twitter would occur in the *Infrastructure Layer*, executing and +combining the results with, say, a local NHibernate database, would +occur in the *Tasks Layer*. The resulting viewModel or DTO would be sent +down to the *Presentation Layer* + + +Starting with version 4 Sharp Architecture does not contains support for Tasks. Use `MediatR `_ or similiar library instead. + +Additional occupants +^^^^^^^^^^^^^^^^^^^^ + +- EventHandlers +- CommandHandlers +- Commands + +Presentation +------------ + +The *Presentation Layer* contains the familiar MVC project with views, +viewmodels and controllers, along with application setup tasks. Previous +iterations of Sharp Architecture spun out controllers to a separate +application, but as of 2.0 this is no longer the case. + +Additional occupants +^^^^^^^^^^^^^^^^^^^^ + +- ViewModels: These can live in the Presentation or in the Tasks project, depending on whether your tasks layer will be returning ViewModels which is not usually the case as ViewModels are tied to a specific view. +- Query Objects: These can live in the Presentation or in the Tasks project, depending on whether you need the queries in your tasks layer. +- Controllers +- Views + +Infrastructure +-------------- + +The *Infrastructure Layer* setups up third party data sources, along +with items such as NHibernate maps. You can extend the repository implementation +with additional methods to perform specific queries, but it is recommended +to write your own Query Objects as shown in the `cookbook. `_ + +Domain +------ + +The *Domain Layer* is where business entities and other business logic +resides. The domain layer should be persistence ignorant, with any +persistence existing in the *Tasks Layer* or in the *Presentation Layer* +(for populating viewModels). + +Additional occupants +^^^^^^^^^^^^^^^^^^^^ + +- Contracts for Tasks +- Contracts for IQuery +- Events that are emitted by your domain + diff --git a/Artefacts/Documentation/source/general/frequently-asked-questions.rst b/Artefacts/Documentation/source/general/frequently-asked-questions.rst new file mode 100644 index 000000000..c1e5df37c --- /dev/null +++ b/Artefacts/Documentation/source/general/frequently-asked-questions.rst @@ -0,0 +1,120 @@ +Frequently Asked Questions +========================== + +**Q: Is there a continuous integration available for downloading built +S#arp Architecture artifacts?** + +A: Great question! In fact, S#arp Architecture is part of the CI +environment hosted at http://teamcity.codebetter.com. + +**Q: How do I register an NHibernate IInterceptor?** + +A: To register an IInterceptor, simply invoke the registration after +initializing NHibernateSession in Global.asax.cs; e.g., + +:: + + NHibernateSession.Init(new WebSessionStorage(this), + + new string[] { Server.MapPath("~/bin/MyProject.Data.dll") }); + + NHibernateSession.RegisterInterceptor(new MyAuditLogger()); + +**Q: How do I “downgrade” my S#arp Architecture project to not use Fluent +NHibernate Auto Mapping?** + +A: Starting with S#arp Architecture RC, Fluent NHibernate’s auto +persistence mapping is supported and included by default. If you have no +idea what I’m talking about, take a quick look at +http://www.chrisvandesteeg.nl/2008/12/02/fluent-nhibernates-autopersistencemodel-i-love-it/. +If you don’t want to use the Auto Mapping capabilities, you can use +Fluent NHibernate ClassMaps or HBMs as well. + +- Delete + YourProject.Infrastruction/NHibernateMaps/AutoPersistenceModelGenerator.cs + from your project + +- Modify YourProject.Web.Mvc/Global.asax.cs to no longer load the auto + persistence model and feed it to the NHibernate initialization + process. The following example code demonstrates how this may be + accomplished: + + AutoPersistenceModel autoPersistenceModel = new + AutoPersistenceModelGenerator().Generate(); + + NHibernateSession.Init(new WebSessionStorage(this), new string[] { + Server.MapPath("~/bin/Northwind.Infrastructure.dll") }); + +Likewise, within +YourProject.Tests/YourProject.Infrastructure/NHibernateMaps/MappingIntegrationTests +class, remove the passing of the auto-persistence model to the +NHibernate initialization process: + +:: + + [TestFixture] + [Category("DB Tests")] + public class MappingIntegrationTests + { + [SetUp] + public virtual void SetUp() { + string[] mappingAssemblies = + RepositoryTestsHelper.GetMappingAssemblies(); + + AutoPersistenceModel autoPersistenceModel = + new AutoPersistenceModelGenerator().Generate(); + + NHibernateSession.Init(new SimpleSessionStorage(), + mappingAssemblies, + "../../../../app/Northwind.Web.Mvc/NHibernate.config"); + } + +Compile and hope for the best. ;) + +Note that Fluent NHibernate Auto Mapper can live in happy coexistence +with Fluent NHibernate ClassMaps and HBMs. Simply exclude the applicable +classes from the Auto Mapper and add their mapping definition, +accordingly. Alternatively, it’s very simple to provide mapping +overrides as well, which is the approach I personally prefer to take. + +**Q: How do I run my S#arp Architecture project in a medium trust +environment?** + +A: If you must run in a Medium Trust environment, the following +modifications must be made to the NHibernate configuration: + + \… managed\_web \… Additionally, all class mappings need to be set to lazy="false". + +**Q: How do I run my S#arp Architecture project in 64 bit (x64) +environment?** + +A: There are a couple of options for running in a 64 bit environment. +The first is to switch IIS7 to have the website run in a classic .NET +application pool. Alternatively, you can create a separate app pool and +ensure that the "Enable 32 bit application" is checked under the +advanced settings for the app pool. + +In addition to modifying IIS for a 64 bit environment, also note that +that you should modify YourProject.Tests to build as an x86 assembly, as +the included SQLite assembly will only work as x86. Alternatively, you +could download an x64 compliant version of SQLite. + +**Q: Because the Entity’s Id property has a protected setter, the Id +property isn’t being included during XML serialization? What can we do +to include it?** + +A: Having the Id setter being protected is a fundamental principle of +S#arp Architecture. But there are times when the Id is needed to be +included during XML serialization. The following base class can be added +to YourProject.Core to facilitate the Id being included with XML +serialized objects: + +:: + + public class EntityWithSerializableId : Entity + { + public virtual int ItemId { + get { return Id; } + set { ; } + } + } diff --git a/Artefacts/Documentation/source/general/overview.rst b/Artefacts/Documentation/source/general/overview.rst new file mode 100644 index 000000000..667d10055 --- /dev/null +++ b/Artefacts/Documentation/source/general/overview.rst @@ -0,0 +1,32 @@ +Overview +======== + +Pronounced "Sharp Architecture," this is a solid architectural +foundation for rapidly building maintainable web applications leveraging +the ASP.NET MVC framework with NHibernate. The primary advantage to be +sought in using any architectural framework is to decrease the code one +has to write while increasing the quality of the end product. A +framework should enable developers to spend little time on +infrastructure details while allowing them to focus their attentions on +the domain and user experience. Accordingly, S#arp Architecture adheres +to the following key principles: + +* Focused on Domain Driven Design +* Loosely coupled +* Preconfigured Infrastructure +* Open Ended Presentation + +The overall goal of this is to allow developers to worry less about +application "plumbing" and to spend most of their time on adding value +for the client by focusing on the business logic and developing a rich +user experience. + +Absolutely essential reading is Eric Evans' `Domain Driven Design `_. For a +quick introduction to the subject, see `Domain Driven Design Quickly `_ +which is a concise summary of Evans' classic work. Other useful +background material, albeit dated, includes `NHibernate Best +Practices `_. +Although there are major infrastructural changes from the referenced +article when compared to the current S#arp Architecture, the general +structure is very similar and the background reading is helpful in +understanding many of the ideas behind this development foundation. \ No newline at end of file diff --git a/Artefacts/Documentation/source/general/unitofwork.rst b/Artefacts/Documentation/source/general/unitofwork.rst new file mode 100644 index 000000000..9935d3fa3 --- /dev/null +++ b/Artefacts/Documentation/source/general/unitofwork.rst @@ -0,0 +1,25 @@ +Unit of Work +============ + +`Unit of work `_ pattern for ASP.NET MVC is implemented +using combination of TransactionAttribute and UnitOfWorkHandler. + +TransactionAttribute is used to configure unit of work for controller action, no actual transaction management +is implemented by it. + +It configures following parameters: + +- isolation level; +- whether transaction is committed or rolled back in case of model validation error; + +UnitOfWorkHandler is a `MVC ActionFilter `_ +which is used to wrap Controller action in transaction. + +Best practices +-------------- + +- Apply TransactionAttribute at *controller* or *action* level. + Applying it globally will cause transaction open on every request. +- Register UnitOfWorkHandler globally. + This class is stateless, using it as a singleton will reduce memory allocation count and improve performance. + diff --git a/Artefacts/Documentation/source/getting started/installation.rst b/Artefacts/Documentation/source/getting started/installation.rst new file mode 100644 index 000000000..c443a7fc8 --- /dev/null +++ b/Artefacts/Documentation/source/getting started/installation.rst @@ -0,0 +1,41 @@ +.. _installation: + +Installation +============ + +Using NuGet +----------- + +**ASP.NET MVC** + +Install following packages: + +* `SharpArch.Web.Mvc `_ +* `SharpArch.Web.Mvc.Castle `_ if Castle.Windsor is your container of choice. + +See TradisBank.Web.Mvc/CastleWindsor/ and TradisBank.Web.Mvc/Global.asax.cs for more details on how configure and initialize IoC. + + +**ASP.NET WebAPI** + +* `SharpArch.Web.Http `_ +* `SharpArch.Web.Http.Castle `_ if Castle.Windsor is your container of choice. + + +Deploy Sharp Architecture with Templify +--------------------------------------- + +**Templify is not supported anymore.** + + + Download and install `Templify `_. Make sure to install the + latest Sharp Architecture package by going to the Sharp Architecture + `Downloads `_ page and downloading the Templify zip required, currently there are templates for NHibernate and RavenDB. + + Extract the contents and run the \*.cmd file to install the package. + + Next, select the folder you wish to deploy Sharp Architecture. In our + case, let's create a folder and name the project, IceCreamYouScreamCorp. + After Templify has finished deploying the package, go ahead and launch + the solution in Visual Studio. + diff --git a/Artefacts/Documentation/source/getting started/simple-crud-application.rst b/Artefacts/Documentation/source/getting started/simple-crud-application.rst new file mode 100644 index 000000000..6498fa7f8 --- /dev/null +++ b/Artefacts/Documentation/source/getting started/simple-crud-application.rst @@ -0,0 +1,267 @@ +Simple CRUD application +======================= + +Sharp Architecture makes it simple to do CRUD applications right out of +the box. While we recommend the use of another framework such as Dynamic +Data for CRUD heavy sites, take a look at how to do simple CRUD +operations in Sharp Architecture. + +:ref:`Install` S#arp Architecture using your preferred method + +Create your first entity +------------------------ + +Let's jump back over to our Visual Studio solution. Navigate to your +Domain project and define a class called Product that inherits from +Entity. All domain objects that are persisted in Sharp inherit from this +base class. Entity does many things, but for the purposes of this +example we only care about the fact that: + +- The property Id is already set for us. +- We are now inheriting a ValidatableObject, which gives us the + IsValid() method. + +Due to NHibernate, all properties must be marked virtual. We'll only +have one property for this class, a string titled Name. When you're +done, your class should look like this: + +:: + + namespace IceCreamYouScreamCorp.Domain + { + using System; + using System.ComponentModel.DataAnnotations; + + using SharpArch.Domain.DomainModel; + + public class Product : Entity + { + [Required(ErrorMessage = "Must have a clever name!")] + public virtual string Name { get; set; } + } + } + +Configure NHibernate.config +--------------------------- + +You can skip this step if you are using RavenDB persistance. + +Before we go any further, navigate to your Mvc project and find +NHibernate.config. I'm assuming you're running a local instance of SQL +Express with a database named IceCreamDb. You'll need to figure out your +own connection string, but once you do, find the +"connection.connection\_string" tags: + +:: + + Server=localhost\SQLEXPRESS;Initial Catalog=IceCreamDb;Integrated Security=SSPI; + +Prep your database environment +------------------------------ + +You can skip this step if you are using RavenDB persistance. + +Before we start we'll need to wire up NHibernate to your database. If +you have not already done so, create a database. Let's assume you have +SQLExpress running on your local machine and you've created a database +called IceCreamDb. + +Run the test +``IceCreamYouScreamCorp.Tests.SharpArchTemplate.Data.NHibernateMaps.CanGenerateDatabaseSchema`` +which will generate a script for creating the database in the Database +folder under the folder you templified. + +Alternatively, run the +``IceCreamYouScreamCorp.Tests.SharpArchTemplate.Data.NHibernateMaps.CanCreateDatabase`` +test which will create the tables for you. This test is set to run +explictly to avoid overwriting existing tables. + +Create a Controller +------------------- + +Create a controller in your controllers folder named ProductsController. + + NB: In this example we're injecting repositories into our + controllers. This is not recommended best practice. Please see the + Cookbook example for abstracting this to your Tasks layer. I think + for the purposes of this example, it is much more clear to inject + the Repository. + + NB + 1: Sharp Architecture uses dependency injection, the "Don't + call us, we'll call you," principle. Dependency injection is a bit + out of the scope of the article. If this is new to you, I highly + recommend looking at `Martin Fowler's + article `_. + +One of the great things about Sharp Architecture is that it has created +a generic repository for you. Generally there's no need to worry about +the NHibernate session, or creating a specific repository each time you +need to talk to your database. As such, let's create a local field, +``private readonly INHibernateRepository productRepository;`` +and inject it into our controller: + +:: + + public ProductsController(INHibernateRepository productRepository) + { + this.productRepository = productRepository; + } + +Create ActionResults for our Crud Operations +-------------------------------------------- + +Now we're all setup let's we'll need to do the following things: + +- Return a list of all products +- Return a single product +- Create/Update a single product +- Delete a product + +Returning all products on the ``Index`` ActionResult: + +:: + + public ActionResult Index() + { + var products = this.productRepository.GetAll(); + return View(products); + } + +Return a single product and display it on an editable form: + +:: + + [Transaction] + [HttpGet] + public ActionResult CreateOrUpdate(int id) + { + var product = this.productRepository.Get(id); + return View(product); + } + +Post the result, return the object if it is invalid: + +:: + + [Transaction] + [ValidateAntiForgeryToken] + [HttpPost] + public ActionResult CreateOrUpdate(Product product) + { + if (ModelState.IsValid && product.IsValid()) + { + this.productRepository.SaveOrUpdate(product); + return this.RedirectToAction("Index"); + } + + return View(product); + } + +Delete a product, making sure we are posting as we are changing data. + +:: + + [Transaction] + [ValidateAntiForgeryToken] + [HttpPost] + public ActionResult Delete(int id) + { + var product = this.productRepository.Get(id); + + if (product == null) + { + return HttpNotFound(); + } + + this.productRepository.Delete(product); + return this.RedirectToAction("Index"); + } + +Add the views +------------- + +Now all we have to do is create our views for each action. Once this is +complete, you can run the application to see it in action. + +Index.cshtml: + +:: + + @using IceCreamYouScreamCorp.Web.Mvc + @model IEnumerable + + @{ + ViewBag.Title = "Index"; + } + +

Index

+ +

+ @Html.ActionLink((ProductsController c) => c.CreateOrUpdate(0),"Create New") +

+ + + + + + + + @foreach (var item in Model) { + + + + + + } +
+ Name +
+ @Html.DisplayFor(modelItem => item.Name) + + @Html.ActionLink("Edit", "CreateOrUpdate", new { id=item.Id }) + + @using (Html.BeginForm("Delete", "Products")) { + @Html.Hidden("id", item.Id) + + @Html.AntiForgeryToken() + } +
+ +CreateOrUpdate.cshtml: + +:: + + @model IceCreamYouScreamCorp.Domain.Product + + @using (Html.BeginForm()) { + @Html.ValidationSummary(true) +
+ Product + +
+ @Html.LabelFor(model => model.Name) +
+
+ @Html.EditorFor(model => model.Name) + @Html.ValidationMessageFor(model => model.Name) +
+ +

+ +

+
+ + @Html.AntiForgeryToken() + } + +
+ @Html.ActionLink("Back to List", "Index") +
+ +**Done!** + +Start the web project go to /Products to marvel at your creation. + +We've achieved the basics of a CRUD operation, without touching on TDD +or some other best practices, but this should get you going very quickly +on using Sharp Architecture in your project. diff --git a/Artefacts/Documentation/source/index.rst b/Artefacts/Documentation/source/index.rst new file mode 100644 index 000000000..e080b58c0 --- /dev/null +++ b/Artefacts/Documentation/source/index.rst @@ -0,0 +1,55 @@ +.. S#arp Architecture documentation master file, created by + sphinx-quickstart on Thu Oct 04 22:38:57 2012. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +.. image:: _static/sharp_arch.jpg + +S#arp Architecture +================== + +If you're getting into S#arp Architecture for the first time, there's a bit of +learning and background materials to digest. This is the place to start! Follow the +documentation links below from top to bottom to get a firm understanding of +S#arp Architecture and to get yourself fully qualified to develop your own S#arp project. + +General +------- + +.. toctree:: + :maxdepth: 3 + + general/overview + general/acknowledgment + general/frequently-asked-questions + general/architecture + +Getting started +--------------- +.. toctree:: + :maxdepth: 3 + + getting started/installation + getting started/simple-crud-application + +Updating +-------- +.. toctree:: + :maxdepth: 3 + + updating/nuget + +Features +-------- +.. toctree:: + :maxdepth: 3 + + nhibernate/nhibernate + ravendb/ravendb + +Additional resources +-------------------- +.. toctree:: + :maxdepth: 3 + + additional-resources/additional-information diff --git a/Artefacts/Documentation/source/nhibernate/hilo-generator.rst b/Artefacts/Documentation/source/nhibernate/hilo-generator.rst new file mode 100644 index 000000000..468276406 --- /dev/null +++ b/Artefacts/Documentation/source/nhibernate/hilo-generator.rst @@ -0,0 +1,35 @@ +NHibernate HiLo Generator +========================= + +Why use HiLo +------------ + +HiLo identity generators allow NHibernate to generate identity values to map child objects to their parent without having to hit the database as opposed to using the native identity generation causes nhibernate to hit the database on every save, which affects performance and running of batch statements. + +For more information on generator behaviours refer to `this `_ blog post by Fabio Maulo. + +Using HiLo Id generation +------------------------ +In your Infrastructure project, under NHibernateMaps: + +.. code-block:: C# + + public class PrimaryKeyConvention : IIdConvention + { + public void Apply(FluentNHibernate.Conventions.Instances.IIdentityInstance instance) + { + instance.Column(instance.EntityType.Name + "Id"); + instance.UnsavedValue("0"); + instance.GeneratedBy.HiLo("1000"); + } + } + +Create the following table: + +.. code-block:: sql + + CREATE TABLE [dbo].[hibernate_unique_key]( + [next_hi] [int] NOT NULL + ) ON [PRIMARY] + +Populate the column with a number to seed and you're done. diff --git a/Artefacts/Documentation/source/nhibernate/multiple-dbs.rst b/Artefacts/Documentation/source/nhibernate/multiple-dbs.rst new file mode 100644 index 000000000..2adfee592 --- /dev/null +++ b/Artefacts/Documentation/source/nhibernate/multiple-dbs.rst @@ -0,0 +1,125 @@ +Multiple Databases +================== + +Version 4 +----------- + +.. note:: + + Due to refactoring of NHibernate session management S#arch v4.0 does not support multiple databases. + + +This feature will be added in 4.1. + + +Version 3 +--------- +To add support for an additional database to your project: + + +Create an NHibernateForOtherDb.config file which contains the connection +string to the new database + +Within YourProject.Web.Mvc/Global.asax.cs, immediately under the +NHibernateSession.Init() to initialize the first session factory, an +additional call to NHibernateSession.AddConfiguration(). While the first +NHibernate initialization assumes a default factory key, you'll need to +provide an explicit factory key for the 2nd initialization. This factory +key will be referred to by repositories which are tied to the new +database as well; accordingly, I'd recommend making it a globally +accessible string to make it easier to refere to in various locations. +E.g., + +.. code-block: C# + + NHibernateSession.AddConfiguration(Northwind.Infrastructure.DataGlobals.OTHER_DB_FACTORY_KEY, + new string[] { Server.MapPath("~/bin/Northwind.Data.dll") }, + new AutoPersistenceModelGenerator().Generate(), + Server.MapPath("~/NHibernateForOtherDb.config"), null, null, null); + + // In DataGlobals.cs: + public const string OTHER_DB_FACTORY_KEY = "nhibernate.other_db"; + +Create an Entity class which you intend to be tied to the new database; +e.g., + +.. code-block: C# + + public class Village : Entity + { + public virtual string Name { get; set; } + } + +Within YourProject.Core/DataInterfaces, add a new repository interface +for the Entity class and simply inherit from the base repository +interface. Since you'll need to decorate the concrete repository +implementation with the factory session key, you need to have the +explicit interface to then have the associated concrete implementation; +e.g., + +.. code-block: C# + + using SharpArch.Core.PersistenceSupport; + + namespace Northwind.Domain.DataInterfaces + { + public interface IVillageRepository : IRepository { } + } + +Within YourProject.Data, add a new repository implementation for the +repository interface just defined; e.g., + +.. code-block: C# + + using Northwind.Core.DataInterfaces; + using SharpArch.Data.NHibernate; + using Northwind.Core; + + namespace Northwind.Infrastructure + { + [SessionFactory(DataGlobals.OTHER_DB_FACTORY_KEY)] + public class VillageRepository : + Repository, IVillageRepository { } + } + +Within YourProject.Web.Mvc.Controllers, add a new controller which will +use the repository (or which will accept an application service which +then uses the repository); e.g., + +.. code-block: C# + + using System.Web.Mvc; + using SharpArch.Web.NHibernate; + using Northwind.Core.DataInterfaces; + using SharpArch.Core; + using Northwind.Core; + using System.Collections.Generic; + + namespace Northwind.Web.Mvc.Controllers + { + public class VillagesController : Controller + { + public VillagesController( + IVillageRepository villageRepository) { + Check.Require(villageRepository != null, + "villageRepository may not be null"); + this.villageRepository = villageRepository; + } + + [Transaction(DataGlobals.OTHER_DB_FACTORY_KEY)] + public ActionResult Index() { + IList villages = villageRepository.GetAll(); + return View(villages); + } + + private IVillageRepository villageRepository; + } + } + +Create an index page to list the villages given to it from the +controller. + +Note that the WCF support built into the SharpArch libraries does NOT +support multiple databases at this time. WCF will always use the +"default" database; the one which is configured without an explicit +session factory key. diff --git a/Artefacts/Documentation/source/nhibernate/nhibernate-configuration-cache.rst b/Artefacts/Documentation/source/nhibernate/nhibernate-configuration-cache.rst new file mode 100644 index 000000000..b410c709e --- /dev/null +++ b/Artefacts/Documentation/source/nhibernate/nhibernate-configuration-cache.rst @@ -0,0 +1,93 @@ +Configuration cache +=================== + +During an application's startup NHibernate can take significant time +when configuring and validating it's mapping to a database. Caching the +NHibernate configuration data can reduce initial startup time by storing +the configuration to a file and avoiding the validation checks that run +when a configuration is created from scratch. + +SharpArch provides interface INHibernateConfigurationCache +and NHibernateConfigurationFileCache class which caches configuration +in a file under system TEMP folder. + +This new feature is based on an article by Oren Eini (aka Ayende Rahien) Building a Desktop +To-Do Application with NHibernate, and a big thanks to Sandor +Drieenhuizen who provided a lot of this code. + +Cache Setup +----------- + +To use the configuration cache provide cache implementation to UseConfigurationCache() method +of the NHibernateSessionFactoryBuilder class: + +For example: + +.. code-block:: C# + + ISessionFactory sessionFactory = new NHibernateSessionFactoryBuilder() + .AddMappingAssemblies(new[] { HostingEnvironment.MapPath(@"~/bin/Suteki.TardisBank.Infrastructure.dll") }) + .UseAutoPersistenceModel(new AutoPersistenceModelGenerator().Generate()) + .UseConfigFile(HostingEnvironment.MapPath("~/NHibernate.config")) + .UseConfigurationCache(new NHibernateConfigurationFileCache()) + .BuildSessionFactory(); + + +Details +------- + +:: + + INHibernateConfigurationCache + +Interface that defines two methods for loading and saving the configuration cache. + +.. code-block:: C# + + NHibernate.Cfg.Configuration LoadConfiguration([NotNull] string configKey, string configPath, + [NotNull] IEnumerable mappingAssemblies); + + void SaveConfiguration([NotNull] string configKey, [NotNull] NHibernate.Cfg.Configuration config); + + +These methods are used by the NHibernateSession.AddConfiguration method to load and save a configuration object to and from a cache file. +This interface allows others to implement their own file caching mechanism if necessary. + +:: + + NHibernateConfigurationFileCache + +This class implements the interface and does the work of caching the configuration. +Several methods are virtual so they can be overridden in a derived class, as may be necessary to store the cache file in a +different location or to have different logic to invalidate the cache. + +The constructor takes an optional string array of file dependencies which are +used to test if the cached NHibernate configuration is current or not. +If any of the dependent file's last modified time stamp is later than +that of the cached configuration, then the cached file is discarded and +a new configuration is created from scratch. This configuration is then +serialized and saved to a file. + +Note: NHibernate's XML config file and the mapping assemblies (ex: "Northwind.Data.dll") +are automatically included when testing if the cached configuration is current. + + +FileCache +--------- + +The SharpArch.Domain project now contains a FileCache class that can +serialize and deserialize an object to a file in binary format. This +class uses a generic type parameter to define the type being serialized +and deserialized. This makes the FileCache class useful for any other +object that you might want to serialize to a file. + + +Configuration Serialization +--------------------------- + +To cache the configuration to a file, all objects contained within the +NHibernate configuration **must be serializable**. All of the default data +types included with NHibernate will serialize, but if you have any +custom data types (i.e. classes that implement IUserType), they must +also be marked with the [Serializable] attribute and, if necessary, +implement ISerializable. diff --git a/Artefacts/Documentation/source/nhibernate/nhibernate.rst b/Artefacts/Documentation/source/nhibernate/nhibernate.rst new file mode 100644 index 000000000..2ce5380bc --- /dev/null +++ b/Artefacts/Documentation/source/nhibernate/nhibernate.rst @@ -0,0 +1,11 @@ +########## +NHibernate +########## + +.. toctree:: + + transaction.rst + hilo-generator.rst + nhibernate-configuration-cache.rst + multiple-dbs.rst + using-sharparchitecture-with-nhibernate.search-(lucene.net).rst \ No newline at end of file diff --git a/Artefacts/Documentation/source/nhibernate/transaction.rst b/Artefacts/Documentation/source/nhibernate/transaction.rst new file mode 100644 index 000000000..5316588dd --- /dev/null +++ b/Artefacts/Documentation/source/nhibernate/transaction.rst @@ -0,0 +1,10 @@ +Using Unit of Work with NHibernate +================================ + +TransactionAttribute implements Unit of work pattern for ASP.NET MVC and ASP.NET WebAPI controller. + +See ::doc:`/../general/unitofwork.rst` + +Please refer to Samples/SharpArch.WebAPI for details. + +**TODO:** update documentation. diff --git a/Artefacts/Documentation/source/nhibernate/using-sharparchitecture-with-nhibernate.search-(lucene.net).rst b/Artefacts/Documentation/source/nhibernate/using-sharparchitecture-with-nhibernate.search-(lucene.net).rst new file mode 100644 index 000000000..b2a25b988 --- /dev/null +++ b/Artefacts/Documentation/source/nhibernate/using-sharparchitecture-with-nhibernate.search-(lucene.net).rst @@ -0,0 +1,174 @@ +S#arp Architecture with NHibernate.Search +========================================= + +.. note:: + *Do* **not** *use this with NHibernate Configuration Cache:* + + NHibernateSession.ConfigurationCache = new NHibernateConfigurationFileCache(); + +NuGet Install +------------- + +Install-Package NHibernate.Search + +(This used to be a big deal, building from source, etc.) + +Configuring and Building the Index +---------------------------------- + +Maintaining an index in Lucene is easy. There's a configuration setting +to keep any deletes, inserts or updates current in the index, and a way +to build the index from an existing dataset from scratch. You usually +need both unless you're starting on a project from scratch, but even so, +it is nice to have a way to build an index in case the existing index +gets corrupted. + +This example will assume you've created a folder in the root of your MVC +project, and have given the ASP.NET security guy full permissions. + +Open up your root Web.Config, add the following right above : + +Right below add the following: + +.. code-block:: xml + + + + ~\LuceneIndex + + + +Navigate to your NHibernate.Config, before add: + +.. code-block:: xml + + + + + +Add a Search Repository +----------------------- + +In "Northwind.Infrastructure" add a repository called +"ContractRepository.cs" (the example assumes you have an object you want +to search over called contract): + +.. code-block:: C# + + public interface IContractRepository + { + IList Query(string q) + void BuildSearchIndex(); + } + +Let's add a method to this repository that will create the initial +index, if an index already exists, it will be deleted. We'll iterate +through all the Suppliers to accomplish this: + +.. code-block:: C# + + public void BuildSearchIndex() + { + FSDirectory entityDirectory = null; + IndexWriter writer = null; + + var entityType = typeof(Contract); + + var indexDirectory = new DirectoryInfo(GetIndexDirectory()); + + if (indexDirectory.Exists) + { + indexDirectory.Delete(true); + } + + try + { + var dir = new DirectoryInfo(Path.Combine(indexDirectory.FullName, entityType.Name)); + entityDirectory = FSDirectory.Open(dir); + writer = new IndexWriter(entityDirectory, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29), true, IndexWriter.MaxFieldLength.UNLIMITED); + } + finally + { + if (entityDirectory != null) + { + entityDirectory.Close(); + } + + if (writer != null) + { + writer.Close(); + } + } + + var fullTextSession = Search.CreateFullTextSession(this.Session); + + // Iterate through contracts and add them to Lucene's index + foreach (var instance in Session.CreateCriteria(typeof(Contract)).List()) + { + fullTextSession.Index(instance); + } + } + + private static string GetIndexDirectory() + { + INHSConfigCollection nhsConfigCollection = CfgHelper.LoadConfiguration(); + string property = nhsConfigCollection.DefaultConfiguration.Properties["hibernate.search.default.indexBase"]; + var fi = new FileInfo(property); + return Path.Combine(AppDomain.CurrentDomain.BaseDirectory, fi.Name); + } + +Finally, we'll add a method to query the index: + +.. code-block:: C# + + private static string GetIndexDirectory() + { + INHSConfigCollection nhsConfigCollection = CfgHelper.LoadConfiguration(); + string property = nhsConfigCollection.DefaultConfiguration.Properties["hibernate.search.default.indexBase"]; + var fi = new FileInfo(property); + return Path.Combine(AppDomain.CurrentDomain.BaseDirectory, fi.Name); + } + +Add Search Controller +--------------------- + +.. code-block:: C# + + namespace Northwind.Web.Controllers + { + private readonly IContractRepositorycontractRepository; + + public class SearchController : Controller + { + public LuceneSupplierController(IContractRepositorycontractRepository) + { + this.contractRepository= contractRepository; + } + + public ActionResult BuildSearchIndex() + { + contractRepository.BuildSearchIndex(); + return RedirectToAction("Index", "Home"); + } + + public ActionResult Search(string query) + { + List Contracts = contractRepository.Query(query).ToList(); + return View(Contracts ); + } + } + } + +- Wire up a view to display the search results +- Navigate to localhost:portnumber/ContractController/BuildSearchIndex +- This will (quickly) build your index, it would be beneficial to pass + status messages here +- You should see a Suppliers folder in the LuceneIndex folder of the + project +- To verify the index, download Luke and point it to the LuceneIndex + +Pre-Requisite Reading +--------------------- +I really recommend Hibernate Search in Action, you can really make +queries do some neat things that aren't covered in this tutorial. It +will, however, get you up and running quickly. diff --git a/Artefacts/Documentation/source/ravendb/ravendb.rst b/Artefacts/Documentation/source/ravendb/ravendb.rst new file mode 100644 index 000000000..47858939f --- /dev/null +++ b/Artefacts/Documentation/source/ravendb/ravendb.rst @@ -0,0 +1,16 @@ +####### +RavenDB +####### + +RavenDB support was added in version 2.1, for sample usage checkout the `SharpArch.TardisBank solution `_ which is a fork of `Mike Hadlow's Suteki.TardisBank `_ that was converted to use S#arp Architecture with NHibernate and then converted to work with S#arp Architecture's RavenDB. + +The repostiory shows usage of various features of S#arp Architecture, and is a work in progress for a good sample project. + +You can start with RavenDB by following the installation steps and using the RavenDB templify template from `S#arp Architecture releases `_. + +The RavenDB feature provides generic repositories for use with RavenDB and a UnitOfWork attribute, you can learn more about the UnitOfWorkAttribute by following the link below. + +.. toctree:: + + unitofwork.rst + diff --git a/Artefacts/Documentation/source/ravendb/unitofwork.rst b/Artefacts/Documentation/source/ravendb/unitofwork.rst new file mode 100644 index 000000000..b92bff998 --- /dev/null +++ b/Artefacts/Documentation/source/ravendb/unitofwork.rst @@ -0,0 +1,11 @@ +#################### +UnitOfWork attribute +#################### + +With the RavenDB client, changes are not persisted until SaveChanges is called on the RavenDB session. With S#arp Architecture's implementaion of the RavenDB repository, the changes are not persisted on each call, in order to allow for multiple changes to happen per request with all of them being atomic, so that a later error within the request would not leave you application in an inconsitant state. + +The UnitOfWorkAttribute should be added to all controller actions where changes are being made to RavenDB, otherwise the changes would not be persisted (unless you get hold of the session and call save changed youself). + +RavenDB provides does provide DTC transactions, but the UnitOfWork attribute only uses RavenDB's standard transactions based on the SaveChanges call. + +If you want more information about transactions in RavenDB, refer to `RavenDB transaction support page `_. diff --git a/Artefacts/Documentation/source/updating/nuget.rst b/Artefacts/Documentation/source/updating/nuget.rst new file mode 100644 index 000000000..dc29abcc6 --- /dev/null +++ b/Artefacts/Documentation/source/updating/nuget.rst @@ -0,0 +1,36 @@ +Updating +======== + +Notes +----- + +These are general notes on updating, for specfic notes on updating check the instructions for the version you are updating to below. + +In Visual Studio, open the Package Manager Console, and run: + +:: + + Update-Package -Safe + +Will only update packages where Major and Minor versions match what you have installed, which should work for patch updates (i.e. from 2.0.0 to 2.0.4) but will not update minor or major releases. + +If any of the assemblies that have been updated are strongly named (most are unfortunatley), you would need to add assembly binding redirects to your applications config files (including the test projects). Luckily this can be done easily with nuget, in the Package Manager Console select run: + +:: + + foreach ($proj in get-project -all) {Add-BindingRedirect -ProjectName $proj.Name} + + +2.0 to 2.1 +---------- + +You can pick and choose which of those packages you want updates, if you just want to update NHibernate, then just run the command with SharpArhc.NHibernate + +:: + + Update-Package SharpArch.Web.Mvc.Castle + Update-Package SharpArch.NHibernate + Update-Package SharpArch.Testing.NUnit + Update-Package SharpArch.Domain + +If you get problems with Iesi.Collections version mismatch, this is because versions of NHibernate < 3.3.1 didn't specify the highest version of Iesi.Collections, causing problems now that there is a major version change released. To fix this, add allowedVersions=(,4.0) as an attirbute to the Iesi.Collections element to any packages.config file that has it. diff --git a/Artefacts/ReSharper/Code-Styles/mspec_member_layout.xml b/Artefacts/ReSharper/Code-Styles/mspec_member_layout.xml new file mode 100644 index 000000000..8f3ef1f91 --- /dev/null +++ b/Artefacts/ReSharper/Code-Styles/mspec_member_layout.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Artefacts/ReSharper/Code-Styles/resharper_style.xml b/Artefacts/ReSharper/Code-Styles/resharper_style.xml new file mode 100644 index 000000000..ec9c91805 --- /dev/null +++ b/Artefacts/ReSharper/Code-Styles/resharper_style.xml @@ -0,0 +1,289 @@ + + + + False + 2 + 1 + False + False + False + False + False + False + False + False + False + False + True + False + False + True + False + True + False + True + False + True + False + True + False + True + False + True + False + True + False + False + False + True + False + False + False + False + False + False + False + True + False + False + True + True + True + True + True + False + True + True + True + True + True + True + True + True + True + True + True + True + False + True + True + False + False + False + False + True + True + True + False + False + False + False + True + False + False + False + False + False + NEXT_LINE + NEXT_LINE + NEXT_LINE + NEXT_LINE + NEXT_LINE + NEXT_LINE + MULTILINE + True + False + True + True + True + DO_NOT_CHANGE + DO_NOT_CHANGE + DO_NOT_CHANGE + DO_NOT_CHANGE + DO_NOT_CHANGE + DO_NOT_CHANGE + DO_NOT_CHANGE + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 1 + + <_0>public + <_1>protected + <_2>internal + <_3>private + <_4>new + <_5>abstract + <_6>virtual + <_7>override + <_8>sealed + <_9>static + <_10>readonly + <_11>extern + <_12>unsafe + <_13>volatile + + False + False + True + True + True + True + False + False + True + True + True + True + True + 120 + False + False + False + False + False + False + False + False + False + False + False + WRAP_IF_LONG + WRAP_IF_LONG + WRAP_IF_LONG + CHOP_IF_LONG + CHOP_IF_LONG + CHOP_IF_LONG + CHOP_IF_LONG + CHOP_IF_LONG + DO_NOT_CHANGE + True + False + True + False + True + True + True + False + False + False + True + True + True + False + False + True + True + False + False + False + DO_NOT_USE + + + False + True + False + True + True + + + True + + + + + False + 2 + True + False + True + False + False + False + False + False + True + False + False + False + True + False + False + True + False + False + False + False + True + True + True + False + True + False + False + True + 2 + 2 + True + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 1 + True + 120 + False + False + False + WRAP_IF_LONG + WRAP_IF_LONG + WRAP_IF_LONG + CHOP_IF_LONG + True + True + True + True + True + True + False + False + False + False + True + True + True + + + True + False + + + True + + + False + + e + False + + + + + + \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000..b310d147e --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,59 @@ +#Contributing# + +Any form of contribution is welcome, read below for different ways you can help. + +Make sure to set AutoCRLF=true in your Git tool before cloning this repository. See [http://help.github.com/dealing-with-lineendings/](http://help.github.com/dealing-with-lineendings/) for more information. + +##Documentation## + +Documentation can be viewed on [sharp-architecture.readthedocs.org](http://sharp-architecture.readthedocs.org/) and gets generated from RST from the files in /Doc folder. + +> An RST web editor can be found [here](http://rst.ninjs.org/) + +If your changes require a change in the documentation (e.g. adding a feature or changing existing behaviour) then you will need to modfy documentation accordingly. +You can use the github webUI to do small changes like spelling mistakes and formatting. Feature or hotfix documentation changes should be included in the pull request. + +##Bug reports and feature requsts## + +- Ensure bug is reproducable with latest release. +- Look for existing github issue, create a new one if it doesn't exist. +- When reporting an issue, make sure you include: + - What you did? + - What happened? + - What you expected to happen? + +###New features### + +Make sure to discuss new features on the [mailing first](http://groups.google.com/group/sharp-architecture "Sharp Architecture mailing list") before adding issues for them. + +##Submitting code changes## + +- Create [Github account](https://github.com/signup/free) +- [Setup git](https://help.github.com/articles/set-up-git) +- [Fork](https://help.github.com/articles/fork-a-repo "Fork") project +- Clone repostiory `git clone git@github.com:USER/Sharp-Architecture.git` +- Add upstream repository `git remote add upstream git@github.com:sharparchitecture/Sharp-Architecture.git` +- Initialize submodules + + git submodule init + git submodule update + +- Create new feature with `git flow feature start MEANINFUL_NAME`, for bug fixes create new branch with `git flow hotfix start VERSION_NUM` where VERSION_NUM is the current release version with the patch version incremented. For more information on versioning strategy, read up on [SemVer](http://semver.org/) +- cd to the Build directory and run Build.cmd to generate AssemblyInfo files required to build the solution. +- Make you changes, making sure your coding style and standards adhere to the code standards followed throughout the code, a [StyleCop](http://stylecop.codeplex.com/) rules file exists to highlight style problems. +- cd to the Build directory and run BuildAndTest.cmd to make sure all tests are still passing +- Update documentation +- Commit and push +- Open [pull request](https://help.github.com/articles/using-pull-requests) with the target branch being develop for features and master for hotfixes. +- Treat youself for whatever you fancy for a job well done. + +##Release process## + +- Sharp Architecture follows [GitFlow](http://gitversion.readthedocs.io/en/latest/git-branching-strategies/gitflow/#gitflow) strategy. +- Sharp Architecture uses [GitVerion](https://github.com/GitTools/GitVersion) in [ContinuousDeployment mode](http://gitversion.readthedocs.io/en/latest/reference/continuous-deployment/). + +###Release steps### +- Create releases/SemVer branch from develop and make required changes here. +- Merge releases/SemVer branch to master. +- Tag master with releases/vSemVer and push tags to github. +- Merge master back to develop. diff --git a/ClickToBuild.bat b/ClickToBuild.bat deleted file mode 100644 index 94d8604f4..000000000 --- a/ClickToBuild.bat +++ /dev/null @@ -1,2 +0,0 @@ -call go.bat build -pause diff --git a/Directory.Build.props b/Directory.Build.props new file mode 100644 index 000000000..8d135acaa --- /dev/null +++ b/Directory.Build.props @@ -0,0 +1,89 @@ + + + Sharp Architecture + Sharp Architecture Dev Team + Copyright © Sharp Architecture Development Team + netstandard2.0;netstandard2.1;net5.0;net6.0 + + false + false + false + false + true + true + portable + + latest + enable + false + + $(NoWarn);0105 + + + + + netcoreapp3.1;net5.0;net6.0 + + + + full + + + + True + + + + + $(DefineConstants);NULLABLE_REFERENCE_TYPES + + + + BSD-3-Clause + True + https://github.com/sharparchitecture/Sharp-Architecture/raw/master/Artefacts/Documentation/icon.png + http://sharparchitecture.github.io/ + false + https://github.com/sharparchitecture/Sharp-Architecture/releases/tag/8.0.1 + sharp-architecture;sharp-arch + + + + true + true + true + snupkg + + + + $(AppTargetFrameworks) + true + false + $(NoWarn);0618;1591 + + + + + <_Parameter1>SharpArch.XunitTests + + + + + + false + $(NoWarn);1591 + + + + + <_Parameter1>false + <_Parameter1_TypeName>System.Boolean + + + + + + + + + diff --git a/Docker/create_database.sql b/Docker/create_database.sql new file mode 100644 index 000000000..e291da0e4 Binary files /dev/null and b/Docker/create_database.sql differ diff --git a/Docker/start-mssql.ps1 b/Docker/start-mssql.ps1 new file mode 100644 index 000000000..7bf11ec79 --- /dev/null +++ b/Docker/start-mssql.ps1 @@ -0,0 +1 @@ +docker.exe run --name sharparch-sql -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Password12!' -p 2433:1433 -d -v./mssql-data:/var/opt/mssql/data mcr.microsoft.com/mssql/server:2017-latest-ubuntu \ No newline at end of file diff --git a/GitReleaseManager.yaml b/GitReleaseManager.yaml new file mode 100644 index 000000000..732a208f2 --- /dev/null +++ b/GitReleaseManager.yaml @@ -0,0 +1,70 @@ +create: + include-footer: true + footer-heading: Where to get it + footer-content: You can download this release from [GitHub](https://github.com/sharparchitecture/Sharp-Architecture/releases/{milestone}) + footer-includes-milestone: true + milestone-replace-text: '{milestone}' +# export: +# include-created-date-in-title: true | false +# created-date-string-format: MMMM dd, yyyy +# perform-regex-removal: true | false +# regex-text: '### Where to get it(\r\n)*You can .*\)' +# multiline-regex: true | false +issue-labels-include: + - breaking-change + - bug + - build + - dependencies + - documentation + - duplicate + - enhancement + - feature + - performance + - sample + +issue-labels-exclude: + - 0 - Backlog + - 1 - Ready + - 2 - In Progress + - 3 - Done + - blocked + - invalid + - help-wanted + - no-response + - question + - ready + - wontfix + - pull-request + - core + +issue-labels-alias: + - name: breaking-change + header: Breaking Change + plural: Breaking Changes + - name: bug + header: Bug fixed + plural: Bugs fixed + - name: dependencies + header: Dependency upgraded + plural: Dependencies upgraded + - name: documentation + header: Documentation + plural: Documentation + - name: duplicate + header: Duplicate issue closed + plural: Duplicate issues closed + - name: enhancement + header: Enhancement + plural: Enhancements + - name: feature + header: New feature + plural: New features + - name: sample + header: Sample + plural: Samples + - name: documentation + header: Documentation updated + plural: Documentation updates + - name: performance + header: Performance improvement + plural: Performance improvements diff --git a/GitVersion.yml b/GitVersion.yml new file mode 100644 index 000000000..a02cbd49e --- /dev/null +++ b/GitVersion.yml @@ -0,0 +1,11 @@ +# assembly-file-versioning-scheme: MajorMinorPatch +branches: + release: + mode: ContinuousDeployment + tag: rc + develop: + mode: ContinuousDeployment + tag: alpha +ignore: + sha: [] + diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..fa51b37e6 --- /dev/null +++ b/LICENSE @@ -0,0 +1,29 @@ +New BSD License for S#arp Architecture from Codai, Inc. + +Copyright (c) 2009, Codai, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * Neither the name of Codai, Inc., nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/License.txt b/License.txt deleted file mode 100644 index fdcdbaea2..000000000 --- a/License.txt +++ /dev/null @@ -1,29 +0,0 @@ -New BSD License for S#arp Architecture from Codai, Inc. - -Copyright (c) 2009, Codai, Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - * Neither the name of Codai, Inc., nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 000000000..f86f00512 --- /dev/null +++ b/README.md @@ -0,0 +1,57 @@ +# S#arp Architecture + + +| | Stable | Develop | +|:--:|:--:|:--:| +| Build | [![Build status](https://ci.appveyor.com/api/projects/status/q90e3hg7g3wgf79p/branch/master?svg=true)](https://ci.appveyor.com/project/sharparchitecture/sharp-architecture/branch/master) | [![Build status](https://ci.appveyor.com/api/projects/status/q90e3hg7g3wgf79p?svg=true)](https://ci.appveyor.com/project/sharparchitecture/sharp-architecture) | +| NuGet | [![NuGet](https://img.shields.io/nuget/v/SharpArch.Domain.svg)](https://www.nuget.org/packages?q=SharpArch)|[![NuGet](https://img.shields.io/nuget/vpre/SharpArch.Domain.svg)](https://www.nuget.org/packages?q=SharpArch) | +| Coverage | [![Coverage Status](https://coveralls.io/repos/github/sharparchitecture/Sharp-Architecture/badge.svg?branch=master)](https://coveralls.io/github/sharparchitecture/Sharp-Architecture?branch=master) | [![Coverage Status](https://coveralls.io/repos/github/sharparchitecture/Sharp-Architecture/badge.svg?branch=develop)](https://coveralls.io/github/sharparchitecture/Sharp-Architecture?branch=develop) | + + +## Samples + + +To learn how to get a S#arp Architecture solution up and running, please check the samples https://github.com/sharparchitecture/Sharp-Architecture/tree/develop/Samples. +**Note: Samples for version 5 are not ready yet.** + + +## Downloads + + +Downloads can always be found here: https://github.com/sharparchitecture/Sharp-Architecture/downloads + + +## Building S#arp Architecture + + +Perform the following command in GitBash: +```Shell +$ git clone git@github.com:sharparchitecture/Sharp-Architecture.git +$ git checkout develop +$ powershell -file build.ps1 -Target=RunUnitTests +``` +Now you should have the latest development branch of S#arp Architecture. + + +## Documentation and Assemblies + + +* /Artefacts/Documentation/: Contains a link to comprehensive, online documentation at http://sharp-architecture.readthedocs.org/, and a diagram of what a S#arp Architecture project looks like. + + +## How's this release organized? + + +* /Artefacts/: Contains various artefacts for the project. + +* /Common/: Contains files shared among the projects. + +* /NugetTemplates/: Contains templates used for generating S#arp Architecture nuget packages. + +* /Packages/: Contains the NuGet packages that S#arp Architecture depends on. + +* /LICENSE: I'll let you guess what this is. + +* /Src/: This contains all of the source code in their various projects. + +* /VersionHistory.txt: Details version numbers of dependencies, changes since previous releases, upgrade details, and a roadmap of what's coming. diff --git a/Samples/PostmanScripts/Samples.postman_collection b/Samples/PostmanScripts/Samples.postman_collection new file mode 100644 index 000000000..2e757e48d --- /dev/null +++ b/Samples/PostmanScripts/Samples.postman_collection @@ -0,0 +1,69 @@ +{ + "info": { + "_postman_id": "ace5c2e3-c477-4f92-99f2-758e4b72a577", + "name": "WebApi", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" + }, + "item": [ + { + "name": "ActionLevelOverride", + "request": { + "method": "GET", + "header": [], + "body": {}, + "url": { + "raw": "{{WebApiHost}}/api/overrides/local", + "host": [ + "{{WebApiHost}}" + ], + "path": [ + "api", + "overrides", + "local" + ] + } + }, + "response": [] + }, + { + "name": "ControllerLevelOverride", + "request": { + "method": "GET", + "header": [], + "body": {}, + "url": { + "raw": "{{WebApiHost}}/api/overrides/controller", + "host": [ + "{{WebApiHost}}" + ], + "path": [ + "api", + "overrides", + "controller" + ] + } + }, + "response": [] + }, + { + "name": "Global default attribute", + "request": { + "method": "GET", + "header": [], + "body": {}, + "url": { + "raw": "{{WebApiHost}}/api/global/default", + "host": [ + "{{WebApiHost}}" + ], + "path": [ + "api", + "global", + "default" + ] + } + }, + "response": [] + } + ] +} \ No newline at end of file diff --git a/Samples/Samples.sln b/Samples/Samples.sln new file mode 100644 index 000000000..871acf823 --- /dev/null +++ b/Samples/Samples.sln @@ -0,0 +1,310 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30114.105 +MinimumVisualStudioVersion = 15.0.26124.0 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TransactionAttribute", "TransactionAttribute", "{EF6BD1E6-C6C1-493E-B52F-2CB27C53EC45}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TransactionAttribute.WebApi", "TransactionAttribute\App\TransactionAttribute.WebApi.csproj", "{4E05A12F-79FC-4C53-9DFE-E0543F563B1C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TransactionAttribute.Tests", "TransactionAttribute\Tests\TransactionAttribute.Tests.csproj", "{5927C847-E350-48F4-A393-08C0D165ADEF}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TardisBank", "TardisBank", "{BE68BD9C-0789-4166-AA5F-C5C1B7C0A5EC}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{2A3CD80E-B6B3-456A-BBFF-513153E0CAEA}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Suteki.TardisBank.Domain", "TardisBank\Src\Suteki.TardisBank.Domain\Suteki.TardisBank.Domain.csproj", "{417DA004-5D0E-4759-9196-73DF4D45A0C8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Suteki.TardisBank.Infrastructure", "TardisBank\Src\Suteki.TardisBank.Infrastructure\Suteki.TardisBank.Infrastructure.csproj", "{BDB76A6D-7D4A-48E8-88B6-BBEAF8F0C968}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Suteki.TardisBank.Tasks", "TardisBank\Src\Suteki.TardisBank.Tasks\Suteki.TardisBank.Tasks.csproj", "{B437F7EA-F58F-4167-8543-C724380A6DDE}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Suteki.TardisBank.Tests", "TardisBank\Src\Suteki.TardisBank.Tests\Suteki.TardisBank.Tests.csproj", "{6AB4ABA4-DBB1-4A05-BE4C-894EF9836A29}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpArch.Domain", "..\Src\SharpArch.Domain\SharpArch.Domain.csproj", "{FA611294-98F7-4718-8EBE-F6DACF510040}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpArch.Infrastructure", "..\Src\SharpArch.Infrastructure\SharpArch.Infrastructure.csproj", "{C0C2A307-73F6-437D-9341-1A014000C023}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpArch.NHibernate", "..\Src\SharpArch.NHibernate\SharpArch.NHibernate.csproj", "{E94D2E74-4900-44DD-B114-7C37502F88FA}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpArch.NHibernate.Extensions.DependencyInjection", "..\Src\SharpArch.NHibernate.DependencyInjection\SharpArch.NHibernate.Extensions.DependencyInjection.csproj", "{F7BED6C6-ACD4-41C4-8F2C-7FAEFFF53A8A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpArch.RavenDb", "..\Src\SharpArch.RavenDb\SharpArch.RavenDb.csproj", "{CFFD11B3-E73D-4712-9A74-6B4EEE842BD4}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpArch.Testing", "..\Src\SharpArch.Testing\SharpArch.Testing.csproj", "{172063A6-E0DD-4F71-8904-FEBEB1B285DC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpArch.Testing.NUnit", "..\Src\SharpArch.Testing.NUnit\SharpArch.Testing.NUnit.csproj", "{7D11D48A-38DA-4933-9670-0D7214DFA843}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpArch.Testing.Xunit", "..\Src\SharpArch.Testing.Xunit\SharpArch.Testing.Xunit.csproj", "{A615DFB3-F550-4B40-B90F-D10ED619359F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpArch.Testing.Xunit.NHibernate", "..\Src\SharpArch.Testing.Xunit.NHibernate\SharpArch.Testing.Xunit.NHibernate.csproj", "{0DDF2078-BC4B-4890-9AFC-0407C1D24A0E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpArch.Web.AspNetCore", "..\Src\SharpArch.Web.AspNetCore\SharpArch.Web.AspNetCore.csproj", "{BC957B66-7B0C-44F6-8C03-518B384EB57D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SharpArch", "SharpArch", "{F2D26BF7-7343-4A9D-B73F-95506346EC33}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "App", "App", "{E293E82F-0EFA-4FA2-9B44-DBBE98C8C80B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Lib", "Lib", "{9AE74228-F582-4798-87CE-CD21B97A1DC1}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Suteki.TardisBank.WebApi", "TardisBank\Src\Suteki.TardisBank.WebApi\Suteki.TardisBank.WebApi.csproj", "{E5E563B7-011F-4179-9903-8A055DC73FB7}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Suteki.TardisBank.Api", "TardisBank\Src\Suteki.TardisBank.Api\Suteki.TardisBank.Api.csproj", "{186CE571-D7AF-4EAC-8ED6-2DA9B568FE8D}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {4E05A12F-79FC-4C53-9DFE-E0543F563B1C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4E05A12F-79FC-4C53-9DFE-E0543F563B1C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4E05A12F-79FC-4C53-9DFE-E0543F563B1C}.Debug|x64.ActiveCfg = Debug|Any CPU + {4E05A12F-79FC-4C53-9DFE-E0543F563B1C}.Debug|x64.Build.0 = Debug|Any CPU + {4E05A12F-79FC-4C53-9DFE-E0543F563B1C}.Debug|x86.ActiveCfg = Debug|Any CPU + {4E05A12F-79FC-4C53-9DFE-E0543F563B1C}.Debug|x86.Build.0 = Debug|Any CPU + {4E05A12F-79FC-4C53-9DFE-E0543F563B1C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4E05A12F-79FC-4C53-9DFE-E0543F563B1C}.Release|Any CPU.Build.0 = Release|Any CPU + {4E05A12F-79FC-4C53-9DFE-E0543F563B1C}.Release|x64.ActiveCfg = Release|Any CPU + {4E05A12F-79FC-4C53-9DFE-E0543F563B1C}.Release|x64.Build.0 = Release|Any CPU + {4E05A12F-79FC-4C53-9DFE-E0543F563B1C}.Release|x86.ActiveCfg = Release|Any CPU + {4E05A12F-79FC-4C53-9DFE-E0543F563B1C}.Release|x86.Build.0 = Release|Any CPU + {5927C847-E350-48F4-A393-08C0D165ADEF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5927C847-E350-48F4-A393-08C0D165ADEF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5927C847-E350-48F4-A393-08C0D165ADEF}.Debug|x64.ActiveCfg = Debug|Any CPU + {5927C847-E350-48F4-A393-08C0D165ADEF}.Debug|x64.Build.0 = Debug|Any CPU + {5927C847-E350-48F4-A393-08C0D165ADEF}.Debug|x86.ActiveCfg = Debug|Any CPU + {5927C847-E350-48F4-A393-08C0D165ADEF}.Debug|x86.Build.0 = Debug|Any CPU + {5927C847-E350-48F4-A393-08C0D165ADEF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5927C847-E350-48F4-A393-08C0D165ADEF}.Release|Any CPU.Build.0 = Release|Any CPU + {5927C847-E350-48F4-A393-08C0D165ADEF}.Release|x64.ActiveCfg = Release|Any CPU + {5927C847-E350-48F4-A393-08C0D165ADEF}.Release|x64.Build.0 = Release|Any CPU + {5927C847-E350-48F4-A393-08C0D165ADEF}.Release|x86.ActiveCfg = Release|Any CPU + {5927C847-E350-48F4-A393-08C0D165ADEF}.Release|x86.Build.0 = Release|Any CPU + {417DA004-5D0E-4759-9196-73DF4D45A0C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {417DA004-5D0E-4759-9196-73DF4D45A0C8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {417DA004-5D0E-4759-9196-73DF4D45A0C8}.Debug|x64.ActiveCfg = Debug|Any CPU + {417DA004-5D0E-4759-9196-73DF4D45A0C8}.Debug|x64.Build.0 = Debug|Any CPU + {417DA004-5D0E-4759-9196-73DF4D45A0C8}.Debug|x86.ActiveCfg = Debug|Any CPU + {417DA004-5D0E-4759-9196-73DF4D45A0C8}.Debug|x86.Build.0 = Debug|Any CPU + {417DA004-5D0E-4759-9196-73DF4D45A0C8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {417DA004-5D0E-4759-9196-73DF4D45A0C8}.Release|Any CPU.Build.0 = Release|Any CPU + {417DA004-5D0E-4759-9196-73DF4D45A0C8}.Release|x64.ActiveCfg = Release|Any CPU + {417DA004-5D0E-4759-9196-73DF4D45A0C8}.Release|x64.Build.0 = Release|Any CPU + {417DA004-5D0E-4759-9196-73DF4D45A0C8}.Release|x86.ActiveCfg = Release|Any CPU + {417DA004-5D0E-4759-9196-73DF4D45A0C8}.Release|x86.Build.0 = Release|Any CPU + {BDB76A6D-7D4A-48E8-88B6-BBEAF8F0C968}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BDB76A6D-7D4A-48E8-88B6-BBEAF8F0C968}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BDB76A6D-7D4A-48E8-88B6-BBEAF8F0C968}.Debug|x64.ActiveCfg = Debug|Any CPU + {BDB76A6D-7D4A-48E8-88B6-BBEAF8F0C968}.Debug|x64.Build.0 = Debug|Any CPU + {BDB76A6D-7D4A-48E8-88B6-BBEAF8F0C968}.Debug|x86.ActiveCfg = Debug|Any CPU + {BDB76A6D-7D4A-48E8-88B6-BBEAF8F0C968}.Debug|x86.Build.0 = Debug|Any CPU + {BDB76A6D-7D4A-48E8-88B6-BBEAF8F0C968}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BDB76A6D-7D4A-48E8-88B6-BBEAF8F0C968}.Release|Any CPU.Build.0 = Release|Any CPU + {BDB76A6D-7D4A-48E8-88B6-BBEAF8F0C968}.Release|x64.ActiveCfg = Release|Any CPU + {BDB76A6D-7D4A-48E8-88B6-BBEAF8F0C968}.Release|x64.Build.0 = Release|Any CPU + {BDB76A6D-7D4A-48E8-88B6-BBEAF8F0C968}.Release|x86.ActiveCfg = Release|Any CPU + {BDB76A6D-7D4A-48E8-88B6-BBEAF8F0C968}.Release|x86.Build.0 = Release|Any CPU + {B437F7EA-F58F-4167-8543-C724380A6DDE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B437F7EA-F58F-4167-8543-C724380A6DDE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B437F7EA-F58F-4167-8543-C724380A6DDE}.Debug|x64.ActiveCfg = Debug|Any CPU + {B437F7EA-F58F-4167-8543-C724380A6DDE}.Debug|x64.Build.0 = Debug|Any CPU + {B437F7EA-F58F-4167-8543-C724380A6DDE}.Debug|x86.ActiveCfg = Debug|Any CPU + {B437F7EA-F58F-4167-8543-C724380A6DDE}.Debug|x86.Build.0 = Debug|Any CPU + {B437F7EA-F58F-4167-8543-C724380A6DDE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B437F7EA-F58F-4167-8543-C724380A6DDE}.Release|Any CPU.Build.0 = Release|Any CPU + {B437F7EA-F58F-4167-8543-C724380A6DDE}.Release|x64.ActiveCfg = Release|Any CPU + {B437F7EA-F58F-4167-8543-C724380A6DDE}.Release|x64.Build.0 = Release|Any CPU + {B437F7EA-F58F-4167-8543-C724380A6DDE}.Release|x86.ActiveCfg = Release|Any CPU + {B437F7EA-F58F-4167-8543-C724380A6DDE}.Release|x86.Build.0 = Release|Any CPU + {6AB4ABA4-DBB1-4A05-BE4C-894EF9836A29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6AB4ABA4-DBB1-4A05-BE4C-894EF9836A29}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6AB4ABA4-DBB1-4A05-BE4C-894EF9836A29}.Debug|x64.ActiveCfg = Debug|Any CPU + {6AB4ABA4-DBB1-4A05-BE4C-894EF9836A29}.Debug|x64.Build.0 = Debug|Any CPU + {6AB4ABA4-DBB1-4A05-BE4C-894EF9836A29}.Debug|x86.ActiveCfg = Debug|Any CPU + {6AB4ABA4-DBB1-4A05-BE4C-894EF9836A29}.Debug|x86.Build.0 = Debug|Any CPU + {6AB4ABA4-DBB1-4A05-BE4C-894EF9836A29}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6AB4ABA4-DBB1-4A05-BE4C-894EF9836A29}.Release|Any CPU.Build.0 = Release|Any CPU + {6AB4ABA4-DBB1-4A05-BE4C-894EF9836A29}.Release|x64.ActiveCfg = Release|Any CPU + {6AB4ABA4-DBB1-4A05-BE4C-894EF9836A29}.Release|x64.Build.0 = Release|Any CPU + {6AB4ABA4-DBB1-4A05-BE4C-894EF9836A29}.Release|x86.ActiveCfg = Release|Any CPU + {6AB4ABA4-DBB1-4A05-BE4C-894EF9836A29}.Release|x86.Build.0 = Release|Any CPU + {FA611294-98F7-4718-8EBE-F6DACF510040}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FA611294-98F7-4718-8EBE-F6DACF510040}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FA611294-98F7-4718-8EBE-F6DACF510040}.Debug|x64.ActiveCfg = Debug|Any CPU + {FA611294-98F7-4718-8EBE-F6DACF510040}.Debug|x64.Build.0 = Debug|Any CPU + {FA611294-98F7-4718-8EBE-F6DACF510040}.Debug|x86.ActiveCfg = Debug|Any CPU + {FA611294-98F7-4718-8EBE-F6DACF510040}.Debug|x86.Build.0 = Debug|Any CPU + {FA611294-98F7-4718-8EBE-F6DACF510040}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FA611294-98F7-4718-8EBE-F6DACF510040}.Release|Any CPU.Build.0 = Release|Any CPU + {FA611294-98F7-4718-8EBE-F6DACF510040}.Release|x64.ActiveCfg = Release|Any CPU + {FA611294-98F7-4718-8EBE-F6DACF510040}.Release|x64.Build.0 = Release|Any CPU + {FA611294-98F7-4718-8EBE-F6DACF510040}.Release|x86.ActiveCfg = Release|Any CPU + {FA611294-98F7-4718-8EBE-F6DACF510040}.Release|x86.Build.0 = Release|Any CPU + {C0C2A307-73F6-437D-9341-1A014000C023}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C0C2A307-73F6-437D-9341-1A014000C023}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C0C2A307-73F6-437D-9341-1A014000C023}.Debug|x64.ActiveCfg = Debug|Any CPU + {C0C2A307-73F6-437D-9341-1A014000C023}.Debug|x64.Build.0 = Debug|Any CPU + {C0C2A307-73F6-437D-9341-1A014000C023}.Debug|x86.ActiveCfg = Debug|Any CPU + {C0C2A307-73F6-437D-9341-1A014000C023}.Debug|x86.Build.0 = Debug|Any CPU + {C0C2A307-73F6-437D-9341-1A014000C023}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C0C2A307-73F6-437D-9341-1A014000C023}.Release|Any CPU.Build.0 = Release|Any CPU + {C0C2A307-73F6-437D-9341-1A014000C023}.Release|x64.ActiveCfg = Release|Any CPU + {C0C2A307-73F6-437D-9341-1A014000C023}.Release|x64.Build.0 = Release|Any CPU + {C0C2A307-73F6-437D-9341-1A014000C023}.Release|x86.ActiveCfg = Release|Any CPU + {C0C2A307-73F6-437D-9341-1A014000C023}.Release|x86.Build.0 = Release|Any CPU + {E94D2E74-4900-44DD-B114-7C37502F88FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E94D2E74-4900-44DD-B114-7C37502F88FA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E94D2E74-4900-44DD-B114-7C37502F88FA}.Debug|x64.ActiveCfg = Debug|Any CPU + {E94D2E74-4900-44DD-B114-7C37502F88FA}.Debug|x64.Build.0 = Debug|Any CPU + {E94D2E74-4900-44DD-B114-7C37502F88FA}.Debug|x86.ActiveCfg = Debug|Any CPU + {E94D2E74-4900-44DD-B114-7C37502F88FA}.Debug|x86.Build.0 = Debug|Any CPU + {E94D2E74-4900-44DD-B114-7C37502F88FA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E94D2E74-4900-44DD-B114-7C37502F88FA}.Release|Any CPU.Build.0 = Release|Any CPU + {E94D2E74-4900-44DD-B114-7C37502F88FA}.Release|x64.ActiveCfg = Release|Any CPU + {E94D2E74-4900-44DD-B114-7C37502F88FA}.Release|x64.Build.0 = Release|Any CPU + {E94D2E74-4900-44DD-B114-7C37502F88FA}.Release|x86.ActiveCfg = Release|Any CPU + {E94D2E74-4900-44DD-B114-7C37502F88FA}.Release|x86.Build.0 = Release|Any CPU + {F7BED6C6-ACD4-41C4-8F2C-7FAEFFF53A8A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F7BED6C6-ACD4-41C4-8F2C-7FAEFFF53A8A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F7BED6C6-ACD4-41C4-8F2C-7FAEFFF53A8A}.Debug|x64.ActiveCfg = Debug|Any CPU + {F7BED6C6-ACD4-41C4-8F2C-7FAEFFF53A8A}.Debug|x64.Build.0 = Debug|Any CPU + {F7BED6C6-ACD4-41C4-8F2C-7FAEFFF53A8A}.Debug|x86.ActiveCfg = Debug|Any CPU + {F7BED6C6-ACD4-41C4-8F2C-7FAEFFF53A8A}.Debug|x86.Build.0 = Debug|Any CPU + {F7BED6C6-ACD4-41C4-8F2C-7FAEFFF53A8A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F7BED6C6-ACD4-41C4-8F2C-7FAEFFF53A8A}.Release|Any CPU.Build.0 = Release|Any CPU + {F7BED6C6-ACD4-41C4-8F2C-7FAEFFF53A8A}.Release|x64.ActiveCfg = Release|Any CPU + {F7BED6C6-ACD4-41C4-8F2C-7FAEFFF53A8A}.Release|x64.Build.0 = Release|Any CPU + {F7BED6C6-ACD4-41C4-8F2C-7FAEFFF53A8A}.Release|x86.ActiveCfg = Release|Any CPU + {F7BED6C6-ACD4-41C4-8F2C-7FAEFFF53A8A}.Release|x86.Build.0 = Release|Any CPU + {CFFD11B3-E73D-4712-9A74-6B4EEE842BD4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CFFD11B3-E73D-4712-9A74-6B4EEE842BD4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CFFD11B3-E73D-4712-9A74-6B4EEE842BD4}.Debug|x64.ActiveCfg = Debug|Any CPU + {CFFD11B3-E73D-4712-9A74-6B4EEE842BD4}.Debug|x64.Build.0 = Debug|Any CPU + {CFFD11B3-E73D-4712-9A74-6B4EEE842BD4}.Debug|x86.ActiveCfg = Debug|Any CPU + {CFFD11B3-E73D-4712-9A74-6B4EEE842BD4}.Debug|x86.Build.0 = Debug|Any CPU + {CFFD11B3-E73D-4712-9A74-6B4EEE842BD4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CFFD11B3-E73D-4712-9A74-6B4EEE842BD4}.Release|Any CPU.Build.0 = Release|Any CPU + {CFFD11B3-E73D-4712-9A74-6B4EEE842BD4}.Release|x64.ActiveCfg = Release|Any CPU + {CFFD11B3-E73D-4712-9A74-6B4EEE842BD4}.Release|x64.Build.0 = Release|Any CPU + {CFFD11B3-E73D-4712-9A74-6B4EEE842BD4}.Release|x86.ActiveCfg = Release|Any CPU + {CFFD11B3-E73D-4712-9A74-6B4EEE842BD4}.Release|x86.Build.0 = Release|Any CPU + {172063A6-E0DD-4F71-8904-FEBEB1B285DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {172063A6-E0DD-4F71-8904-FEBEB1B285DC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {172063A6-E0DD-4F71-8904-FEBEB1B285DC}.Debug|x64.ActiveCfg = Debug|Any CPU + {172063A6-E0DD-4F71-8904-FEBEB1B285DC}.Debug|x64.Build.0 = Debug|Any CPU + {172063A6-E0DD-4F71-8904-FEBEB1B285DC}.Debug|x86.ActiveCfg = Debug|Any CPU + {172063A6-E0DD-4F71-8904-FEBEB1B285DC}.Debug|x86.Build.0 = Debug|Any CPU + {172063A6-E0DD-4F71-8904-FEBEB1B285DC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {172063A6-E0DD-4F71-8904-FEBEB1B285DC}.Release|Any CPU.Build.0 = Release|Any CPU + {172063A6-E0DD-4F71-8904-FEBEB1B285DC}.Release|x64.ActiveCfg = Release|Any CPU + {172063A6-E0DD-4F71-8904-FEBEB1B285DC}.Release|x64.Build.0 = Release|Any CPU + {172063A6-E0DD-4F71-8904-FEBEB1B285DC}.Release|x86.ActiveCfg = Release|Any CPU + {172063A6-E0DD-4F71-8904-FEBEB1B285DC}.Release|x86.Build.0 = Release|Any CPU + {7D11D48A-38DA-4933-9670-0D7214DFA843}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7D11D48A-38DA-4933-9670-0D7214DFA843}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7D11D48A-38DA-4933-9670-0D7214DFA843}.Debug|x64.ActiveCfg = Debug|Any CPU + {7D11D48A-38DA-4933-9670-0D7214DFA843}.Debug|x64.Build.0 = Debug|Any CPU + {7D11D48A-38DA-4933-9670-0D7214DFA843}.Debug|x86.ActiveCfg = Debug|Any CPU + {7D11D48A-38DA-4933-9670-0D7214DFA843}.Debug|x86.Build.0 = Debug|Any CPU + {7D11D48A-38DA-4933-9670-0D7214DFA843}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7D11D48A-38DA-4933-9670-0D7214DFA843}.Release|Any CPU.Build.0 = Release|Any CPU + {7D11D48A-38DA-4933-9670-0D7214DFA843}.Release|x64.ActiveCfg = Release|Any CPU + {7D11D48A-38DA-4933-9670-0D7214DFA843}.Release|x64.Build.0 = Release|Any CPU + {7D11D48A-38DA-4933-9670-0D7214DFA843}.Release|x86.ActiveCfg = Release|Any CPU + {7D11D48A-38DA-4933-9670-0D7214DFA843}.Release|x86.Build.0 = Release|Any CPU + {A615DFB3-F550-4B40-B90F-D10ED619359F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A615DFB3-F550-4B40-B90F-D10ED619359F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A615DFB3-F550-4B40-B90F-D10ED619359F}.Debug|x64.ActiveCfg = Debug|Any CPU + {A615DFB3-F550-4B40-B90F-D10ED619359F}.Debug|x64.Build.0 = Debug|Any CPU + {A615DFB3-F550-4B40-B90F-D10ED619359F}.Debug|x86.ActiveCfg = Debug|Any CPU + {A615DFB3-F550-4B40-B90F-D10ED619359F}.Debug|x86.Build.0 = Debug|Any CPU + {A615DFB3-F550-4B40-B90F-D10ED619359F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A615DFB3-F550-4B40-B90F-D10ED619359F}.Release|Any CPU.Build.0 = Release|Any CPU + {A615DFB3-F550-4B40-B90F-D10ED619359F}.Release|x64.ActiveCfg = Release|Any CPU + {A615DFB3-F550-4B40-B90F-D10ED619359F}.Release|x64.Build.0 = Release|Any CPU + {A615DFB3-F550-4B40-B90F-D10ED619359F}.Release|x86.ActiveCfg = Release|Any CPU + {A615DFB3-F550-4B40-B90F-D10ED619359F}.Release|x86.Build.0 = Release|Any CPU + {0DDF2078-BC4B-4890-9AFC-0407C1D24A0E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0DDF2078-BC4B-4890-9AFC-0407C1D24A0E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0DDF2078-BC4B-4890-9AFC-0407C1D24A0E}.Debug|x64.ActiveCfg = Debug|Any CPU + {0DDF2078-BC4B-4890-9AFC-0407C1D24A0E}.Debug|x64.Build.0 = Debug|Any CPU + {0DDF2078-BC4B-4890-9AFC-0407C1D24A0E}.Debug|x86.ActiveCfg = Debug|Any CPU + {0DDF2078-BC4B-4890-9AFC-0407C1D24A0E}.Debug|x86.Build.0 = Debug|Any CPU + {0DDF2078-BC4B-4890-9AFC-0407C1D24A0E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0DDF2078-BC4B-4890-9AFC-0407C1D24A0E}.Release|Any CPU.Build.0 = Release|Any CPU + {0DDF2078-BC4B-4890-9AFC-0407C1D24A0E}.Release|x64.ActiveCfg = Release|Any CPU + {0DDF2078-BC4B-4890-9AFC-0407C1D24A0E}.Release|x64.Build.0 = Release|Any CPU + {0DDF2078-BC4B-4890-9AFC-0407C1D24A0E}.Release|x86.ActiveCfg = Release|Any CPU + {0DDF2078-BC4B-4890-9AFC-0407C1D24A0E}.Release|x86.Build.0 = Release|Any CPU + {BC957B66-7B0C-44F6-8C03-518B384EB57D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BC957B66-7B0C-44F6-8C03-518B384EB57D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BC957B66-7B0C-44F6-8C03-518B384EB57D}.Debug|x64.ActiveCfg = Debug|Any CPU + {BC957B66-7B0C-44F6-8C03-518B384EB57D}.Debug|x64.Build.0 = Debug|Any CPU + {BC957B66-7B0C-44F6-8C03-518B384EB57D}.Debug|x86.ActiveCfg = Debug|Any CPU + {BC957B66-7B0C-44F6-8C03-518B384EB57D}.Debug|x86.Build.0 = Debug|Any CPU + {BC957B66-7B0C-44F6-8C03-518B384EB57D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BC957B66-7B0C-44F6-8C03-518B384EB57D}.Release|Any CPU.Build.0 = Release|Any CPU + {BC957B66-7B0C-44F6-8C03-518B384EB57D}.Release|x64.ActiveCfg = Release|Any CPU + {BC957B66-7B0C-44F6-8C03-518B384EB57D}.Release|x64.Build.0 = Release|Any CPU + {BC957B66-7B0C-44F6-8C03-518B384EB57D}.Release|x86.ActiveCfg = Release|Any CPU + {BC957B66-7B0C-44F6-8C03-518B384EB57D}.Release|x86.Build.0 = Release|Any CPU + {E5E563B7-011F-4179-9903-8A055DC73FB7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E5E563B7-011F-4179-9903-8A055DC73FB7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E5E563B7-011F-4179-9903-8A055DC73FB7}.Debug|x64.ActiveCfg = Debug|Any CPU + {E5E563B7-011F-4179-9903-8A055DC73FB7}.Debug|x64.Build.0 = Debug|Any CPU + {E5E563B7-011F-4179-9903-8A055DC73FB7}.Debug|x86.ActiveCfg = Debug|Any CPU + {E5E563B7-011F-4179-9903-8A055DC73FB7}.Debug|x86.Build.0 = Debug|Any CPU + {E5E563B7-011F-4179-9903-8A055DC73FB7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E5E563B7-011F-4179-9903-8A055DC73FB7}.Release|Any CPU.Build.0 = Release|Any CPU + {E5E563B7-011F-4179-9903-8A055DC73FB7}.Release|x64.ActiveCfg = Release|Any CPU + {E5E563B7-011F-4179-9903-8A055DC73FB7}.Release|x64.Build.0 = Release|Any CPU + {E5E563B7-011F-4179-9903-8A055DC73FB7}.Release|x86.ActiveCfg = Release|Any CPU + {E5E563B7-011F-4179-9903-8A055DC73FB7}.Release|x86.Build.0 = Release|Any CPU + {186CE571-D7AF-4EAC-8ED6-2DA9B568FE8D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {186CE571-D7AF-4EAC-8ED6-2DA9B568FE8D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {186CE571-D7AF-4EAC-8ED6-2DA9B568FE8D}.Debug|x64.ActiveCfg = Debug|Any CPU + {186CE571-D7AF-4EAC-8ED6-2DA9B568FE8D}.Debug|x64.Build.0 = Debug|Any CPU + {186CE571-D7AF-4EAC-8ED6-2DA9B568FE8D}.Debug|x86.ActiveCfg = Debug|Any CPU + {186CE571-D7AF-4EAC-8ED6-2DA9B568FE8D}.Debug|x86.Build.0 = Debug|Any CPU + {186CE571-D7AF-4EAC-8ED6-2DA9B568FE8D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {186CE571-D7AF-4EAC-8ED6-2DA9B568FE8D}.Release|Any CPU.Build.0 = Release|Any CPU + {186CE571-D7AF-4EAC-8ED6-2DA9B568FE8D}.Release|x64.ActiveCfg = Release|Any CPU + {186CE571-D7AF-4EAC-8ED6-2DA9B568FE8D}.Release|x64.Build.0 = Release|Any CPU + {186CE571-D7AF-4EAC-8ED6-2DA9B568FE8D}.Release|x86.ActiveCfg = Release|Any CPU + {186CE571-D7AF-4EAC-8ED6-2DA9B568FE8D}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {4E05A12F-79FC-4C53-9DFE-E0543F563B1C} = {EF6BD1E6-C6C1-493E-B52F-2CB27C53EC45} + {5927C847-E350-48F4-A393-08C0D165ADEF} = {EF6BD1E6-C6C1-493E-B52F-2CB27C53EC45} + {2A3CD80E-B6B3-456A-BBFF-513153E0CAEA} = {BE68BD9C-0789-4166-AA5F-C5C1B7C0A5EC} + {417DA004-5D0E-4759-9196-73DF4D45A0C8} = {9AE74228-F582-4798-87CE-CD21B97A1DC1} + {BDB76A6D-7D4A-48E8-88B6-BBEAF8F0C968} = {9AE74228-F582-4798-87CE-CD21B97A1DC1} + {B437F7EA-F58F-4167-8543-C724380A6DDE} = {9AE74228-F582-4798-87CE-CD21B97A1DC1} + {6AB4ABA4-DBB1-4A05-BE4C-894EF9836A29} = {2A3CD80E-B6B3-456A-BBFF-513153E0CAEA} + {FA611294-98F7-4718-8EBE-F6DACF510040} = {F2D26BF7-7343-4A9D-B73F-95506346EC33} + {C0C2A307-73F6-437D-9341-1A014000C023} = {F2D26BF7-7343-4A9D-B73F-95506346EC33} + {E94D2E74-4900-44DD-B114-7C37502F88FA} = {F2D26BF7-7343-4A9D-B73F-95506346EC33} + {F7BED6C6-ACD4-41C4-8F2C-7FAEFFF53A8A} = {F2D26BF7-7343-4A9D-B73F-95506346EC33} + {CFFD11B3-E73D-4712-9A74-6B4EEE842BD4} = {F2D26BF7-7343-4A9D-B73F-95506346EC33} + {172063A6-E0DD-4F71-8904-FEBEB1B285DC} = {F2D26BF7-7343-4A9D-B73F-95506346EC33} + {7D11D48A-38DA-4933-9670-0D7214DFA843} = {F2D26BF7-7343-4A9D-B73F-95506346EC33} + {A615DFB3-F550-4B40-B90F-D10ED619359F} = {F2D26BF7-7343-4A9D-B73F-95506346EC33} + {0DDF2078-BC4B-4890-9AFC-0407C1D24A0E} = {F2D26BF7-7343-4A9D-B73F-95506346EC33} + {BC957B66-7B0C-44F6-8C03-518B384EB57D} = {F2D26BF7-7343-4A9D-B73F-95506346EC33} + {E293E82F-0EFA-4FA2-9B44-DBBE98C8C80B} = {BE68BD9C-0789-4166-AA5F-C5C1B7C0A5EC} + {9AE74228-F582-4798-87CE-CD21B97A1DC1} = {BE68BD9C-0789-4166-AA5F-C5C1B7C0A5EC} + {E5E563B7-011F-4179-9903-8A055DC73FB7} = {E293E82F-0EFA-4FA2-9B44-DBBE98C8C80B} + {186CE571-D7AF-4EAC-8ED6-2DA9B568FE8D} = {9AE74228-F582-4798-87CE-CD21B97A1DC1} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {021BFFFD-0D44-4D2F-9F88-1DEF6C51BC84} + EndGlobalSection +EndGlobal diff --git a/Samples/TardisBank/Common/AssemblyVersion.cs b/Samples/TardisBank/Common/AssemblyVersion.cs new file mode 100644 index 000000000..a3dc51cd5 --- /dev/null +++ b/Samples/TardisBank/Common/AssemblyVersion.cs @@ -0,0 +1,15 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: System.Reflection.AssemblyFileVersion("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersion("1.0.0")] +[assembly: System.Reflection.AssemblyVersion("1.0.0.0")] + + diff --git a/Samples/TardisBank/Common/CommonAssemblyInfo.cs b/Samples/TardisBank/Common/CommonAssemblyInfo.cs new file mode 100644 index 000000000..64690436b --- /dev/null +++ b/Samples/TardisBank/Common/CommonAssemblyInfo.cs @@ -0,0 +1,13 @@ +using System.Reflection; +using System.Runtime.InteropServices; + +[assembly: AssemblyCompany("S#arp Architecture Development Team")] +[assembly: AssemblyProduct("S#arp Architecture Template")] +[assembly: AssemblyCopyright("Copyright � S#arp Architecture Development Team 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)] diff --git a/Samples/TardisBank/Database/UnitTestGeneratedSchema.sql b/Samples/TardisBank/Database/UnitTestGeneratedSchema.sql new file mode 100644 index 000000000..09c1c8b15 --- /dev/null +++ b/Samples/TardisBank/Database/UnitTestGeneratedSchema.sql @@ -0,0 +1,152 @@ + + if exists (select 1 from sys.objects where object_id = OBJECT_ID(N'[FK_Messages_For_Users]') and parent_object_id = OBJECT_ID(N'Messages')) +alter table Messages drop constraint FK_Messages_For_Users + + + if exists (select 1 from sys.objects where object_id = OBJECT_ID(N'[FK_PaymentSchedules_For_Accounts]') and parent_object_id = OBJECT_ID(N'PaymentSchedules')) +alter table PaymentSchedules drop constraint FK_PaymentSchedules_For_Accounts + + + if exists (select 1 from sys.objects where object_id = OBJECT_ID(N'[FK_Transactions_For_Accounts]') and parent_object_id = OBJECT_ID(N'Transactions')) +alter table Transactions drop constraint FK_Transactions_For_Accounts + + + if exists (select 1 from sys.objects where object_id = OBJECT_ID(N'[FK_Children_Join_Users]') and parent_object_id = OBJECT_ID(N'Children')) +alter table Children drop constraint FK_Children_Join_Users + + + if exists (select 1 from sys.objects where object_id = OBJECT_ID(N'[FK_Children_Ref_Accounts]') and parent_object_id = OBJECT_ID(N'Children')) +alter table Children drop constraint FK_Children_Ref_Accounts + + + if exists (select 1 from sys.objects where object_id = OBJECT_ID(N'[FK_Childrens_For_Parents]') and parent_object_id = OBJECT_ID(N'Children')) +alter table Children drop constraint FK_Childrens_For_Parents + + + if exists (select 1 from sys.objects where object_id = OBJECT_ID(N'[FK_Parents_Join_Users]') and parent_object_id = OBJECT_ID(N'Parents')) +alter table Parents drop constraint FK_Parents_Join_Users + + + if exists (select * from dbo.sysobjects where id = object_id(N'Accounts') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table Accounts + + if exists (select * from dbo.sysobjects where id = object_id(N'Announcements') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table Announcements + + if exists (select * from dbo.sysobjects where id = object_id(N'Messages') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table Messages + + if exists (select * from dbo.sysobjects where id = object_id(N'PaymentSchedules') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table PaymentSchedules + + if exists (select * from dbo.sysobjects where id = object_id(N'Transactions') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table Transactions + + if exists (select * from dbo.sysobjects where id = object_id(N'Users') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table Users + + if exists (select * from dbo.sysobjects where id = object_id(N'Children') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table Children + + if exists (select * from dbo.sysobjects where id = object_id(N'Parents') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table Parents + + if exists (select * from dbo.sysobjects where id = object_id(N'hibernate_unique_key') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table hibernate_unique_key + + create table Accounts ( + AccountId INT not null, + OldTransactionsBalance DECIMAL(19,5) null, + primary key (AccountId) + ) + + create table Announcements ( + AnnouncementId INT not null, + Date date null, + LastModifiedUtc DATETIME2 null, + Title NVARCHAR(255) null, + Content NVARCHAR(255) null, + primary key (AnnouncementId) + ) + + create table Messages ( + MessageId INT not null, + UserId INT null, + Date DATETIME2 null, + Text NVARCHAR(255) null, + HasBeenRead BIT null, + primary key (MessageId) + ) + + create table PaymentSchedules ( + PaymentScheduleId INT not null, + AccountId INT null, + NextRun DATETIME2 null, + Interval NVARCHAR(255) null, + Amount DECIMAL(19,5) null, + Description NVARCHAR(255) null, + primary key (PaymentScheduleId) + ) + + create table Transactions ( + TransactionId INT not null, + AccountId INT null, + Description NVARCHAR(255) null, + Amount DECIMAL(19,5) null, + Date DATETIME2 null, + primary key (TransactionId) + ) + + create table Users ( + UserId INT not null, + Name NVARCHAR(255) null, + UserName NVARCHAR(255) null, + Password NVARCHAR(255) null, + IsActive BIT null, + primary key (UserId) + ) + + create table Children ( + UserId INT not null, + AccountId INT null, + ParentId INT null, + primary key (UserId) + ) + + create table Parents ( + UserId INT not null, + ActivationKey NVARCHAR(255) null, + primary key (UserId) + ) + + alter table Messages + add constraint FK_Messages_For_Users + foreign key (UserId) + references Users + + alter table PaymentSchedules + add constraint FK_PaymentSchedules_For_Accounts + foreign key (AccountId) + references Accounts + + alter table Transactions + add constraint FK_Transactions_For_Accounts + foreign key (AccountId) + references Accounts + + alter table Children + add constraint FK_Children_Join_Users + foreign key (UserId) + references Users + + alter table Children + add constraint FK_Children_Ref_Accounts + foreign key (AccountId) + references Accounts + + alter table Children + add constraint FK_Childrens_For_Parents + foreign key (ParentId) + references Parents + + alter table Parents + add constraint FK_Parents_Join_Users + foreign key (UserId) + references Users + + create table hibernate_unique_key ( + next_hi INT + ) + + insert into hibernate_unique_key values ( 1 ) diff --git a/Samples/TardisBank/Database/_placeholder.txt b/Samples/TardisBank/Database/_placeholder.txt new file mode 100644 index 000000000..5f282702b --- /dev/null +++ b/Samples/TardisBank/Database/_placeholder.txt @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Samples/TardisBank/README.md b/Samples/TardisBank/README.md new file mode 100644 index 000000000..bc3fe7649 --- /dev/null +++ b/Samples/TardisBank/README.md @@ -0,0 +1 @@ +# Tardis Bank diff --git a/Samples/TardisBank/Settings.StyleCop b/Samples/TardisBank/Settings.StyleCop new file mode 100644 index 000000000..6e0677642 --- /dev/null +++ b/Samples/TardisBank/Settings.StyleCop @@ -0,0 +1,209 @@ + + + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + + + \ No newline at end of file diff --git a/Samples/TardisBank/Src/Settings.StyleCop b/Samples/TardisBank/Src/Settings.StyleCop new file mode 100644 index 000000000..6e0677642 --- /dev/null +++ b/Samples/TardisBank/Src/Settings.StyleCop @@ -0,0 +1,209 @@ + + + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + + + \ No newline at end of file diff --git a/Samples/TardisBank/Src/StyleCopCompatibleResharperCodeStyle.xml b/Samples/TardisBank/Src/StyleCopCompatibleResharperCodeStyle.xml new file mode 100644 index 000000000..f654899e5 --- /dev/null +++ b/Samples/TardisBank/Src/StyleCopCompatibleResharperCodeStyle.xml @@ -0,0 +1,374 @@ + + + + False + 1 + 1 + 1 + SEPARATE + ALWAYS_ADD + ALWAYS_ADD + ALWAYS_ADD + ALWAYS_ADD + False + False + 1 + 1 + False + + public + protected + internal + private + new + abstract + virtual + override + sealed + static + readonly + extern + unsafe + volatile + + False + False + False + False + True + ALWAYS_USE + ON_SINGLE_LINE + False + True + False + False + True + False + True + True + CHOP_IF_LONG + True + CHOP_IF_LONG + CHOP_IF_LONG + + + True + True + + + $object$_On$event$ + $event$Handler + + + True + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + + + + $object$_On$event$ + $event$Handler + + + + + + + + + + + + + + $object$_On$event$ + $event$Handler + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Api/Announcements/AnnouncementModel.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Api/Announcements/AnnouncementModel.cs new file mode 100644 index 000000000..4506fe5c9 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Api/Announcements/AnnouncementModel.cs @@ -0,0 +1,35 @@ +namespace Suteki.TardisBank.Api.Announcements +{ + using System; + using System.ComponentModel.DataAnnotations; + using Newtonsoft.Json; + + + /// + /// Announcement summary model. + /// + public class AnnouncementSummary + { + [JsonProperty("id")] + public int Id { get; set; } + + [JsonProperty("date")] + [DataType(DataType.Date)] + public DateTime Date { get; set; } + + [Required] + [JsonProperty("title")] + public string Title { get; set; } = null!; + } + + + /// + /// Full announcement details. + /// + public class AnnouncementModel : AnnouncementSummary + { + [JsonProperty("content")] + [Required] + public string Content { get; set; } = null!; + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Api/Announcements/NewAnnouncement.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Api/Announcements/NewAnnouncement.cs new file mode 100644 index 000000000..b6363bc26 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Api/Announcements/NewAnnouncement.cs @@ -0,0 +1,22 @@ +namespace Suteki.TardisBank.Api.Announcements +{ + using System; + using System.ComponentModel.DataAnnotations; + using Newtonsoft.Json; + + + public class NewAnnouncement + { + [JsonProperty("date")] + [DataType(DataType.Date)] + public DateTime Date { get; set; } + + [Required] + [JsonProperty("title")] + public string Title { get; set; } = null!; + + [JsonProperty("content")] + [Required] + public string Content { get; set; } = null!; + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Api/Suteki.TardisBank.Api.csproj b/Samples/TardisBank/Src/Suteki.TardisBank.Api/Suteki.TardisBank.Api.csproj new file mode 100644 index 000000000..476a3fd0c --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Api/Suteki.TardisBank.Api.csproj @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Domain/Account.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Domain/Account.cs new file mode 100644 index 000000000..b0f38f93b --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Domain/Account.cs @@ -0,0 +1,69 @@ +namespace Suteki.TardisBank.Domain +{ + using System; + using System.Linq; + using System.Collections.Generic; + + using SharpArch.Domain.DomainModel; + + public class Account : Entity + { + public const int MaxTransactions = 100; + public virtual decimal OldTransactionsBalance { get; protected set; } + + public Account() + { + this.Transactions = new List(); + this.PaymentSchedules = new List(); + this.OldTransactionsBalance = 0M; + } + + public virtual IList Transactions { get; protected set; } + + public virtual decimal Balance + { + get { return this.OldTransactionsBalance + this.Transactions.Sum(x => x.Amount); } + } + + public virtual IList PaymentSchedules { get; protected set; } + + public virtual void AddTransaction(string? description, decimal amount) + { + this.Transactions.Add(new Transaction(description, amount, this)); + + this.RemoveOldTransactions(); + } + + void RemoveOldTransactions() + { + if (this.Transactions.Count <= MaxTransactions) return; + + var oldestTransaction = this.Transactions.First(); + this.Transactions.Remove(oldestTransaction); + this.OldTransactionsBalance += oldestTransaction.Amount; + } + + public virtual void AddPaymentSchedule(DateTime startDate, Interval interval, decimal amount, string description) + { + this.PaymentSchedules.Add(new PaymentSchedule(startDate, interval, amount, description, this)); + } + + public virtual void TriggerScheduledPayments(DateTime now) + { + var overdueSchedules = this.PaymentSchedules.Where(x => x.NextRun <= now); + foreach (var overdueSchedule in overdueSchedules) + { + this.AddTransaction(overdueSchedule.Description, overdueSchedule.Amount); + overdueSchedule.CalculateNextRunDate(); + } + } + + public virtual void RemovePaymentSchedule(int paymentScheduleId) + { + var scheduleToRemove = this.PaymentSchedules.SingleOrDefault(x => x.Id == paymentScheduleId); + if (scheduleToRemove == null) return; + + this.PaymentSchedules.Remove(scheduleToRemove); + } + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Domain/Announcement.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Domain/Announcement.cs new file mode 100644 index 000000000..659a8993d --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Domain/Announcement.cs @@ -0,0 +1,23 @@ +namespace Suteki.TardisBank.Domain +{ + using System; + using System.ComponentModel.DataAnnotations; + using System.Diagnostics; + using SharpArch.Domain.DomainModel; + + [DebuggerDisplay("{Id}: {Title}")] + public class Announcement: Entity + { + public virtual DateTime Date { get; set; } + + [MaxLength(120)] + public virtual string Title { get; set; } = null!; + + [MaxLength(2000)] + public virtual string? Content { get; set; } + + public virtual DateTime LastModifiedUtc { get; set; } + + + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Domain/CashWithdrawException.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Domain/CashWithdrawException.cs new file mode 100644 index 000000000..3d4816363 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Domain/CashWithdrawException.cs @@ -0,0 +1,34 @@ +namespace Suteki.TardisBank.Domain +{ + using System; + using System.Runtime.Serialization; + + [Serializable] + public class CashWithdrawException : Exception + { + // + // For guidelines regarding the creation of new exception types, see + // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/cpconerrorraisinghandlingguidelines.asp + // and + // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dncscol/html/csharp07192001.asp + // + + public CashWithdrawException() + { + } + + public CashWithdrawException(string message) : base(message) + { + } + + public CashWithdrawException(string message, Exception inner) : base(message, inner) + { + } + + protected CashWithdrawException( + SerializationInfo info, + StreamingContext context) : base(info, context) + { + } + } +} \ No newline at end of file diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Domain/Child.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Domain/Child.cs new file mode 100644 index 000000000..635b96825 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Domain/Child.cs @@ -0,0 +1,78 @@ +namespace Suteki.TardisBank.Domain +{ + using System; + using MediatR; + + public class Child : User + { + public Child(string name, string userName, string password, int parentId) : base(name, userName, password) + { + ParentId = parentId; + Account = new Account(); + IsActive = true; + } + + protected Child() + { + } + + public virtual int ParentId { get; set; } + public virtual Account Account { get; set; } = null!; + + public virtual void ReceivePayment(decimal amount, string description) + { + Account.AddTransaction(description, amount); + } + + public virtual void WithdrawCashFromParent(Parent parent, decimal amount, string description, IMediator mediator) + { + var insufficientFundsMessage = string.Format( + "You can not withdraw {0} because you only have {1} in your account", + amount.ToString("c"), + Account.Balance.ToString("c")); + + WithdrawInternal(parent, amount, description, insufficientFundsMessage); + parent.SendMessage(string.Format("{0} would like to withdraw {1}", Name, amount.ToString("c")), mediator); + } + + public virtual void AcceptCashFromParent(Parent parent, decimal amount, string description) + { + var insufficientFundsMessage = string.Format( + "You can not withdraw {0} because {1}'s account only has {2}", + amount.ToString("c"), + Name, + Account.Balance.ToString("c")); + + WithdrawInternal(parent, amount, description, insufficientFundsMessage); + } + + void WithdrawInternal(Parent parent, decimal amount, string description, string insufficientFundsMessage) + { + if (parent == null) + { + throw new ArgumentNullException("parent"); + } + if (description == null) + { + throw new ArgumentNullException("description"); + } + + if (!parent.HasChild(this)) + { + throw new CashWithdrawException("Not Your Parent"); + } + + if (amount > Account.Balance) + { + throw new CashWithdrawException(insufficientFundsMessage); + } + + Account.AddTransaction(description, -amount); + } + + public override string[] GetRoles() + { + return new[] { UserRoles.Child }; + } + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Domain/Events/NewParentCreatedEvent.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Domain/Events/NewParentCreatedEvent.cs new file mode 100644 index 000000000..2ca6f8402 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Domain/Events/NewParentCreatedEvent.cs @@ -0,0 +1,19 @@ +namespace Suteki.TardisBank.Domain.Events +{ + using System; + using MediatR; + + public class NewParentCreatedEvent : INotification + { + public NewParentCreatedEvent(Parent parent) + { + if (parent == null) + { + throw new ArgumentNullException("parent"); + } + Parent = parent; + } + + public Parent Parent { get; private set; } + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Domain/Events/SendMessageEvent.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Domain/Events/SendMessageEvent.cs new file mode 100644 index 000000000..8bdeda4df --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Domain/Events/SendMessageEvent.cs @@ -0,0 +1,26 @@ +namespace Suteki.TardisBank.Domain.Events +{ + using System; + using MediatR; + + public class SendMessageEvent : INotification + { + public SendMessageEvent(User user, string message) + { + if (user == null) + { + throw new ArgumentNullException("user"); + } + if (message == null) + { + throw new ArgumentNullException("message"); + } + + User = user; + Message = message; + } + + public User User { get; private set; } + public string Message { get; private set; } + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Domain/Interval.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Domain/Interval.cs new file mode 100644 index 000000000..69afe8537 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Domain/Interval.cs @@ -0,0 +1,9 @@ +namespace Suteki.TardisBank.Domain +{ + public enum Interval + { + Day = 1, + Week = 2, + Month = 3 + } +} \ No newline at end of file diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Domain/Message.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Domain/Message.cs new file mode 100644 index 000000000..42f13c4ef --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Domain/Message.cs @@ -0,0 +1,33 @@ +namespace Suteki.TardisBank.Domain +{ + using System; + + using SharpArch.Domain.DomainModel; + + public class Message : Entity + { + public Message(DateTime date, string text, User user) + { + this.Date = date; + this.Text = text; + this.User = user; + this.HasBeenRead = false; + } + + protected Message() + { + } + + public virtual void Read() + { + this.HasBeenRead = true; + } + + public virtual DateTime Date { get; protected set; } + public virtual string? Text { get; protected set; } + + public virtual User User { get; set; } = null!; + + public virtual bool HasBeenRead { get; protected set; } + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Domain/Parent.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Domain/Parent.cs new file mode 100644 index 000000000..4d45b2453 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Domain/Parent.cs @@ -0,0 +1,86 @@ +namespace Suteki.TardisBank.Domain +{ + using System; + using System.Collections.Generic; + using System.Linq; + using Events; + using MediatR; + + public class Parent : User + { + public Parent(string name, string userName, string password) : base(name, userName, password) + { + this.Children = new List(); + } + + protected Parent() + { + } + + public virtual IList Children { get; protected set; } = null!; + + public virtual string ActivationKey { get; protected set; } = null!; + + // should be called when parent is first created. + public virtual Parent Initialise(IMediator mediator) + { + if (mediator == null) throw new ArgumentNullException(nameof(mediator)); + + this.ActivationKey = Guid.NewGuid().ToString(); + mediator.Publish(new NewParentCreatedEvent(this)); + return this; + } + + public virtual Child CreateChild(string name, string userName, string password) + { + var child = new Child(name, userName, password, this.Id); + + this.Children.Add(child); + return child; + } + + public virtual void MakePaymentTo(Child child, decimal amount) + { + this.MakePaymentTo(child, amount, string.Format("Payment from {0}", this.Name)); + } + + public virtual void MakePaymentTo(Child child, decimal amount, string description) + { + if (!this.HasChild(child)) + { + throw new TardisBankException("{0} is not a child of {1}", child.Name, this.Name); + } + child.ReceivePayment(amount, description); + } + + public virtual bool HasChild(Child child) + { + return this.Children.Any(x => x == child); + } + + public override void Activate() + { + this.ActivationKey = ""; + base.Activate(); + } + + public virtual bool HasChild(int childId) + { + return this.Children.Any(x => x.Id == childId); + } + + public virtual void RemoveChild(int childId) + { + Child? childToRemove = this.Children.SingleOrDefault(x => x.Id == childId); + if (childToRemove != null) + { + this.Children.Remove(childToRemove); + } + } + + public override string[] GetRoles() + { + return new[] { UserRoles.Parent }; + } + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Domain/PaymentSchedule.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Domain/PaymentSchedule.cs new file mode 100644 index 000000000..145bd7707 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Domain/PaymentSchedule.cs @@ -0,0 +1,45 @@ +namespace Suteki.TardisBank.Domain +{ + using System; + + using SharpArch.Domain.DomainModel; + + public class PaymentSchedule : Entity + { + public PaymentSchedule(DateTime nextRun, Interval interval, decimal amount, string description, Account account) + { + this.NextRun = nextRun; + this.Interval = interval; + this.Amount = amount; + this.Description = description; + this.Account = account; + } + + protected PaymentSchedule() + { + } + + public virtual DateTime NextRun { get; protected set; } + public virtual Interval Interval { get; protected set; } + public virtual decimal Amount { get; protected set; } + public virtual string? Description { get; protected set; } + + public virtual Account Account { get; protected set; } = null!; + + public virtual void CalculateNextRunDate() + { + switch (this.Interval) + { + case Interval.Day: + this.NextRun = this.NextRun.AddDays(1); + break; + case Interval.Week: + this.NextRun = this.NextRun.AddDays(7); + break; + case Interval.Month: + this.NextRun = this.NextRun.AddMonths(1); + break; + } + } + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Domain/Suteki.TardisBank.Domain.csproj b/Samples/TardisBank/Src/Suteki.TardisBank.Domain/Suteki.TardisBank.Domain.csproj new file mode 100644 index 000000000..fb905cd88 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Domain/Suteki.TardisBank.Domain.csproj @@ -0,0 +1,16 @@ + + + + $(AppTargetFrameworks) + + + + + + + + + + + + diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Domain/TardisBankException.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Domain/TardisBankException.cs new file mode 100644 index 000000000..f8cab1f43 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Domain/TardisBankException.cs @@ -0,0 +1,39 @@ +namespace Suteki.TardisBank.Domain +{ + using System; + using System.Runtime.Serialization; + + [Serializable] + public class TardisBankException : Exception + { + // + // For guidelines regarding the creation of new exception types, see + // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/cpconerrorraisinghandlingguidelines.asp + // and + // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dncscol/html/csharp07192001.asp + // + + public TardisBankException() + { + } + + public TardisBankException(string format, params object[] args) : this(string.Format(format, args)) + { + + } + + public TardisBankException(string message) : base(message) + { + } + + public TardisBankException(string message, Exception inner) : base(message, inner) + { + } + + protected TardisBankException( + SerializationInfo info, + StreamingContext context) : base(info, context) + { + } + } +} \ No newline at end of file diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Domain/Transaction.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Domain/Transaction.cs new file mode 100644 index 000000000..6a72bfadd --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Domain/Transaction.cs @@ -0,0 +1,28 @@ +namespace Suteki.TardisBank.Domain +{ + using System; + + using SharpArch.Domain.DomainModel; + + public class Transaction : Entity + { + public Transaction(string? description, decimal amount, Account account) + { + this.Description = description; + this.Amount = amount; + this.Account = account; + this.Date = DateTime.Now.Date; + } + + protected Transaction() + { + } + + public virtual string? Description { get; protected set; } + public virtual decimal Amount { get; protected set; } + + public virtual Account Account { get; protected set; } = null!; + + public virtual DateTime Date { get; protected set; } + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Domain/User.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Domain/User.cs new file mode 100644 index 000000000..09d67e78f --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Domain/User.cs @@ -0,0 +1,97 @@ +namespace Suteki.TardisBank.Domain +{ + using System; + using System.Collections.Generic; + using System.Linq; + using MediatR; + using SharpArch.Domain; + using SharpArch.Domain.DomainModel; + + using Suteki.TardisBank.Domain.Events; + + /// + /// User role constants. + /// + public static class UserRoles + { + /// + /// User is child. + /// + public const string Child = "Child"; + /// + /// User is parent. + /// + public const string Parent = "Parent"; + } + + public abstract class User : Entity + { + public const int MaxMessages = 20; + + protected User() + { + } + + public virtual string Name { get; protected set; } = null!; + public virtual string UserName { get; protected set; } = null!; + public virtual string Password { get; protected set; } = null!; + public virtual bool IsActive { get; protected set; } + public virtual IList Messages { get; protected set; } = null!; + + protected User(string name, string userName, string password) + { + this.Name = name; + this.UserName = userName; + this.Password = password; + this.Messages = new List(); + this.IsActive = false; + } + + public virtual void SendMessage(string text, IMediator mediator) + { + if (mediator == null) throw new ArgumentNullException(nameof(mediator)); + + this.Messages.Add(new Message(DateTime.Now.Date, text, this)); + this.RemoveOldMessages(); + + mediator.Publish(new SendMessageEvent(this, text)); + } + + void RemoveOldMessages() + { + if (this.Messages.Count <= MaxMessages) return; + + var oldestMessage = this.Messages.First(); + this.Messages.Remove(oldestMessage); + } + + public virtual void ReadMessage(int messageId) + { + var message = this.Messages.SingleOrDefault(x => x.Id == messageId); + if (message == null) + { + throw new TardisBankException("No message with Id {0} found for user '{1}'", messageId, this.UserName); + } + message.Read(); + } + + public virtual void Activate() + { + this.IsActive = true; + } + + public virtual void ResetPassword(string newPassword) + { + this.Password = newPassword; + } + + /// + /// Returns user roles. + /// + /// + public virtual string[] GetRoles() + { + return new string[0]; + } + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/Configuration/AnnouncementMappingProfile.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/Configuration/AnnouncementMappingProfile.cs new file mode 100644 index 000000000..27f6a318b --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/Configuration/AnnouncementMappingProfile.cs @@ -0,0 +1,22 @@ +namespace Suteki.TardisBank.Infrastructure.Configuration +{ + using System; + using Api.Announcements; + using AutoMapper; + using Domain; + + + public class AnnouncementMappingProfile : Profile + { + /// + public AnnouncementMappingProfile() + { + CreateMap(); + CreateMap(); + CreateMap() + .ForMember(d => d.LastModifiedUtc, opt => opt.MapFrom(_ => DateTime.UtcNow)) + .ForMember(d => d.Id, opt => opt.Ignore()) + ; + } + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/AccountMap.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/AccountMap.cs new file mode 100644 index 000000000..81de8e534 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/AccountMap.cs @@ -0,0 +1,16 @@ +namespace Suteki.TardisBank.Infrastructure.NHibernateMaps +{ + using FluentNHibernate.Automapping; + using FluentNHibernate.Automapping.Alterations; + + using Domain; + + public class AccountMap : IAutoMappingOverride + { + public void Override(AutoMapping mapping) + { + mapping.HasMany(a => a.PaymentSchedules).Cascade.AllDeleteOrphan().Inverse(); + mapping.HasMany(a => a.Transactions).Cascade.AllDeleteOrphan().Inverse(); + } + } +} \ No newline at end of file diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/AnnouncementMap.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/AnnouncementMap.cs new file mode 100644 index 000000000..883444b1f --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/AnnouncementMap.cs @@ -0,0 +1,19 @@ +namespace Suteki.TardisBank.Infrastructure.NHibernateMaps +{ + using FluentNHibernate.Automapping; + using FluentNHibernate.Automapping.Alterations; + using NHibernate.Type; + using Domain; + using JetBrains.Annotations; + + + [UsedImplicitly] + public class AnnouncementMap : IAutoMappingOverride + { + public void Override(AutoMapping mapping) + { + mapping.Map(x => x.Date).CustomSqlType("date"); + mapping.Map(x => x.LastModifiedUtc).CustomType(typeof (UtcDateTimeType)); + } + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/AutoPersistenceModelGenerator.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/AutoPersistenceModelGenerator.cs new file mode 100644 index 000000000..e28299542 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/AutoPersistenceModelGenerator.cs @@ -0,0 +1,40 @@ +using System; +using FluentNHibernate.Automapping; +using FluentNHibernate.Conventions; +using SharpArch.Domain.DomainModel; +using SharpArch.NHibernate.FluentNHibernate; +using Suteki.TardisBank.Domain; +using Suteki.TardisBank.Infrastructure.NHibernateMaps.Conventions; + +namespace Suteki.TardisBank.Infrastructure.NHibernateMaps +{ + /// + /// Generates the auto-mapping for the domain assembly + /// + public class AutoPersistenceModelGenerator : IAutoPersistenceModelGenerator + { + public AutoPersistenceModel Generate() + { + var mappings = AutoMap.AssemblyOf(new AutomappingConfiguration()); + mappings.IgnoreBase(typeof(Entity<>)); + mappings.Conventions.Setup(GetConventions()); + mappings.UseOverridesFromAssemblyOf(); + + return mappings; + } + + private static Action GetConventions() + { + return c => + { + c.Add(); + c.Add(); + c.Add(); + c.Add(); + c.Add(); + c.Add(); + c.Add(); + }; + } + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/AutomappingConfiguration.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/AutomappingConfiguration.cs new file mode 100644 index 000000000..5110b7b73 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/AutomappingConfiguration.cs @@ -0,0 +1,32 @@ +namespace Suteki.TardisBank.Infrastructure.NHibernateMaps +{ + using System.Linq; + using FluentNHibernate; + using FluentNHibernate.Automapping; + using SharpArch.Domain.DomainModel; + + + /// + public class AutomappingConfiguration : DefaultAutomappingConfiguration + { + /// + public override bool ShouldMap(System.Type type) + { + return type.GetInterfaces().Any(x => x == typeof(IEntity)); + } + + /// + public override bool ShouldMap(Member member) + { + // map only writable properties + return base.ShouldMap(member) && member.CanWrite; + } + + /// + public override bool AbstractClassIsLayerSupertype(System.Type type) + { + return type == typeof(Entity<>); + } + + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/ChildMap.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/ChildMap.cs new file mode 100644 index 000000000..44a71a5b2 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/ChildMap.cs @@ -0,0 +1,15 @@ +namespace Suteki.TardisBank.Infrastructure.NHibernateMaps +{ + using FluentNHibernate.Automapping; + using FluentNHibernate.Automapping.Alterations; + + using Domain; + + public class ChildMap : IAutoMappingOverride + { + public void Override(AutoMapping mapping) + { + mapping.References(c => c.Account).Cascade.All(); + } + } +} \ No newline at end of file diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/Conventions/CustomForeignKeyConvention.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/Conventions/CustomForeignKeyConvention.cs new file mode 100644 index 000000000..174eee187 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/Conventions/CustomForeignKeyConvention.cs @@ -0,0 +1,24 @@ +namespace Suteki.TardisBank.Infrastructure.NHibernateMaps.Conventions +{ + #region Using Directives + + using System; + + using FluentNHibernate; + using FluentNHibernate.Conventions; + + #endregion + + public class CustomForeignKeyConvention : ForeignKeyConvention + { + protected override string GetKeyName(Member property, Type type) + { + if (property == null) + { + return type.Name + "Id"; + } + + return property.Name + "Id"; + } + } +} \ No newline at end of file diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/Conventions/HasManyConvention.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/Conventions/HasManyConvention.cs new file mode 100644 index 000000000..7512a3769 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/Conventions/HasManyConvention.cs @@ -0,0 +1,24 @@ +namespace Suteki.TardisBank.Infrastructure.NHibernateMaps.Conventions +{ + #region Using Directives + + using FluentNHibernate.Conventions; + using FluentNHibernate.Conventions.Instances; + using Humanizer; + + #endregion + + public class HasManyConvention : IHasManyConvention + { + public void Apply(IOneToManyCollectionInstance instance) + { + instance.Key.Column(instance.EntityType.Name + "Id"); + var parent = instance.Relationship.EntityType.Name.Pluralize(); + instance.Key.ForeignKey( + $"FK_{instance.StringIdentifierForModel.Pluralize()}_For_{parent}"); + + instance.Cascade.AllDeleteOrphan(); + instance.Inverse(); + } + } +} \ No newline at end of file diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/Conventions/HasOneConvention.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/Conventions/HasOneConvention.cs new file mode 100644 index 000000000..d50b438ba --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/Conventions/HasOneConvention.cs @@ -0,0 +1,13 @@ +namespace Suteki.TardisBank.Infrastructure.NHibernateMaps.Conventions +{ + using FluentNHibernate.Conventions; + using FluentNHibernate.Conventions.Instances; + + public class HasOneConvention : IHasOneConvention + { + public void Apply(IOneToOneInstance instance) + { + instance.ForeignKey($"FK_{instance.EntityType.Name}_To_{instance.Name}"); + } + } +} \ No newline at end of file diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/Conventions/JoinedSubClassConvention.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/Conventions/JoinedSubClassConvention.cs new file mode 100644 index 000000000..bccec85e9 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/Conventions/JoinedSubClassConvention.cs @@ -0,0 +1,19 @@ +namespace Suteki.TardisBank.Infrastructure.NHibernateMaps.Conventions +{ + using FluentNHibernate.Conventions; + using FluentNHibernate.Conventions.Instances; + using Humanizer; + + public class JoinedSubClassConvention : IJoinedSubclassConvention + { + public void Apply(IJoinedSubclassInstance instance) + { + // pluralize table names + instance.Table(instance.EntityType.Name.Pluralize()); + + if (instance.Type.BaseType != null) + instance.Key.ForeignKey( + $"FK_{instance.EntityType.Name.Pluralize()}_Join_{instance.Type.BaseType.Name.Pluralize()}"); + } + } +} \ No newline at end of file diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/Conventions/PrimaryKeyConvention.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/Conventions/PrimaryKeyConvention.cs new file mode 100644 index 000000000..4906b6614 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/Conventions/PrimaryKeyConvention.cs @@ -0,0 +1,17 @@ +namespace Suteki.TardisBank.Infrastructure.NHibernateMaps.Conventions +{ + using FluentNHibernate.Conventions; + using FluentNHibernate.Conventions.Instances; + using JetBrains.Annotations; + + + [UsedImplicitly] + public class PrimaryKeyConvention : IIdConvention + { + public void Apply(IIdentityInstance instance) + { + instance.Column(instance.EntityType.Name + "Id"); + instance.GeneratedBy.HiLo("10"); + } + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/Conventions/ReferenceConvention.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/Conventions/ReferenceConvention.cs new file mode 100644 index 000000000..4fec0187a --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/Conventions/ReferenceConvention.cs @@ -0,0 +1,14 @@ +namespace Suteki.TardisBank.Infrastructure.NHibernateMaps.Conventions +{ + using FluentNHibernate.Conventions; + using FluentNHibernate.Conventions.Instances; + using Humanizer; + + public class ReferenceConvention : IReferenceConvention + { + public void Apply(IManyToOneInstance instance) + { + instance.ForeignKey($"FK_{instance.EntityType.Name.Pluralize()}_Ref_{instance.Name.Pluralize()}"); + } + } +} \ No newline at end of file diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/Conventions/TableNameConvention.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/Conventions/TableNameConvention.cs new file mode 100644 index 000000000..a16805ebe --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/Conventions/TableNameConvention.cs @@ -0,0 +1,17 @@ +namespace Suteki.TardisBank.Infrastructure.NHibernateMaps.Conventions +{ + using FluentNHibernate.Conventions; + using FluentNHibernate.Conventions.Instances; + using Humanizer; + + /// + /// Pluralize table name. + /// + public class TableNameConvention : IClassConvention + { + public void Apply(IClassInstance instance) + { + instance.Table(instance.EntityType.Name.Pluralize()); + } + } +} \ No newline at end of file diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/MessageMap.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/MessageMap.cs new file mode 100644 index 000000000..28e6860aa --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/MessageMap.cs @@ -0,0 +1,15 @@ +namespace Suteki.TardisBank.Infrastructure.NHibernateMaps +{ + using FluentNHibernate.Automapping; + using FluentNHibernate.Automapping.Alterations; + + using Domain; + + public class MessageMap : IAutoMappingOverride + { + public void Override(AutoMapping mapping) + { + mapping.References(m => m.User); + } + } +} \ No newline at end of file diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/PaymentScheduleMap.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/PaymentScheduleMap.cs new file mode 100644 index 000000000..9bf905084 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/PaymentScheduleMap.cs @@ -0,0 +1,15 @@ +namespace Suteki.TardisBank.Infrastructure.NHibernateMaps +{ + using FluentNHibernate.Automapping; + using FluentNHibernate.Automapping.Alterations; + + using Domain; + + public class PaymentScheduleMap : IAutoMappingOverride + { + public void Override(AutoMapping mapping) + { + mapping.References(p => p.Account); + } + } +} \ No newline at end of file diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/TransactionMap.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/TransactionMap.cs new file mode 100644 index 000000000..598b497ac --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/TransactionMap.cs @@ -0,0 +1,15 @@ +namespace Suteki.TardisBank.Infrastructure.NHibernateMaps +{ + using FluentNHibernate.Automapping; + using FluentNHibernate.Automapping.Alterations; + + using Domain; + + public class TransactionMap : IAutoMappingOverride + { + public void Override(AutoMapping mapping) + { + mapping.References(p => p.Account); + } + } +} \ No newline at end of file diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/UserMap.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/UserMap.cs new file mode 100644 index 000000000..181ebce4b --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/NHibernateMaps/UserMap.cs @@ -0,0 +1,15 @@ +namespace Suteki.TardisBank.Infrastructure.NHibernateMaps +{ + using FluentNHibernate.Automapping; + using FluentNHibernate.Automapping.Alterations; + + using Domain; + + public class UserMap : IAutoMappingOverride + { + public void Override(AutoMapping mapping) + { + mapping.HasMany(u => u.Messages).Cascade.AllDeleteOrphan().Inverse(); + } + } +} \ No newline at end of file diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/Suteki.TardisBank.Infrastructure.csproj b/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/Suteki.TardisBank.Infrastructure.csproj new file mode 100644 index 000000000..01036ad49 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Infrastructure/Suteki.TardisBank.Infrastructure.csproj @@ -0,0 +1,21 @@ + + + + $(AppTargetFrameworks) + + + + + + + + + + + + + + + + + diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Tasks/EmailService.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Tasks/EmailService.cs new file mode 100644 index 000000000..898e2fab2 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Tasks/EmailService.cs @@ -0,0 +1,59 @@ +namespace Suteki.TardisBank.Tasks +{ + using System; + using System.Net; + using System.Net.Mail; + + public interface IEmailService + { + void SendEmail(string toAddress, string subject, string body); + } + + public class EmailService : IEmailService + { + readonly TardisConfiguration _configuration; + + public EmailService(TardisConfiguration configuration) + { + _configuration = configuration; + } + + public void SendEmail(string toAddress, string subject, string body) + { + if (toAddress == null) + { + throw new ArgumentNullException(nameof(toAddress)); + } + if (subject == null) + { + throw new ArgumentNullException(nameof(subject)); + } + if (body == null) + { + throw new ArgumentNullException(nameof(body)); + } + if (string.IsNullOrWhiteSpace(_configuration.EmailSmtpServer)) return; + + var message = new MailMessage( + _configuration.EmailFromAddress, + toAddress, + subject, + body); + + var client = new SmtpClient(_configuration.EmailSmtpServer) + { + EnableSsl = _configuration.EmailEnableSsl, + Port = _configuration.EmailPort, + }; + + if (!string.IsNullOrWhiteSpace(_configuration.EmailCredentialsUserName) && + !string.IsNullOrWhiteSpace(_configuration.EmailCredentialsPassword)) + { + client.Credentials = new NetworkCredential(_configuration.EmailCredentialsUserName, + _configuration.EmailCredentialsPassword); + } + + client.Send(message); + } + } +} \ No newline at end of file diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Tasks/EventHandlers/SendMessageEmailHandler.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Tasks/EventHandlers/SendMessageEmailHandler.cs new file mode 100644 index 000000000..003b25baa --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Tasks/EventHandlers/SendMessageEmailHandler.cs @@ -0,0 +1,43 @@ +namespace Suteki.TardisBank.Tasks.EventHandlers +{ + using System; + using System.Threading; + using System.Threading.Tasks; + using Domain; + using Domain.Events; + using JetBrains.Annotations; + using MediatR; + + + [UsedImplicitly] + public class SendMessageEmailHandler : INotificationHandler + { + private readonly IEmailService _emailService; + + public SendMessageEmailHandler(IEmailService emailService) + { + _emailService = emailService; + } + + public Task Handle(SendMessageEvent sendMessageEvent, CancellationToken token) + { + if (sendMessageEvent == null) + { + throw new ArgumentNullException(nameof(sendMessageEvent)); + } + + if (sendMessageEvent.User is Child) + { + // we cannot send email messages to children. + return Task.CompletedTask; + } + + var toAddress = sendMessageEvent.User.UserName; + const string subject = "Message from Tardis Bank"; + var body = sendMessageEvent.Message; + + _emailService.SendEmail(toAddress, subject, body); + return Task.CompletedTask; + } + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Tasks/EventHandlers/SendRegistrationEmailHandler.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Tasks/EventHandlers/SendRegistrationEmailHandler.cs new file mode 100644 index 000000000..467d28143 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Tasks/EventHandlers/SendRegistrationEmailHandler.cs @@ -0,0 +1,47 @@ +namespace Suteki.TardisBank.Tasks.EventHandlers +{ + using System; + using System.Threading; + using System.Threading.Tasks; + using JetBrains.Annotations; + using MediatR; + using Domain; + using Domain.Events; + + [UsedImplicitly] + public class SendRegistrationEmailHandler : INotificationHandler + { + const string EmailBodyTemplate = + @"Please click here to activate your account: {0} (or copy and Paste this URL into your browser)"; + + readonly IEmailService _emailService; + + /// + public SendRegistrationEmailHandler(IEmailService emailService) + { + _emailService = emailService; + } + + + /// + public Task Handle(NewParentCreatedEvent newParentCreatedEvent, CancellationToken cancellationToken) + { + if (newParentCreatedEvent == null) + { + throw new ArgumentNullException(nameof(newParentCreatedEvent)); + } + if (string.IsNullOrWhiteSpace(newParentCreatedEvent.Parent.ActivationKey)) + { + throw new TardisBankException("Parent does not have an activation key"); + } + + var toAddress = newParentCreatedEvent.Parent.UserName; + var subject = "Welcome to Tardis Bank"; + var url = "http://tardisbank.com/User/Activate/" + newParentCreatedEvent.Parent.ActivationKey; + var body = string.Format(EmailBodyTemplate, url); + + _emailService.SendEmail(toAddress, subject, body); + return Task.CompletedTask; + } + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Tasks/IHttpContextService.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Tasks/IHttpContextService.cs new file mode 100644 index 000000000..676947fec --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Tasks/IHttpContextService.cs @@ -0,0 +1,10 @@ +namespace Suteki.TardisBank.Tasks +{ + public interface IHttpContextService + { + string UserName { get; } + bool UserIsAuthenticated { get; } + + bool UserIsInRole(string role); + } +} \ No newline at end of file diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Tasks/IUserService.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Tasks/IUserService.cs new file mode 100644 index 000000000..79255323c --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Tasks/IUserService.cs @@ -0,0 +1,20 @@ +namespace Suteki.TardisBank.Tasks +{ + using System.Threading; + using System.Threading.Tasks; + using Domain; + + + public interface IUserService + { + Task GetCurrentUser(CancellationToken cancellationToken = default); + Task GetUser(int userId, CancellationToken cancellationToken = default); + Task GetUserByUserName(string userName, CancellationToken cancellationToken = default); + Task GetUserByActivationKey(string activationKey, CancellationToken cancellationToken = default); + Task SaveUser(User user, CancellationToken cancellationToken = default); + Task DeleteUser(int userId, CancellationToken cancellationToken = default); + + bool AreNullOrNotRelated(Parent parent, Child child); + Task IsNotChildOfCurrentUser(Child child, CancellationToken cancellationToken = default); + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Tasks/SchedulerService.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Tasks/SchedulerService.cs new file mode 100644 index 000000000..80489b6c0 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Tasks/SchedulerService.cs @@ -0,0 +1,41 @@ +namespace Suteki.TardisBank.Tasks +{ + using System; + using System.Linq; + + using Domain; + + using NHibernate; + using NHibernate.Linq; + + public interface ISchedulerService + { + void ExecuteUpdates(DateTime now); + } + + public class SchedulerService : ISchedulerService + { + private ISession _session; + + public SchedulerService(ISession session) + { + _session = session; + } + + /// + /// Gets all outstanding scheduled updates and performs the update. + /// + public void ExecuteUpdates(DateTime now) + { + var today = new DateTime(now.Year, now.Month, now.Day, 23, 59, 59); + + var results = _session.Query(). + Where(c => c.Account.PaymentSchedules.Any(p => p.NextRun < today)).Fetch(c => c.Account); + + foreach (var child in results.ToList()) + { + child.Account.TriggerScheduledPayments(now); + } + } + } +} \ No newline at end of file diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Tasks/Suteki.TardisBank.Tasks.csproj b/Samples/TardisBank/Src/Suteki.TardisBank.Tasks/Suteki.TardisBank.Tasks.csproj new file mode 100644 index 000000000..06f544a03 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Tasks/Suteki.TardisBank.Tasks.csproj @@ -0,0 +1,17 @@ + + + + $(AppTargetFrameworks) + + + + + + + + + + + + + diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Tasks/TardisConfiguration.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Tasks/TardisConfiguration.cs new file mode 100644 index 000000000..c8ae16223 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Tasks/TardisConfiguration.cs @@ -0,0 +1,31 @@ +namespace Suteki.TardisBank.Tasks +{ + public class TardisConfiguration + { + public TardisConfiguration() + { + // set some useful defaults here + ScheduleKey = "run"; + + EmailSmtpServer = ""; // if this string is empty emails just don't get sent + EmailEnableSsl = false; + EmailPort = 25; + EmailCredentialsUserName = ""; // if the username or password is blank, default credentials are used. + EmailCredentialsPassword = ""; + EmailFromAddress = ""; + + GoogleAnalyticsUaCode = ""; + } + + public string ScheduleKey { get; set; } + + public string EmailSmtpServer { get; set; } + public bool EmailEnableSsl { get; set; } + public int EmailPort { get; set; } + public string EmailCredentialsUserName { get; set; } + public string EmailCredentialsPassword { get; set; } + public string EmailFromAddress { get; set; } + + public string GoogleAnalyticsUaCode { get; set; } + } +} \ No newline at end of file diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Tasks/UserService.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Tasks/UserService.cs new file mode 100644 index 000000000..39a4b4d13 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Tasks/UserService.cs @@ -0,0 +1,93 @@ +namespace Suteki.TardisBank.Tasks +{ + using System; + using System.Linq; + using System.Threading; + using System.Threading.Tasks; + using SharpArch.Domain.PersistenceSupport; + + using Domain; + using NHibernate.Linq; + + + public class UserService : IUserService + { + readonly IHttpContextService _context; + + readonly ILinqRepository _parentRepository; + + readonly ILinqRepository _userRepository; + + public UserService(IHttpContextService context, ILinqRepository parentRepository, ILinqRepository userRepository) + { + _context = context; + _parentRepository = parentRepository; + _userRepository = userRepository; + } + + public Task GetCurrentUser(CancellationToken cancellationToken) + { + if (!_context.UserIsAuthenticated) return Task.FromResult(null); + + return GetUserByUserName(_context.UserName, cancellationToken); + } + + public Task GetUser(int userId, CancellationToken cancellationToken) + { + return _userRepository.FindOneAsync(userId, cancellationToken); + } + + public Task GetUserByUserName(string userName, CancellationToken cancellationToken) + { + if (userName == null) + { + throw new ArgumentNullException(nameof(userName)); + } + + return _userRepository.FindAll().Where(u => u.UserName == userName).FirstOrDefaultAsync(cancellationToken)!; + } + + public async Task GetUserByActivationKey(string activationKey, CancellationToken cancellationToken) + { + if (activationKey == null) + { + throw new ArgumentNullException(nameof(activationKey)); + } + + var res = await _parentRepository.FindAll().Where(x => x.ActivationKey == activationKey).SingleOrDefaultAsync(cancellationToken) + .ConfigureAwait(false); + return res; + } + + public Task SaveUser(User user, CancellationToken cancellationToken) + { + if (user == null) + throw new ArgumentNullException(nameof(user)); + + return _userRepository.SaveAsync(user, cancellationToken); + } + + public bool AreNullOrNotRelated(Parent parent, Child child) + { + if (parent == null || child == null) return true; + + if (!parent.HasChild(child)) + { + throw new TardisBankException("'{0}' is not a child of '{1}'", child.UserName, parent.UserName); + } + + return false; + } + + public async Task IsNotChildOfCurrentUser(Child child, CancellationToken cancellationToken) + { + var parent = (await GetCurrentUser(cancellationToken).ConfigureAwait(false)) as Parent; + return (child == null) || (parent == null) || (!parent.HasChild(child)); + } + + public Task DeleteUser(int userId, CancellationToken cancellationToken) + { + return _userRepository.DeleteAsync(userId, cancellationToken); + } + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Tests/AssemblySetup.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/AssemblySetup.cs new file mode 100644 index 000000000..ee08070f2 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/AssemblySetup.cs @@ -0,0 +1,10 @@ +namespace Suteki.TardisBank.Tests +{ + + public class AssemblySetup + { + public void RunBeforeAllTests() + { + } + } +} \ No newline at end of file diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Functional/AnnouncementControllerTests.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Functional/AnnouncementControllerTests.cs new file mode 100644 index 000000000..36e07905a --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Functional/AnnouncementControllerTests.cs @@ -0,0 +1,61 @@ +namespace Suteki.TardisBank.Tests.Functional +{ + using System; + using System.Net.Http; + using System.Threading.Tasks; + using Api.Announcements; + using FluentAssertions; + using JetBrains.Annotations; + using Setup; + using Xunit; + + + public class AnnouncementControllerTests : IClassFixture, IDisposable + { + readonly TestServerSetup _setup; + Uri? _newAnnouncementUri; + + public AnnouncementControllerTests(TestServerSetup setup) + { + _setup = setup ?? throw new ArgumentNullException(nameof(setup)); + } + + /// + public void Dispose() + { + if (_newAnnouncementUri != null) + { + DeleteAnnouncement(_newAnnouncementUri).ConfigureAwait(false).GetAwaiter().GetResult(); + } + } + + Task DeleteAnnouncement(Uri uri) + => _setup?.Client?.DeleteAsync(uri) + ?? Task.CompletedTask; + + [Fact] + public async Task CanSaveAnnouncement() + { + var today = DateTime.Now.Date; + var uid = Guid.NewGuid().ToString("N"); + var newAnnouncement = new NewAnnouncement + { + Date = today, + Content = "New announcement " + today, + Title = uid + }; + var response = await _setup.Client.PostAsJsonAsync("announcements", newAnnouncement); + response.EnsureSuccessStatusCode(); + + _newAnnouncementUri = response.Headers.Location!; + + var announcementResponse = await _setup.Client.GetAsync(_newAnnouncementUri); + announcementResponse.EnsureSuccessStatusCode(); + var announcementSummary = await announcementResponse.Content.ReadAsAsync(); + announcementSummary.Id.Should().BeGreaterThan(0); + announcementSummary.Title.Should().Be(newAnnouncement.Title); + + await DeleteAnnouncement(_newAnnouncementUri).ConfigureAwait(false); + } + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Functional/Setup/TestServerSetup.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Functional/Setup/TestServerSetup.cs new file mode 100644 index 000000000..9be0899e7 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Functional/Setup/TestServerSetup.cs @@ -0,0 +1,33 @@ +namespace Suteki.TardisBank.Tests.Functional.Setup +{ + using System; + using System.Net.Http; + using Microsoft.AspNetCore.Hosting; + using Microsoft.AspNetCore.TestHost; + using WebApi; + + + public class TestServerSetup : IDisposable + { + public HttpClient Client { get; } + public TestServer Server { get; } + + public TestServerSetup() + { + Server = new TestServer(Program.CreateHostBuilder(Array.Empty()) + .UseTestServer() + .UseStartup() + .UseSolutionRelativeContentRoot("TardisBank/Src/Suteki.TardisBank.WebApi/") + ); + Client = Server.CreateClient(); + Client.BaseAddress = Server.BaseAddress; + } + + /// + public void Dispose() + { + Server?.Dispose(); + Client?.Dispose(); + } + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Helpers/ActionResultExtensions.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Helpers/ActionResultExtensions.cs new file mode 100644 index 000000000..24ee92fd8 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Helpers/ActionResultExtensions.cs @@ -0,0 +1,246 @@ +#if false + +// todo check later +using System; +using System.Runtime.Serialization; +using System.Web.Mvc; +namespace Suteki.TardisBank.Tests.Helpers +{ + using global::Suteki.TardisBank.Web.Mvc.Utilities; + + public static class ActionResultExtensions + { + public static ViewResult ReturnsViewResult(this ActionResult result) + { + var viewResult = result as ViewResult; + if (viewResult == null) + { + throw new TestHelperException("result is not a ViewResult"); + } + return viewResult; + } + + public static RedirectToRouteResult ReturnsRedirectToRouteResult(this ActionResult result) + { + var viewResult = result as RedirectToRouteResult; + if (viewResult == null) + { + throw new TestHelperException("result is not a RedirectToRouteResult"); + } + return viewResult; + } + + public static RedirectResult ReturnsRedirect(this ActionResult result) + { + var redirectResult = result as RedirectResult; + if (redirectResult == null) + { + throw new TestHelperException("result is not a RedirectResult"); + } + + return redirectResult; + } + + public static PartialViewResult ReturnsPartialViewResult(this ActionResult result) + { + var viewResult = result as PartialViewResult; + if (viewResult == null) + { + throw new TestHelperException("result is not a PartialResult"); + } + return viewResult; + } + + public static ContentResult ReturnsContentResult(this ActionResult result) + { + var contentResult = result as ContentResult; + if (contentResult == null) + { + throw new TestHelperException("result is not a ContentResult"); + } + return contentResult; + } + + public static TResult ReturnsResult(this ActionResult result) where TResult : ActionResult + { + var actualResult = result as TResult; + if (actualResult == null) + { + throw new TestHelperException("Result is not a {0}".With(typeof(TResult).Name)); + } + return actualResult; + } + + public static RedirectToRouteResult ToAction(this RedirectToRouteResult result, string actionName) + { + return result.WithRouteValue("action", actionName); + } + + public static RedirectToRouteResult ToController(this RedirectToRouteResult result, string controllerName) + { + return result.WithRouteValue("controller", controllerName); + } + + public static RedirectToRouteResult WithRouteValue(this RedirectToRouteResult result, string key, string value) + { + if (result.RouteValues[key] == null) + { + throw new TestHelperException(string.Format("route value {0} is null", key)); + } + + if (result.RouteValues[key].ToString() != value) + { + throw new TestHelperException(string.Format("redirect {0} is {1}, expected {2}", + key, result.RouteValues[key], value)); + } + return result; + } + + public static JsonResult ReturnsJsonResult(this ActionResult result) + { + var jsonResult = result as JsonResult; + if (jsonResult == null) + { + throw new TestHelperException("result is not a jsonResult"); + } + return jsonResult; + } + + public static T WithModel(this ViewResult viewResult) where T : class + { + var model = viewResult.ViewData.Model as T; + if (model == null) + { + throw new TestHelperException("model is not an instance of {0}".With(typeof(T).Name)); + } + return model; + } + + public static ViewResult ForView(this ViewResult result, string viewName) + { + if (viewName != result.ViewName) + { + throw new TestHelperException("ViewResult.ViewName is not '{0}', but {1}".With(viewName, result.ViewName)); + } + return result; + } + + public static PartialViewResult ForView(this PartialViewResult result, string viewName) + { + if (viewName != result.ViewName) + { + throw new TestHelperException("PartialViewResult.ViewName is not {0}".With(viewName)); + } + return result; + } + + public static TViewData AssertNotNull(this TViewData viewData, Func property) + where TProperty : class + { + if (property(viewData) == null) + { + throw new TestHelperException("Property is null"); + } + return viewData; + } + + public static TViewData AssertNull(this TViewData viewData, Func property) + where TProperty : class + { + if (property(viewData) != null) + { + throw new TestHelperException("Property is not null"); + } + return viewData; + } + + public static TViewData AssertAreSame( + this TViewData viewData, + TProperty expected, + Func property) + where TProperty : class + { + if (expected != property(viewData)) + { + throw new TestHelperException( + "Not same, expected {0}, actual {1}".With(expected, property(viewData))); + } + return viewData; + } + + public static TViewData AssertAreSame( + this TViewData viewData, + TViewData expected) + where TViewData : class + { + return viewData.AssertAreSame(expected, vd => vd); + } + + + public static TViewData AssertAreEqual( + this TViewData viewData, + TProperty expected, + Func property) + { + if (!expected.Equals(property(viewData))) + { + throw new TestHelperException( + "Not equal, expected {0}, actual {1}".With(expected, property(viewData))); + } + return viewData; + } + + public static TViewData AssertIsTrue( + this TViewData viewData, + Predicate predicate) + { + if (!predicate(viewData)) + { + throw new TestHelperException("False"); + } + return viewData; + } + + public static TViewData Callback( + this TViewData viewData, + Action action) + { + action(viewData); + return viewData; + } + } + + [Serializable] + public class TestHelperException : Exception + { + // + // For guidelines regarding the creation of new exception types, see + // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/cpconerrorraisinghandlingguidelines.asp + // and + // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dncscol/html/csharp07192001.asp + // + + public TestHelperException() + { + } + + public TestHelperException(string message) + : base(message) + { + } + + public TestHelperException(string message, Exception inner) + : base(message, inner) + { + } + + protected TestHelperException( + SerializationInfo info, + StreamingContext context) + : base(info, context) + { + } + } +} + +#endif \ No newline at end of file diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Helpers/DateFomatterTests.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Helpers/DateFomatterTests.cs new file mode 100644 index 000000000..5440554d0 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Helpers/DateFomatterTests.cs @@ -0,0 +1,32 @@ +#if false +using NUnit.Framework; + +namespace Suteki.TardisBank.Tests.Helpers +{ + using FluentAssertions; + using global::Suteki.TardisBank.Web.Mvc.Utilities; + using SharpArch.Testing.NUnit; + + [TestFixture] + public class DateFomatterTests + { + [Fact] + public void Should_return_the_correct_date_format() + { + GetJQueryDateFormatFor("en-GB").Should().Be("dd/mm/yy"); + GetJQueryDateFormatFor("en-US").Should().Be("m/d/yy"); + GetJQueryDateFormatFor("fr").Should().Be("dd/mm/yy"); + GetJQueryDateFormatFor("de-CH").Should().Be("dd.mm.yy"); + GetJQueryDateFormatFor("de").Should().Be("dd.mm.yy"); + } + + static string GetJQueryDateFormatFor(string language) + { + var culture = new System.Globalization.CultureInfo(language); + System.Threading.Thread.CurrentThread.CurrentCulture = culture; + + return DateFormatter.CurrentJQuery; + } + } +} +#endif \ No newline at end of file diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Helpers/RunnableInDebugOnlyAttribute.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Helpers/RunnableInDebugOnlyAttribute.cs new file mode 100644 index 000000000..626541377 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Helpers/RunnableInDebugOnlyAttribute.cs @@ -0,0 +1,23 @@ +namespace Suteki.TardisBank.Tests.Helpers +{ + using System; + using System.Diagnostics; + using Xunit; + + + /// + /// Run test only if debugger attached. + /// Taken from https://lostechies.com/jimmybogard/2013/06/20/run-tests-explicitly-in-xunit-net/ + /// + [AttributeUsage(AttributeTargets.Method)] + public sealed class RunnableInDebugOnlyAttribute : FactAttribute + { + public RunnableInDebugOnlyAttribute() + { + if (!Debugger.IsAttached) + { + Skip = "Only running in interactive mode."; + } + } + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Hibernate.cfg.xml b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Hibernate.cfg.xml new file mode 100644 index 000000000..00be7d58e --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Hibernate.cfg.xml @@ -0,0 +1,11 @@ + + + + NHibernate.Connection.DriverConnectionProvider + NHibernate.Dialect.SQLiteDialect + NHibernate.Driver.SQLite20Driver + Data Source=:memory:;Version=3;New=True; + on_close + true + + \ No newline at end of file diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Model/ChildTests.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Model/ChildTests.cs new file mode 100644 index 000000000..1c84fe899 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Model/ChildTests.cs @@ -0,0 +1,75 @@ +namespace Suteki.TardisBank.Tests.Model +{ + using System; + using System.Threading; + using System.Threading.Tasks; + using Domain; + using FluentAssertions; + using SharpArch.NHibernate; + using SharpArch.Testing.Xunit.NHibernate; + using Xunit; + + + public class ChildTests : TransientDatabaseTests + { + readonly LinqRepository _childRepository; + int _childId; + int _parentId; + + /// + public ChildTests(TransientDatabaseSetup dbSetup) + : base(dbSetup) + { + _childRepository = new LinqRepository(TransactionManager); + } + + protected override async Task LoadTestData(CancellationToken cancellationToken) + { + var parent = new Parent("Mike Hadlow", "mike@yahoo.com", "yyy"); + await Session.SaveAsync(parent, cancellationToken); + + _parentId = parent.Id; + + var child = parent.CreateChild("Leo", "leohadlow", "xxx"); + await Session.SaveAsync(child, cancellationToken); + await Session.FlushAndEvictAsync(cancellationToken, child, parent); + _childId = child.Id; + } + + [Fact] + public async Task Should_be_able_to_add_schedule_to_account() + { + var childToTestOn = (await _childRepository.GetAsync(_childId))!; + childToTestOn.Should().NotBeNull(); + + childToTestOn.Account.AddPaymentSchedule(DateTime.UtcNow, Interval.Week, 10, "Weekly pocket money"); + await FlushSessionAndEvict(childToTestOn); + + var child = (await _childRepository.GetAsync(_childId))!; + child.Should().NotBeNull(); + child.Account.PaymentSchedules[0].Id.Should().BePositive("schedule was not persisted"); + } + + [Fact] + public async Task Should_be_able_to_add_transaction_to_account() + { + var childToTestOn = (await _childRepository.GetAsync(_childId))!; + childToTestOn.ReceivePayment(10, "Reward"); + await FlushSessionAndEvict(childToTestOn); + + var child = (await _childRepository.GetAsync(_childId))!; + child.Account.Transactions[0].Id.Should().BePositive(); + } + + [Fact] + public async Task Should_be_able_to_create_and_retrieve_a_child() + { + var child = (await _childRepository.GetAsync(_childId))!; + child.Name.Should().Be("Leo"); + child.UserName.Should().Be(@"leohadlow"); + child.ParentId.Should().Be(_parentId); + child.Password.Should().Be("xxx"); + child.Account.Should().NotBeNull(); + } + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Model/MakePaymentTests.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Model/MakePaymentTests.cs new file mode 100644 index 000000000..50d3e5983 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Model/MakePaymentTests.cs @@ -0,0 +1,45 @@ +namespace Suteki.TardisBank.Tests.Model +{ + using System; + using Domain; + using FluentAssertions; + using Xunit; + + + public class MakePaymentTests + { + readonly Parent _parent; + readonly Child _child; + + readonly Parent _somebodyElse; + readonly Child _somebodyElsesChild; + + public MakePaymentTests() + { + _parent = new Parent("Mike Hadlow", "mike@yahoo.com", "pwd"); + _child = _parent.CreateChild("Leo", @"leohadlow", "xxx"); + + _somebodyElse = new Parent("John Robinson", "john@gmail.com", "pwd"); + _somebodyElsesChild = _somebodyElse.CreateChild("Jim", "jimrobinson", "yyy"); + } + + [Fact] + public void Should_be_able_to_make_a_payment() + { + _parent.MakePaymentTo(_child, 2.30M); + + _child.Account.Transactions.Count.Should().Be(1); + _child.Account.Transactions[0].Amount.Should().Be(2.30M); + _child.Account.Transactions[0].Description.Should().Be("Payment from Mike Hadlow"); + _child.Account.Transactions[0].Date.Should().Be(DateTime.Now.Date); + _child.Account.Balance.Should().Be(2.30M); + } + + [Fact] + public void Should_not_be_able_to_make_a_payment_to_somebody_elses_child() + { + Action makePayment = () => _parent.MakePaymentTo(_somebodyElsesChild, 4.50M); + makePayment.Should().Throw().WithMessage("Jim is not a child of Mike Hadlow"); + } + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Model/MessageCountLimitTests.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Model/MessageCountLimitTests.cs new file mode 100644 index 000000000..b0c47aa62 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Model/MessageCountLimitTests.cs @@ -0,0 +1,42 @@ +using System.Linq; +using FluentAssertions; +using MediatR; +using Moq; +using Suteki.TardisBank.Domain; +using Xunit; + +namespace Suteki.TardisBank.Tests.Model +{ + public class MessageCountLimitTests + { + public MessageCountLimitTests() + { + _mediator = new Mock(); + _user = new Parent("Mike", "mike@mike.com", "xxx"); + } + + readonly User _user; + readonly Mock _mediator; + + [Fact] + public void Number_of_messages_should_be_limited() + { + for (var i = 0; i < User.MaxMessages; i++) + { + _user.SendMessage("Message" + i, _mediator.Object); + } + + _user.Messages.Count.Should().Be(User.MaxMessages); + + _user.SendMessage("New", _mediator.Object); + _user.Messages.Count.Should().Be(User.MaxMessages); + _user.Messages.First().Text.Should().Be("Message1"); + _user.Messages.Last().Text.Should().Be("New"); + + _user.SendMessage("New2", _mediator.Object); + _user.Messages.Count.Should().Be(User.MaxMessages); + _user.Messages.First().Text.Should().Be("Message2"); + _user.Messages.Last().Text.Should().Be("New2"); + } + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Model/MessageTests.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Model/MessageTests.cs new file mode 100644 index 000000000..d51a50811 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Model/MessageTests.cs @@ -0,0 +1,47 @@ +namespace Suteki.TardisBank.Tests.Model +{ + using System.Threading; + using System.Threading.Tasks; + using Domain; + using FluentAssertions; + using MediatR; + using Moq; + using SharpArch.NHibernate; + using SharpArch.Testing.Xunit.NHibernate; + using Xunit; + + + public class MessageTests : TransientDatabaseTests + { + int _userId; + readonly Mock _mediator; + + public MessageTests(TransientDatabaseSetup dbSetup) : base(dbSetup) + { + _mediator = new Mock(); + } + + protected override async Task LoadTestData(CancellationToken cancellationToken) + { + User user = new Parent("Dad", "mike@mike.com", "xxx"); + await Session.SaveAsync(user, cancellationToken); + + await FlushSessionAndEvict(user, cancellationToken); + _userId = user.Id; + } + + [Fact] + public async Task Should_be_able_to_add_a_message_to_a_user() + { + var parentRepository = new LinqRepository(TransactionManager); + User userToTestWith = (await parentRepository.GetAsync(_userId))!; + + userToTestWith.SendMessage("some message", _mediator.Object); + + await FlushSessionAndEvict(userToTestWith); + + Parent parent = (await parentRepository.GetAsync(_userId))!; + parent.Messages.Count.Should().Be(1); + } + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Model/ParentTests.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Model/ParentTests.cs new file mode 100644 index 000000000..6551583a3 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Model/ParentTests.cs @@ -0,0 +1,59 @@ +namespace Suteki.TardisBank.Tests.Model +{ + using System.Threading; + using System.Threading.Tasks; + using Domain; + using FluentAssertions; + using SharpArch.NHibernate; + using SharpArch.Testing.Xunit.NHibernate; + using Xunit; + + + public class ParentTests : TransientDatabaseTests + { + int _parentId; + + public ParentTests(TransientDatabaseSetup dbSetup) + : base(dbSetup) + { + } + + protected override async Task LoadTestData(CancellationToken cancellationToken) + { + var parent = new Parent("Mike Hadlow", string.Format("{0}@yahoo.com", "mike"), "yyy"); + await Session.SaveAsync(parent, cancellationToken); + await FlushSessionAndEvict(parent, cancellationToken); + _parentId = parent.Id; + } + + [Fact] + public async Task Should_be_able_to_add_a_child_to_a_parent() + { + var linqRepository = new LinqRepository(TransactionManager); + Parent savedParent = (await linqRepository.GetAsync(_parentId))!; + savedParent.Should().NotBeNull(); + + savedParent.CreateChild("jim", "jim123", "passw0rd1"); + savedParent.CreateChild("jenny", "jenny123", "passw0rd2"); + savedParent.CreateChild("jez", "jez123", "passw0rd3"); + await FlushSessionAndEvict(savedParent); + + Parent parent = (await linqRepository.GetAsync(_parentId))!; + parent.Children.Count.Should().Be(3); + + parent.Children[0].Name.Should().Be("jim"); + parent.Children[1].Name.Should().Be("jenny"); + parent.Children[2].Name.Should().Be("jez"); + } + + [Fact] + public async Task Should_be_able_to_create_and_retrieve_Parent() + { + Parent parent = (await new LinqRepository(TransactionManager).GetAsync(_parentId))!; + parent.Should().NotBeNull(); + parent.Name.Should().Be("Mike Hadlow"); + parent.UserName.Should().Be("mike@yahoo.com"); + parent.Children.Should().NotBeNull(); + } + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Model/PaymentSchedulingQueryTests.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Model/PaymentSchedulingQueryTests.cs new file mode 100644 index 000000000..ded018961 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Model/PaymentSchedulingQueryTests.cs @@ -0,0 +1,70 @@ +namespace Suteki.TardisBank.Tests.Model +{ + using System; + using System.Collections.Generic; + using System.Linq; + using System.Threading; + using System.Threading.Tasks; + using Domain; + using FluentAssertions; + using NHibernate.Linq; + using SharpArch.Testing.Xunit.NHibernate; + using Tasks; + using Xunit; + + + public class PaymentSchedulingQueryTests : TransientDatabaseTests + { + Parent _parent = null!; + + DateTime _someDate; + + public PaymentSchedulingQueryTests(TransientDatabaseSetup dbSetup) + : base(dbSetup) + { + } + + protected override async Task LoadTestData(CancellationToken cancellationToken) + { + _parent = new Parent("parent", "parent", "xxx"); + await Session.SaveAsync(_parent, cancellationToken); + _someDate = new DateTime(2010, 4, 5); + await Session.SaveAsync(CreateChildWithSchedule("one", 1M, _someDate.AddDays(-2)), cancellationToken).ConfigureAwait(false); + await Session.SaveAsync(CreateChildWithSchedule("two", 2M, _someDate.AddDays(-1)), cancellationToken).ConfigureAwait(false); + await Session.SaveAsync(CreateChildWithSchedule("three", 3M, _someDate), cancellationToken).ConfigureAwait(false); + await Session.SaveAsync(CreateChildWithSchedule("four", 4M, _someDate.AddDays(1)), cancellationToken).ConfigureAwait(false); + await Session.SaveAsync(CreateChildWithSchedule("five", 5M, _someDate.AddDays(2)), cancellationToken).ConfigureAwait(false); + await Session.FlushAsync(cancellationToken).ConfigureAwait(false); + } + + Child CreateChildWithSchedule(string name, decimal amount, DateTime startDate) + { + Child child = _parent.CreateChild(name, name, "xxx"); + child.Account.AddPaymentSchedule(startDate, Interval.Week, amount, "Pocket Money"); + return child; + } + + [Fact] + public async Task Should_be_able_to_query_all_pending_scheduled_payments() + { + ISchedulerService schedulerService = new SchedulerService(Session); + schedulerService.ExecuteUpdates(_someDate); + await Session.FlushAsync(); + + // check results + + List results = await Session.Query().ToListAsync(); + + results.Should().HaveCount(5); + + results.Single(x => x.Name == "one").Account.PaymentSchedules[0].NextRun.Should().Be(_someDate.AddDays(5)); + results.Single(x => x.Name == "two").Account.PaymentSchedules[0].NextRun.Should().Be(_someDate.AddDays(6)); + results.Single(x => x.Name == "three").Account.PaymentSchedules[0].NextRun.Should().Be(_someDate.AddDays(7)); + results.Single(x => x.Name == "four").Account.PaymentSchedules[0].NextRun.Should().Be(_someDate.AddDays(1)); + results.Single(x => x.Name == "five").Account.PaymentSchedules[0].NextRun.Should().Be(_someDate.AddDays(2)); + + results.Single(x => x.Name == "one").Account.Transactions.Count.Should().Be(1); + results.Single(x => x.Name == "one").Account.Transactions[0].Amount.Should().Be(1M); + } + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Model/PaymentSchedulingTests.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Model/PaymentSchedulingTests.cs new file mode 100644 index 000000000..e7a7eca99 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Model/PaymentSchedulingTests.cs @@ -0,0 +1,75 @@ +namespace Suteki.TardisBank.Tests.Model +{ + using System; + using Domain; + using FluentAssertions; + using Humanizer; + using Xunit; + + + public class PaymentSchedulingTests + { + const Interval Interval = Domain.Interval.Week; + const decimal Amount = 2.00M; + const string Description = "Weekly Pocket Money"; + readonly DateTime _startDate = new DateTime(2010, 10, 28); + + readonly Child _child; + + public PaymentSchedulingTests() + { + _child = new Parent("Dad", "mike@mike.com", "xxx") + .CreateChild("Leo", @"leohadlow", "yyy"); + } + + [Fact] + public void Should_be_able_to_add_a_schedule_to_an_account() + { + _child.Account.AddPaymentSchedule(_startDate, Interval, Amount, Description); + + _child.Account.PaymentSchedules.Count.Should().Be(1); + _child.Account.PaymentSchedules[0].NextRun.Should().Be(_startDate); + _child.Account.PaymentSchedules[0].Interval.Should().Be(Interval); + _child.Account.PaymentSchedules[0].Amount.Should().Be(Amount); + _child.Account.PaymentSchedules[0].Description.Should().Be(Description); + _child.Account.PaymentSchedules[0].Id.Should().Be(0); + } + + [Fact] + public void Should_be_able_to_remove_a_payment_schedule() + { + _child.Account.AddPaymentSchedule(_startDate, Interval, Amount, Description); + + var id = _child.Account.PaymentSchedules[0].Id; + _child.Account.RemovePaymentSchedule(id); + + _child.Account.PaymentSchedules.Count.Should().Be(0); + } + + [Fact] + public void Should_be_able_to_trigger_the_payment() + { + _child.Account.AddPaymentSchedule(_startDate, Interval, Amount, Description); + + _child.Account.TriggerScheduledPayments(_startDate); + + _child.Account.Transactions.Count.Should().Be(1); + _child.Account.Transactions[0].Amount.Should().Be(Amount); + _child.Account.Transactions[0].Description.Should().Be(Description); + _child.Account.Transactions[0].Date.Should().Be(DateTime.Now.Date); + + var expectedNextRun = _startDate + 1.Weeks(); + _child.Account.PaymentSchedules[0].NextRun.Should().Be(expectedNextRun); + } + + [Fact] + public void Triggering_payment_before_next_run_causes_nothing_to_happen() + { + _child.Account.AddPaymentSchedule(_startDate, Interval, Amount, Description); + _child.Account.TriggerScheduledPayments(_startDate.AddMinutes(-1)); + + _child.Account.Transactions.Count.Should().Be(0); + _child.Account.PaymentSchedules[0].NextRun.Should().Be(_startDate); + } + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Model/TransactionCountLimitTests.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Model/TransactionCountLimitTests.cs new file mode 100644 index 000000000..d6861cfb8 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Model/TransactionCountLimitTests.cs @@ -0,0 +1,48 @@ +namespace Suteki.TardisBank.Tests.Model +{ + using System.Linq; + using Domain; + using FluentAssertions; + using Xunit; + + + public class TransactionCountLimitTests + { + readonly Child _child; + + public TransactionCountLimitTests() + { + _child = new Parent("Mike", "mike@mike.com", "xxx").CreateChild("Leo", "leo2", "yyy"); + } + + [Fact] + public void When_more_than_max_transactions_created_transactions_should_be_truncated() + { + for (int i = 0; i < Account.MaxTransactions; i++) + { + _child.ReceivePayment(1M, "payment" + i); + } + + _child.Account.Balance.Should().Be(100M); + _child.Account.Transactions.Count.Should().Be(Account.MaxTransactions); + + _child.ReceivePayment(2M, "payment_new"); + + _child.Account.Balance.Should().Be(102M); + _child.Account.Transactions.Count.Should().Be(Account.MaxTransactions); + _child.Account.OldTransactionsBalance.Should().Be(1M); + + _child.Account.Transactions.First().Description.Should().Be("payment1"); + _child.Account.Transactions.Last().Description.Should().Be("payment_new"); + + _child.ReceivePayment(3.55M, "payment_new2"); + + _child.Account.Balance.Should().Be(105.55M); + _child.Account.Transactions.Count.Should().Be(Account.MaxTransactions); + _child.Account.OldTransactionsBalance.Should().Be(2M); + + _child.Account.Transactions.First().Description.Should().Be("payment2"); + _child.Account.Transactions.Last().Description.Should().Be("payment_new2"); + } + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Model/TransientDatabaseSetup.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Model/TransientDatabaseSetup.cs new file mode 100644 index 000000000..32062db7d --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Model/TransientDatabaseSetup.cs @@ -0,0 +1,18 @@ +namespace Suteki.TardisBank.Tests.Model +{ + using Infrastructure.NHibernateMaps; + using SharpArch.Testing.NHibernate; + + + public class TransientDatabaseSetup : TestDatabaseSetup + { + /// + public TransientDatabaseSetup() + : base(typeof(TransientDatabaseSetup).Assembly, typeof(AutoPersistenceModelGenerator), new[] + { + typeof(AutoPersistenceModelGenerator).Assembly + }) + { + } + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Model/UserActivationTests.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Model/UserActivationTests.cs new file mode 100644 index 000000000..037451738 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Model/UserActivationTests.cs @@ -0,0 +1,46 @@ +namespace Suteki.TardisBank.Tests.Model +{ + using System.Threading; + using Domain; + using Domain.Events; + using FluentAssertions; + using MediatR; + using Moq; + using Xunit; + + + public class UserActivationTests + { + readonly Mock _mediator; + + public UserActivationTests() + { + _mediator = new Mock(); + } + + [Fact] + public void Child_should_be_active_when_created() + { + User child = new Parent("Dad", "Mike@mike.com", "xxx").CreateChild("Leo", "leoahdlow", "bbb"); + child.IsActive.Should().BeTrue(); + } + + [Fact] + public void Parent_should_raise_an_event_when_created() + { + var parent = new Parent("Dad", "mike@mike.com", "xxx"); + parent.Initialise(_mediator.Object); + + _mediator.Verify(m => m.Publish(It.Is((INotification ev) => + ev is NewParentCreatedEvent && ((NewParentCreatedEvent) ev).Parent == parent), + default(CancellationToken)), Times.Once()); + } + + [Fact] + public void ParentShouldNotBeActiveWhenCreated() + { + User parent = new Parent("Dad", "mike@mike.com", "xxx"); + parent.IsActive.Should().BeFalse(); + } + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Model/UserTests.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Model/UserTests.cs new file mode 100644 index 000000000..01bf72407 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Model/UserTests.cs @@ -0,0 +1,52 @@ +namespace Suteki.TardisBank.Tests.Model +{ + using System.Linq; + using System.Threading; + using System.Threading.Tasks; + using Domain; + using FluentAssertions; + using SharpArch.Testing.Xunit.NHibernate; + using Xunit; + + + public class UserTests : TransientDatabaseTests + { + public UserTests(TransientDatabaseSetup dbSetup) + : base(dbSetup) + { + } + + protected override async Task LoadTestData(CancellationToken cancellationToken) + { + var mike = new Parent("Mike Hadlow", "mike@yahoo.com", "yyy"); + await Session.SaveAsync(mike, cancellationToken); + + Child leo = mike.CreateChild("Leo", "leohadlow", "xxx"); + Child yuna = mike.CreateChild("Yuna", "yunahadlow", "xxx"); + await Session.SaveAsync(leo, cancellationToken); + await Session.SaveAsync(yuna, cancellationToken); + + var john = new Parent("John Robinson", "john@gmail.com", "yyy"); + await Session.SaveAsync(john, cancellationToken); + + Child jim = john.CreateChild("Jim", "jimrobinson", "xxx"); + await Session.SaveAsync(jim, cancellationToken); + + await Session.FlushAsync(cancellationToken).ConfigureAwait(false); + } + + [Fact] + public void Should_be_able_to_treat_Parents_and_Children_Polymorphically() + { + User[] users = Session.Query().ToArray(); + + users.Length.Should().Be(5); + + users[0].Should().BeOfType(); + users[1].GetType().Name.Should().Be("Child"); + users[2].GetType().Name.Should().Be("Child"); + users[3].GetType().Name.Should().Be("Parent"); + users[4].GetType().Name.Should().Be("Child"); + } + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Model/WithdrawlCashTests.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Model/WithdrawlCashTests.cs new file mode 100644 index 000000000..0fdd8ec9c --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Model/WithdrawlCashTests.cs @@ -0,0 +1,79 @@ +namespace Suteki.TardisBank.Tests.Model +{ + using System; + using System.Threading; + using Domain; + using FluentAssertions; + using MediatR; + using Moq; + using SharpArch.Testing.Xunit; + using Xunit; + + + public class WithdrawlCashTests + { + public WithdrawlCashTests() + { + _mediator = new Mock(); + + _parent = new Parent("Dad", "mike@mike.com", "xxx"); + _child = _parent.CreateChild("Leo", "leohadlow", "yyy"); + _parent.MakePaymentTo(_child, 10.00M); + + _somebodyElsesParent = new Parent("Not Dad", "jon@jon.com", "zzz"); + } + + readonly Parent _parent; + readonly Child _child; + readonly Parent _somebodyElsesParent; + readonly Mock _mediator; + + [Fact] + public void Child_shold_not_be_able_to_withdraw_from_some_other_parent() + { + Action withdraw = () => _child.WithdrawCashFromParent(_somebodyElsesParent, 2.30M, "for toys", _mediator.Object); + withdraw.Should().Throw().WithMessage("Not Your Parent"); + } + + + [Fact] + [SetCulture("en-GB")] + public void Child_should_be_able_to_withdraw_cash() + { + + + _child.WithdrawCashFromParent(_parent, 2.30M, "For Toys", _mediator.Object); + + _child.Account.Balance.Should().Be(7.70M); + _child.Account.Transactions[1].Amount.Should().Be(-2.30M); + _child.Account.Transactions[1].Description.Should().Be("For Toys"); + + _parent.Messages.Count.Should().Be(1); + _parent.Messages[0].Text.Should().Be("Leo would like to withdraw \u00A32.30"); + } + + + [Fact] + [SetCulture("en-GB")] + public void Child_should_not_be_able_to_withdraw_more_than_their_balance() + { + Action withdraw = () => _child.WithdrawCashFromParent(_parent, 12.11M, "For Toys", _mediator.Object); + withdraw.Should().Throw() + .WithMessage("You can not withdraw \u00A312.11 because you only have \u00A310.00 in your account"); + } + + + [Fact] + [SetCulture("en-GB")] + public void Should_raise_a_SendMessageEvent() + { + _child.WithdrawCashFromParent(_parent, 2.30M, "For Toys", _mediator.Object); + + _mediator.Verify(m => m.Publish( + It.Is((Domain.Events.SendMessageEvent ev) => + ev.User == _parent && ev.Message == "Leo would like to withdraw \u00A32.30"), + default(CancellationToken) + ), Times.Once()); + } + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Services/EmailServiceTests.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Services/EmailServiceTests.cs new file mode 100644 index 000000000..727022d70 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Services/EmailServiceTests.cs @@ -0,0 +1,41 @@ +// see this blog post for sending emails by gmail/google apps +// http://mikehadlow.blogspot.com/2010/08/how-to-send-email-via-gmail-using-net.html + +// ReSharper disable PublicMembersMustHaveComments + +namespace Suteki.TardisBank.Tests.Services +{ + using Tasks; + using Xunit; + + + public class EmailServiceTests + { + readonly IEmailService _emailService; + + public EmailServiceTests() + { + var configuration = new TardisConfiguration + { + EmailSmtpServer = "smtp.gmail.com", + EmailPort = 587, + EmailEnableSsl = true, + EmailFromAddress = "info@tardisbank.com", + EmailCredentialsUserName = "____", + EmailCredentialsPassword = "____" + }; + + _emailService = new EmailService(configuration); + } + + [Fact(Skip = "You should setup the configuration above. This test really does send an email!")] + public void Should_be_able_to_send_an_email() + { + const string toAddress = "mike@suteki.co.uk"; + const string subject = "Hello From Tardis Bank!"; + const string body = "This is a body http://tardisbank.com/"; + + _emailService.SendEmail(toAddress, subject, body); + } + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Suteki.TardisBank.Data/NHibernateMaps/MappingIntegrationTests.cs b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Suteki.TardisBank.Data/NHibernateMaps/MappingIntegrationTests.cs new file mode 100644 index 000000000..224132fe4 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Suteki.TardisBank.Data/NHibernateMaps/MappingIntegrationTests.cs @@ -0,0 +1,94 @@ +namespace Suteki.TardisBank.Tests.Suteki.TardisBank.Data.NHibernateMaps +{ + using System; + using System.Data.SqlClient; + using System.IO; + using Domain; + using Helpers; + using Infrastructure.NHibernateMaps; + using NHibernate; + using NHibernate.Cfg; + using NHibernate.Tool.hbm2ddl; + using SharpArch.NHibernate; + using Xunit; + using Environment = System.Environment; + + + /// + /// Provides a means to verify that the target database is in compliance with all mappings. + /// Taken from http://ayende.com/Blog/archive/2006/08/09/NHibernateMappingCreatingSanityChecks.aspx. + /// If this is failing, the error will likely inform you that there is a missing table or column + /// which needs to be added to your database. + /// + [Trait("Category", "DatabaseTests")] + [Trait("Category", "IntegrationTests")] + public class MappingIntegrationTests : IDisposable + { + readonly Configuration _configuration; + readonly ISessionFactory _sessionFactory; + readonly ISession _session; + + public MappingIntegrationTests() + { + var nhibernateConfigPath = CalculatePath("../../../../Suteki.TardisBank.WebApi/NHibernate.config"); + _configuration = new NHibernateSessionFactoryBuilder() + .AddMappingAssemblies(new[] {typeof(Child).Assembly}) + .UseAutoPersistenceModel(new AutoPersistenceModelGenerator().Generate()) + .UseConfigFile(nhibernateConfigPath) + .BuildConfiguration(); + _sessionFactory = _configuration.BuildSessionFactory(); + _session = _sessionFactory.OpenSession(); + } + + + /// + public void Dispose() + { + _sessionFactory?.Dispose(); + } + + /// + /// Calculates path based on test assembly folder + /// + /// The path. + /// + static string CalculatePath(string path) + { + return Path.Combine(".", path); + } + + [Fact] + public void CanConfirmDatabaseMatchesMappings() + { + var allClassMetadata = _sessionFactory.GetAllClassMetadata(); + + foreach (var entry in allClassMetadata) + { + _session.CreateCriteria(entry.Value.MappedClass) + .SetMaxResults(0).List(); + } + } + + /// + /// Creates/Updates database schema, this runs on database configured in + /// Mvc project and is marked as Explicit because it changes the database. + /// + [RunnableInDebugOnly] + public void CanCreateDatabase() + { + new SchemaExport(_configuration).Execute(false, true, false); + } + + /// + /// Generates and outputs the database schema SQL to the console + /// + [Fact] + public void CanGenerateDatabaseSchema() + { + using (TextWriter stringWriter = new StreamWriter(CalculatePath("../../../../../Database/UnitTestGeneratedSchema.sql"))) + { + new SchemaExport(_configuration).Execute(true, false, false, _session.Connection, stringWriter); + } + } + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Suteki.TardisBank.Tests.csproj b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Suteki.TardisBank.Tests.csproj new file mode 100644 index 000000000..1e3ad17f9 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.Tests/Suteki.TardisBank.Tests.csproj @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PreserveNewest + + + + diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.WebApi/Controllers/AnnouncementsController.cs b/Samples/TardisBank/Src/Suteki.TardisBank.WebApi/Controllers/AnnouncementsController.cs new file mode 100644 index 000000000..2969fe17b --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.WebApi/Controllers/AnnouncementsController.cs @@ -0,0 +1,111 @@ +#pragma warning disable 1573 +namespace Suteki.TardisBank.WebApi.Controllers +{ + using System; + using System.Collections.Generic; + using System.Data; + using System.Linq; + using System.Threading.Tasks; + using Api.Announcements; + using AutoMapper; + using AutoMapper.QueryableExtensions; + using Domain; + using JetBrains.Annotations; + using Microsoft.AspNetCore.Mvc; + using Microsoft.AspNetCore.Routing; + using NHibernate.Linq; + using SharpArch.Domain.PersistenceSupport; + using SharpArch.Web.AspNetCore.Transaction; + + + [ApiController] + [Route("[controller]")] + [Transaction(IsolationLevel.ReadCommitted)] + public class AnnouncementsController : ControllerBase + { + readonly ILinqRepository _announcementRepository; + readonly LinkGenerator _linkGenerator; + readonly IMapper _mapper; + + /// + /// Creates AnnouncementController. + /// + /// Announcements repository. + /// Mapper + public AnnouncementsController(ILinqRepository announcementRepository, + LinkGenerator linkGenerator, + IMapper mapper) + { + _announcementRepository = announcementRepository ?? throw new ArgumentNullException(nameof(announcementRepository)); + _linkGenerator = linkGenerator ?? throw new ArgumentNullException(nameof(linkGenerator)); + _mapper = mapper ?? throw new ArgumentNullException(nameof(mapper)); + } + + /// + /// Retrieves announcements. + /// + /// Announcement sorted by date (desc). + public async Task>> Get() + { + var res = await _announcementRepository.FindAll().WithOptions(x => { x.SetCacheable(true); }) + .OrderByDescending(a => a.Date) + .ProjectTo(_mapper.ConfigurationProvider) + .ToListAsync(HttpContext.RequestAborted).ConfigureAwait(false); + return res; + } + + /// + /// Retrieves announcement by Id. + /// + /// Id. + /// + /// Announcement data. + /// + [HttpGet] + [Route("{id}", Name = "GetAnnouncement")] + public async Task> Get(int id) + { + var announcement = await _announcementRepository.GetAsync(id).ConfigureAwait(false); + if (announcement != null) return _mapper.Map(announcement); + return NotFound(new {id}); + } + + [HttpPost] + public async Task Post(NewAnnouncement model) + { + var announcement = _mapper.Map(model); + await _announcementRepository.SaveAsync(announcement, HttpContext.RequestAborted).ConfigureAwait(false); + var location = _linkGenerator.GetPathByName("GetAnnouncement", new {id = announcement.Id}); + return Created(location!, announcement); + } + + /// + /// Removes announcement. + /// + /// Announcement Id. + /// OK + [HttpDelete] + [Route("{id}")] + public async Task Delete(int id) + { + await _announcementRepository.DeleteAsync(id, HttpContext.RequestAborted).ConfigureAwait(false); + return NoContent(); + } + + /// + /// Retrieves last 10 announcements. + /// + /// Announcement, newest first. + [HttpGet] + [Route("latest")] + public async Task>> Latest() + { + var res = await _announcementRepository.FindAll() + .OrderByDescending(a => a.Date) + .Take(10) + .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(HttpContext.RequestAborted) + .ConfigureAwait(false); + return res; + } + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.WebApi/NHibernate.config b/Samples/TardisBank/Src/Suteki.TardisBank.WebApi/NHibernate.config new file mode 100644 index 000000000..995184d2f --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.WebApi/NHibernate.config @@ -0,0 +1,22 @@ + + + + Data Source=localhost,2433;Initial Catalog=TardisBank;Integrated Security=False;User ID=sa;Password=Password12!;Application Name=Suteki.TardisBank;Encrypt=false; + NHibernate.Dialect.MsSql2012Dialect + NHibernate.Connection.DriverConnectionProvider + NHibernate.Driver.MicrosoftDataSqlClientDriver + true + auto + 500 + + + update + + + + + + diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.WebApi/Program.cs b/Samples/TardisBank/Src/Suteki.TardisBank.WebApi/Program.cs new file mode 100644 index 000000000..c480628dd --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.WebApi/Program.cs @@ -0,0 +1,80 @@ +namespace Suteki.TardisBank.WebApi +{ + using System; + using System.IO; + using Autofac.Extensions.DependencyInjection; + using Microsoft.AspNetCore.Hosting; + using Microsoft.Extensions.Configuration; + using Serilog; + using Serilog.Events; + using Serilog.Exceptions; + using Serilog.Formatting.Json; + using Serilog.Sinks.SystemConsole.Themes; + using Microsoft.Extensions.Hosting; + + + public class Program + { + public static int Main(string[] args) + { + try + { + CreateHostBuilder(args) + .Build() + .Run(); + return 0; + } + catch (Exception ex) + { + Log.Logger?.ForContext().Fatal(ex, "Unhandled exception"); + return 1; + } + finally + { + Log.CloseAndFlush(); + } + } + + public static IWebHostBuilder CreateHostBuilder(string[] args) + { + return new WebHostBuilder() + .UseSerilog((hostingContext, loggerConfiguration) => + { + var env = hostingContext.HostingEnvironment; + loggerConfiguration + .Enrich.FromLogContext() + .Enrich.WithExceptionDetails() + .MinimumLevel.Information() + .MinimumLevel.Override("Microsoft", LogEventLevel.Warning) + .MinimumLevel.Override("System", LogEventLevel.Warning) + ; + + if (env.IsDevelopment()) + loggerConfiguration + .MinimumLevel.Verbose() + .MinimumLevel.Override("Microsoft", LogEventLevel.Information) + .MinimumLevel.Override("System", LogEventLevel.Information) + .WriteTo.Console(theme: AnsiConsoleTheme.Code) + ; + else + loggerConfiguration + .WriteTo.Console(new JsonFormatter(), LogEventLevel.Information) + ; +#if DEBUG + loggerConfiguration.WriteTo.Seq("http://localhost:5341"); +#endif + }) + .UseKestrel() + .ConfigureServices(services => services.AddAutofac()) + .UseContentRoot(Directory.GetCurrentDirectory()) + .ConfigureAppConfiguration((hostingContext, appConfig) => + { + var envName = hostingContext.HostingEnvironment.EnvironmentName; + appConfig.AddJsonFile("appsettings.json", false, false) + .AddJsonFile($"appsettings.{envName}.json", true, false); + appConfig.AddEnvironmentVariables(); + }) + .UseStartup(); + } + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.WebApi/Startup.cs b/Samples/TardisBank/Src/Suteki.TardisBank.WebApi/Startup.cs new file mode 100644 index 000000000..2f156410a --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.WebApi/Startup.cs @@ -0,0 +1,98 @@ +// ReSharper disable InconsistentLogPropertyNaming + +namespace Suteki.TardisBank.WebApi +{ + using Autofac; + using AutoMapper; + using Domain; + using Infrastructure.Configuration; + using Infrastructure.NHibernateMaps; + using Microsoft.AspNetCore.Builder; + using Microsoft.AspNetCore.Http; + using Microsoft.Extensions.Configuration; + using Microsoft.Extensions.DependencyInjection; + using Serilog; + using SharpArch.Domain.PersistenceSupport; + using SharpArch.NHibernate; + using SharpArch.NHibernate.Extensions.DependencyInjection; + using SharpArch.Web.AspNetCore.Transaction; + + + public class Startup + { + static readonly ILogger _logger = Log.ForContext(); + + public IConfiguration Configuration { get; } + + public Startup(IConfiguration configuration) + { + Configuration = configuration; + } + + /// + /// This method gets called by the runtime. Use this method to add services to the container. + /// + /// + public void ConfigureServices(IServiceCollection services) + { + services.AddControllers(options => { options.Filters.Add(new AutoTransactionHandler()); }) + .AddNewtonsoftJson(); + + services.AddNHibernateWithSingleDatabase(sp => + { + return new NHibernateSessionFactoryBuilder() + .AddMappingAssemblies(new[] {typeof(Child).Assembly}) + .UseAutoPersistenceModel(new AutoPersistenceModelGenerator().Generate()) + .UseConfigFile(@"NHibernate.config"); + }); + + services.AddAutoMapper(typeof(AnnouncementMappingProfile)); + + services.AddMemoryCache(); + } + + /// + /// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + /// + /// + public void Configure(IApplicationBuilder app) + { + app.UseRouting(); + app.UseAuthorization(); + app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); + } + + /// + /// Configure Autofac container. + /// This method is automatically called by Autofac MVC integration package. + /// + /// + public void ConfigureContainer(ContainerBuilder builder) + { + // register dependencies + builder.RegisterType() + .As() + .SingleInstance(); + + builder.RegisterAssemblyTypes(typeof(AccountMap).Assembly) + .AsClosedTypesOf(typeof(IRepository<,>)) +#if DEBUG + .Where(t => + { + var x = t.IsClosedTypeOf(typeof(IRepository<,>)); + _logger.Information("{type}, register: {register}", t, x); + return x; + }) +#endif + .AsImplementedInterfaces() + .InstancePerLifetimeScope(); + + builder.RegisterGeneric(typeof(NHibernateRepository<,>)) + .AsImplementedInterfaces() + .InstancePerLifetimeScope(); + builder.RegisterGeneric(typeof(LinqRepository<,>)) + .AsImplementedInterfaces() + .InstancePerLifetimeScope(); + } + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.WebApi/Suteki.TardisBank.WebApi.csproj b/Samples/TardisBank/Src/Suteki.TardisBank.WebApi/Suteki.TardisBank.WebApi.csproj new file mode 100644 index 000000000..50ec0b360 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.WebApi/Suteki.TardisBank.WebApi.csproj @@ -0,0 +1,45 @@ + + + + $(AppTargetFrameworks) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.WebApi/appsettings.Development.json b/Samples/TardisBank/Src/Suteki.TardisBank.WebApi/appsettings.Development.json new file mode 100644 index 000000000..8983e0fc1 --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.WebApi/appsettings.Development.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + } + } +} diff --git a/Samples/TardisBank/Src/Suteki.TardisBank.WebApi/appsettings.json b/Samples/TardisBank/Src/Suteki.TardisBank.WebApi/appsettings.json new file mode 100644 index 000000000..d9d9a9bff --- /dev/null +++ b/Samples/TardisBank/Src/Suteki.TardisBank.WebApi/appsettings.json @@ -0,0 +1,10 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + } + }, + "AllowedHosts": "*" +} diff --git a/Samples/TardisBank/StyleCopCompatibleResharperCodeStyle.xml b/Samples/TardisBank/StyleCopCompatibleResharperCodeStyle.xml new file mode 100644 index 000000000..f654899e5 --- /dev/null +++ b/Samples/TardisBank/StyleCopCompatibleResharperCodeStyle.xml @@ -0,0 +1,374 @@ + + + + False + 1 + 1 + 1 + SEPARATE + ALWAYS_ADD + ALWAYS_ADD + ALWAYS_ADD + ALWAYS_ADD + False + False + 1 + 1 + False + + public + protected + internal + private + new + abstract + virtual + override + sealed + static + readonly + extern + unsafe + volatile + + False + False + False + False + True + ALWAYS_USE + ON_SINGLE_LINE + False + True + False + False + True + False + True + True + CHOP_IF_LONG + True + CHOP_IF_LONG + CHOP_IF_LONG + + + True + True + + + $object$_On$event$ + $event$Handler + + + True + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + + + + $object$_On$event$ + $event$Handler + + + + + + + + + + + + + + $object$_On$event$ + $event$Handler + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Samples/TransactionAttribute/App/Controllers/GlobalController.cs b/Samples/TransactionAttribute/App/Controllers/GlobalController.cs new file mode 100644 index 000000000..4f99ddd0d --- /dev/null +++ b/Samples/TransactionAttribute/App/Controllers/GlobalController.cs @@ -0,0 +1,22 @@ +namespace TransactionAttribute.WebApi.Controllers +{ + using Microsoft.AspNetCore.Mvc; + using Serilog; + + + [Route("api/[controller]")] + [ApiController] + public class GlobalController : ControllerBase + { + /// + /// Uses global default isolation level + /// + /// + [HttpGet("default")] + public ActionResult Default() + { + Log.Information("default"); + return "ok"; + } + } +} diff --git a/Samples/TransactionAttribute/App/Controllers/OverridesController.cs b/Samples/TransactionAttribute/App/Controllers/OverridesController.cs new file mode 100644 index 000000000..e0b210989 --- /dev/null +++ b/Samples/TransactionAttribute/App/Controllers/OverridesController.cs @@ -0,0 +1,52 @@ +namespace TransactionAttribute.WebApi.Controllers +{ + using System; + using System.Data; + using System.Threading.Tasks; + using Microsoft.AspNetCore.Mvc; + using Serilog; + using SharpArch.Web.AspNetCore.Transaction; + + + [Route("api/[controller]")] + [ApiController] + [Transaction(IsolationLevel.ReadCommitted)] + public class OverridesController : ControllerBase + { + private static readonly ILogger Log = Serilog.Log.ForContext(); + + /// + /// Action-level override. + /// + /// + [HttpGet("local")] + [Transaction(IsolationLevel.ReadUncommitted)] + public ActionResult LocalOverride() + { + Log.Information("local-override"); + return "ok"; + } + + [HttpGet("invalid-model")] + public ActionResult InvalidModel() + { + ModelState.AddModelError("*", "Forced validation error."); + Log.Information("invalid model"); + return BadRequest("forced model validation error"); + } + + [HttpGet("controller")] + public ActionResult ControllerLevel() + { + Log.Information("controller-level"); + return "ok"; + } + + [HttpGet("throw")] + public async Task Throw() + { + await Task.Delay(5).ConfigureAwait(false); + throw new InvalidOperationException("throw"); + } + } +} diff --git a/Samples/TransactionAttribute/App/Program.cs b/Samples/TransactionAttribute/App/Program.cs new file mode 100644 index 000000000..9ef7143a8 --- /dev/null +++ b/Samples/TransactionAttribute/App/Program.cs @@ -0,0 +1,83 @@ +namespace TransactionAttribute.WebApi +{ + + using Microsoft.Extensions.Hosting; + using Microsoft.AspNetCore.Hosting; + using System; + using System.IO; + using Autofac.Extensions.DependencyInjection; + using JetBrains.Annotations; + using Microsoft.Extensions.Configuration; + using Serilog; + using Serilog.Events; + using Serilog.Exceptions; + using Serilog.Formatting.Json; + using Serilog.Sinks.SystemConsole.Themes; + +#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member + [UsedImplicitly] + public class Program + { + public static int Main(string[] args) + { + try + { + CreateHostBuilder() + .Build() + .Run(); + return 0; + } + catch (Exception ex) + { + Log.Logger?.ForContext().Fatal(ex, "Unhandled exception"); + return 1; + } + finally + { + Log.CloseAndFlush(); + } + } + + + public static IWebHostBuilder CreateHostBuilder() + { + return new WebHostBuilder() + .UseSerilog((hostingContext, loggerConfiguration) => + { + var env = hostingContext.HostingEnvironment; + loggerConfiguration + .Enrich.FromLogContext() + .Enrich.WithExceptionDetails() + .MinimumLevel.Information() + .MinimumLevel.Override("Microsoft", LogEventLevel.Warning) + .MinimumLevel.Override("System", LogEventLevel.Warning) + ; + + if (env.IsDevelopment()) + loggerConfiguration + .MinimumLevel.Verbose() + .MinimumLevel.Override("Microsoft", LogEventLevel.Information) + .MinimumLevel.Override("System", LogEventLevel.Information) + .WriteTo.Console( theme: AnsiConsoleTheme.Code) + ; + else + loggerConfiguration + .WriteTo.Console(new JsonFormatter(), LogEventLevel.Information) + ; + }) + .UseKestrel() + .ConfigureServices(services => services.AddAutofac()) + .UseContentRoot(Directory.GetCurrentDirectory()) + .ConfigureAppConfiguration((hostingContext, appConfig) => + { + var envName = hostingContext.HostingEnvironment.EnvironmentName; + appConfig.AddJsonFile("appsettings.json", false, false) + .AddJsonFile($"appsettings.{envName}.json", true, false); + appConfig.AddEnvironmentVariables(); + }) + .UseIISIntegration() + .UseStartup(); + } + } +#pragma warning restore CS1591 // Missing XML comment for publicly visible type or member +} diff --git a/Samples/TransactionAttribute/App/Startup.cs b/Samples/TransactionAttribute/App/Startup.cs new file mode 100644 index 000000000..b4fec39f2 --- /dev/null +++ b/Samples/TransactionAttribute/App/Startup.cs @@ -0,0 +1,68 @@ +namespace TransactionAttribute.WebApi +{ + using System.Data; + using Autofac; + using Microsoft.AspNetCore.Builder; + using Microsoft.AspNetCore.Http; + using Microsoft.Extensions.Configuration; + using Microsoft.Extensions.DependencyInjection; + using SharpArch.Web.AspNetCore.Transaction; + using Stubs; + + + public class Startup + { + public IConfiguration Configuration { get; } + + public Startup(IConfiguration configuration) + { + Configuration = configuration; + } + + /// + /// This method gets called by the runtime. Use this method to add services to the container. + /// + /// + public void ConfigureServices(IServiceCollection services) + { + services.AddControllers(options => + { + options.Filters.Add(new AutoTransactionHandler()); + options.Filters.Add(new TransactionAttribute(isolationLevel: IsolationLevel.Chaos)); + }) + ; + + services.AddMemoryCache(); + } + + /// + /// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + /// + /// + public void Configure(IApplicationBuilder app) + { + app.UseRouting(); + app.UseAuthorization(); + app.UseEndpoints(endpoints => + { + endpoints.MapControllers(); + }); + } + + /// + /// Configure Autofac container. + /// This method is automatically called by Autofac MVC integration package. + /// + /// + public void ConfigureContainer(ContainerBuilder builder) + { + // register dependencies + builder.RegisterType() + .AsImplementedInterfaces() + .InstancePerLifetimeScope(); + builder.RegisterType() + .As() + .SingleInstance(); + } + } +} diff --git a/Samples/TransactionAttribute/App/Stubs/TransactionManagerStub.cs b/Samples/TransactionAttribute/App/Stubs/TransactionManagerStub.cs new file mode 100644 index 000000000..d65d55be0 --- /dev/null +++ b/Samples/TransactionAttribute/App/Stubs/TransactionManagerStub.cs @@ -0,0 +1,83 @@ +namespace TransactionAttribute.WebApi.Stubs +{ + using System; + using System.Data; + using System.Threading; + using System.Threading.Tasks; + using JetBrains.Annotations; + using Microsoft.AspNetCore.Http; + using Serilog; + using SharpArch.Domain.PersistenceSupport; + + + public class TransactionManagerStub : ITransactionManager, IDisposable, ISupportsTransactionStatus + { + public const string TransactionIsolationLevel = "x-transaction-isolation-level"; + public const string TransactionState = "x-transaction-result"; + static readonly ILogger _log = Log.ForContext(); + readonly IHttpContextAccessor _httpContextAccessor; + TransactionWrapper? _transaction; + + public TransactionManagerStub(IHttpContextAccessor httpContextAccessor) + { + _httpContextAccessor = httpContextAccessor ?? throw new ArgumentNullException(nameof(httpContextAccessor)); + } + + public void Dispose() + { + _transaction?.Dispose(); + } + + /// + public bool IsActive => true; + + public IDisposable BeginTransaction(IsolationLevel isolationLevel = IsolationLevel.ReadCommitted) + { + return _transaction ??= new TransactionWrapper(isolationLevel); + } + + public Task CommitTransactionAsync(CancellationToken cancellationToken) + { + _httpContextAccessor.HttpContext!.Response.Headers.Add(TransactionIsolationLevel, _transaction?.IsolationLevel.ToString() ?? "unknown"); + _httpContextAccessor.HttpContext.Response.Headers.Add(TransactionState, "committed"); + _transaction?.Commit(); + return Task.CompletedTask; + } + + public Task RollbackTransactionAsync(CancellationToken cancellationToken) + { + _httpContextAccessor.HttpContext!.Response.Headers.Add(TransactionIsolationLevel, _transaction?.IsolationLevel.ToString() ?? "unknown"); + _httpContextAccessor.HttpContext.Response.Headers.Add(TransactionState, "rolled-back"); + _transaction?.Dispose(); + return Task.CompletedTask; + } + + + class TransactionWrapper : IDisposable + { + static readonly ILogger _log = Log.ForContext(); + public IsolationLevel IsolationLevel { get; } + + public TransactionWrapper(IsolationLevel isolationLevel) + { + IsolationLevel = isolationLevel; + } + + public void Dispose() + { + _log.Information("Disposed {isolationLevel}", IsolationLevel); + } + + public void Commit() + { + _log.Information("Committed {isolationLevel}", IsolationLevel); + } + + public void Rollback() + { + _log.Information("Rolled back {isolationLevel}", IsolationLevel); + } + } + + } +} diff --git a/Samples/TransactionAttribute/App/TransactionAttribute.WebApi.csproj b/Samples/TransactionAttribute/App/TransactionAttribute.WebApi.csproj new file mode 100644 index 000000000..41cf0a3e9 --- /dev/null +++ b/Samples/TransactionAttribute/App/TransactionAttribute.WebApi.csproj @@ -0,0 +1,33 @@ + + + + $(AppTargetFrameworks) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Samples/TransactionAttribute/App/appsettings.Development.json b/Samples/TransactionAttribute/App/appsettings.Development.json new file mode 100644 index 000000000..2c63c0851 --- /dev/null +++ b/Samples/TransactionAttribute/App/appsettings.Development.json @@ -0,0 +1,2 @@ +{ +} diff --git a/Samples/TransactionAttribute/App/appsettings.json b/Samples/TransactionAttribute/App/appsettings.json new file mode 100644 index 000000000..4faf77acf --- /dev/null +++ b/Samples/TransactionAttribute/App/appsettings.json @@ -0,0 +1,3 @@ +{ + "AllowedHosts": "*" +} diff --git a/Samples/TransactionAttribute/Tests/Setup/TestServerSetup.cs b/Samples/TransactionAttribute/Tests/Setup/TestServerSetup.cs new file mode 100644 index 000000000..45c97d54d --- /dev/null +++ b/Samples/TransactionAttribute/Tests/Setup/TestServerSetup.cs @@ -0,0 +1,33 @@ +namespace TransactionAttribute.Tests.Setup +{ + using System; + using System.Net.Http; + using Microsoft.AspNetCore.Hosting; + using Microsoft.AspNetCore.TestHost; + using WebApi; + + + public class TestServerSetup : IDisposable + { + public HttpClient Client { get; } + public TestServer Server { get; } + + /// + public TestServerSetup() + { + Server = new TestServer(Program.CreateHostBuilder() + .UseStartup() + .UseContentRoot("../../../../App") + //.UseSolutionRelativeContentRoot("../Samples/SharpArch.WebApi/App/") + ); + Client = Server.CreateClient(); + } + + /// + public void Dispose() + { + Server?.Dispose(); + Client?.Dispose(); + } + } +} diff --git a/Samples/TransactionAttribute/Tests/TransactionAttribute.Tests.csproj b/Samples/TransactionAttribute/Tests/TransactionAttribute.Tests.csproj new file mode 100644 index 000000000..61bdcec6e --- /dev/null +++ b/Samples/TransactionAttribute/Tests/TransactionAttribute.Tests.csproj @@ -0,0 +1,37 @@ + + + + false + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers + + + + + + + + + + + + + + + + + + + + + diff --git a/Samples/TransactionAttribute/Tests/UnitOfWorkAttributeOverrideTests.cs b/Samples/TransactionAttribute/Tests/UnitOfWorkAttributeOverrideTests.cs new file mode 100644 index 000000000..c12a2da27 --- /dev/null +++ b/Samples/TransactionAttribute/Tests/UnitOfWorkAttributeOverrideTests.cs @@ -0,0 +1,51 @@ +namespace TransactionAttribute.Tests +{ + using System; + using System.Data; + using System.Net; + using System.Net.Http; + using System.Threading.Tasks; + using FluentAssertions; + using JetBrains.Annotations; + using Setup; + using WebApi.Stubs; + using Xunit; + + + public class UnitOfWorkAttributeOverrideTests : IClassFixture + { + readonly TestServerSetup _setup; + + public UnitOfWorkAttributeOverrideTests(TestServerSetup setup) + { + if (setup == null) throw new ArgumentNullException(nameof(setup)); + _setup = setup ?? throw new ArgumentNullException(nameof(setup)); + } + + [Theory] + [InlineData("api/overrides/local", HttpStatusCode.OK, + nameof(IsolationLevel.ReadUncommitted), "committed")] + [InlineData("api/overrides/invalid-model", HttpStatusCode.BadRequest, + nameof(IsolationLevel.ReadCommitted), "rolled-back")] + [InlineData("api/overrides/controller", HttpStatusCode.OK, + nameof(IsolationLevel.ReadCommitted), "committed")] + [InlineData("api/global/default", HttpStatusCode.OK, + nameof(IsolationLevel.Chaos), "committed")] + public async Task CanUseLocalOverride(string method, HttpStatusCode statusCode, string isolationLevel, string transactionState) + { + using (var response = await GetAsync(method)) + { + response.StatusCode.Should().Be(statusCode); + response.Headers.GetValues(TransactionManagerStub.TransactionIsolationLevel) + .Should().Contain(isolationLevel); + response.Headers.GetValues(TransactionManagerStub.TransactionState) + .Should().Contain(transactionState); + } + } + + Task GetAsync(string relativePath) + { + return _setup.Client.GetAsync(new Uri(_setup.Client.BaseAddress!, relativePath)); + } + } +} diff --git a/Samples/_placeholder.txt b/Samples/_placeholder.txt new file mode 100644 index 000000000..e69de29bb diff --git a/Samples/old/TardisBank/.gitignore b/Samples/old/TardisBank/.gitignore new file mode 100644 index 000000000..d9163e03b --- /dev/null +++ b/Samples/old/TardisBank/.gitignore @@ -0,0 +1,26 @@ +Drops +[Oo]bj +[Bb]in +debug +_Resharper.* +_ReSharper.* +*.csproj.user +*.resharper.user +*.ReSharper.user +*.resharper +*.ReSharper +*.suo +*.cache +*~ +*.swp +*.dbproj.user +*.dbmdl +error-*.xml +*_mm_cache.bin +*.dotCover +StyleCop.Cache +SpecificationReports +NugetWorkspace +[Pp]ackages +[Ll]ogs +*.DotSettings.user \ No newline at end of file diff --git a/Samples/old/TardisBank/README b/Samples/old/TardisBank/README new file mode 100644 index 000000000..78b367e66 --- /dev/null +++ b/Samples/old/TardisBank/README @@ -0,0 +1,47 @@ +-------------------------------------------- +-- 2.0 Release Candidate +-------------------------------------------- + +This is a release candidate, use at your own risk. Please switch to the 1.9.6.0 for production releases: + +$ git checkout 1.9.6.0 + +-------------------------------------------- +-- Templify +-------------------------------------------- + +We no longer support the use of the Visual Studio templates for installation of S#arp Architecture. With version 2.0, we have dropped support for Visual Studio 2008 altogether. To learn how to get a S#arp Architecture solution up and running, please go to http://blog.sharparchitecture.net/post/Using-Templify-to-create-a-new-Sarp-Architecture-solution.aspx + +-------------------------------------------- +-- Building S#arp Architecture +-------------------------------------------- + +Perform the following command in GitBash: + +$ git clone git@github.com:sharparchitecture/Sharp-Architecture.git +$ git submodule init +$ git submodule update + +Now you should have the latest development branch of SA 2.0 and submodules. + +-------------------------------------------- +-- Building S#arp Architecture +-------------------------------------------- + +* /docs/: Contains a link to comprehensive, online documentation at http://wiki.sharparchitecture.net/, and a diagram of what a S#arp Architecture project looks like. + +* /bin/: Holds released SharpArch assemblies and third party dependencies needed by a S#arp Architecture project. + +-------------------------------------------- +-- How's this release organized? +-------------------------------------------- + +* /VisualStudioTemplate/: Contains artifacts for the support of the S#arp Architecture Visual Studio project template and an important fix to the T4 Toolbox (which supports CRUD scaffolding generation). + +* /ClickToBuild.bat and /go.bat were discussed above. + +* /License.txt: I'll let you guess what this is. + +* /SharpArch.build: The NAnt build script used by /go.bat to build the SharpArch class libraries. + +* /VersionHistory.txt: Details version numbers of dependencies, changes since previous releases, upgrade details, and a roadmap of what's coming. This is an important document. \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/404Error.htm b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/404Error.htm new file mode 100644 index 000000000..074a6da20 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/404Error.htm @@ -0,0 +1,56 @@ + + + + + + Tardis Bank + + + + + + + + + + +
+ + +
+ +
+ +
+ + +

Sorry, the page you are looking for is not here.

+

Maybe you've followed an old or broken link? Best to go 'home' and try again.

+ + +
+
+
+
+ + +
+ + \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/App_Start/BundleConfig.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/App_Start/BundleConfig.cs new file mode 100644 index 000000000..65cc6e5a3 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/App_Start/BundleConfig.cs @@ -0,0 +1,64 @@ +namespace Suteki.TardisBank.Web.Mvc +{ + using System.Web.Optimization; + + /// + /// Configures script and CSS bundles. + /// + public static class BundleConfig + { + /// + /// News script bundle. + /// + public const string NewsScript = "~/bundles/news"; + /// + /// Core scripts bundle. + /// Includes jQuery, templates and other non-UI code. + /// + public const string CoreScript = "~/bundles/jquery"; + + /// + /// Register scripts. + /// For more information on bundling, visit http://go.microsoft.com/fwlink/?LinkId=301862 + /// + /// + public static void RegisterBundles(BundleCollection bundles) + { + bundles.Add(new ScriptBundle(CoreScript).Include( + "~/Scripts/jquery-{version}.js", + "~/Scripts/jquery.validate.js", + "~/Scripts/jquery.validate.unobtrusive.js", + "~/Scripts/jsrender.js", + "~/Scripts/app/common.js" + )); + + bundles.Add(new ScriptBundle("~/bundles/jqueryui").Include( + "~/Scripts/jquery-ui-{version}.js")); + + // Use the development version of Modernizr to develop with and learn from. Then, when you're + // ready for production, use the build tool at http://modernizr.com to pick only the tests you need. + bundles.Add(new ScriptBundle("~/bundles/modernizr").Include( + "~/Scripts/modernizr-*")); + + bundles.Add(new ScriptBundle("~/bundles/bootstrap").Include( + "~/Scripts/bootstrap.js", + "~/Scripts/respond.js")); + + bundles.Add(new StyleBundle("~/Content/css").Include( + //"~/Content/bootstrap.css", + "~/Content/reset.css", + "~/Content/text.css", + "~/Content/960.css", + "~/Content/Site.css", + "~/Content/menu_style.css", + "~/Content/themes/cupertino/jquery-ui.cupertino.css", + "~/Content/font-awesome.css" + )); + + bundles.Add(new ScriptBundle(NewsScript).Include( + "~/Scripts/app/news.view.js", + "~/Scripts/app/news.edit.js") + ); + } + } +} diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/App_Start/FilterConfig.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/App_Start/FilterConfig.cs new file mode 100644 index 000000000..c8c6a6c6f --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/App_Start/FilterConfig.cs @@ -0,0 +1,13 @@ +using System.Web; +using System.Web.Mvc; + +namespace Suteki.TardisBank.Web.Mvc +{ + public class FilterConfig + { + public static void RegisterGlobalFilters(GlobalFilterCollection filters) + { + filters.Add(new HandleErrorAttribute()); + } + } +} diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/App_Start/MappingConfiguration.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/App_Start/MappingConfiguration.cs new file mode 100644 index 000000000..af2a11f4a --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/App_Start/MappingConfiguration.cs @@ -0,0 +1,20 @@ +namespace Suteki.TardisBank.Web.Mvc +{ + using System; + using Domain; + using Models; + + public class ModelMappingProfile: AutoMapper.Profile + { + public ModelMappingProfile() + { + CreateMap(); + + CreateMap() + .ReverseMap() + .ForMember(d => d.Id, opt => opt.Ignore()) + .ForMember(d => d.LastModifiedUtc, opt => opt.ResolveUsing((AnnouncementModel a) => DateTime.UtcNow)); + + } + } +} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/App_Start/RouteConfig.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/App_Start/RouteConfig.cs new file mode 100644 index 000000000..0fbd4dd28 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/App_Start/RouteConfig.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.Mvc; +using System.Web.Routing; + +namespace Suteki.TardisBank.Web.Mvc +{ + public class RouteConfig + { + public static void RegisterRoutes(RouteCollection routes) + { + routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); + + routes.MapRoute( + name: "Default", + url: "{controller}/{action}/{id}", + defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } + ); + } + } +} diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/App_Start/WebApiConfig.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/App_Start/WebApiConfig.cs new file mode 100644 index 000000000..e3baeceae --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/App_Start/WebApiConfig.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web.Http; + +namespace Suteki.TardisBank.Web.Mvc +{ + using Castle.Windsor; + using SharpArch.Domain.Reflection; + using SharpArch.Web.Http.Castle; + + public static class WebApiConfig + { + public static void Register(HttpConfiguration config, IWindsorContainer container, TypePropertyDescriptorCache propertyDescriptorCache) + { + // Web API configuration and services + config.UseWindsor(container, propertyDescriptorCache); + + + // Web API routes + config.MapHttpAttributeRoutes(); + + config.Routes.MapHttpRoute( + name: "DefaultApi", + routeTemplate: "api/{controller}/{id}", + defaults: new { id = RouteParameter.Optional } + ); + } + } +} diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/CastleWindsor/HandlerInstaller.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/CastleWindsor/HandlerInstaller.cs new file mode 100644 index 000000000..e7d53b054 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/CastleWindsor/HandlerInstaller.cs @@ -0,0 +1,29 @@ +namespace Suteki.TardisBank.Web.Mvc.CastleWindsor +{ + using Castle.MicroKernel.Registration; + using Castle.MicroKernel.SubSystems.Configuration; + using Castle.Windsor; + using MediatR; + using Suteki.TardisBank.Tasks.EventHandlers; + + /// + /// Installs Command and Query handlers. + /// + public class HandlersInstaller : IWindsorInstaller + { + public void Install(IWindsorContainer container, IConfigurationStore store) + { + container.Register( + Classes.FromAssemblyContaining() + .BasedOn(typeof (IRequestHandler<,>)) + .WithService.AllInterfaces() + .LifestylePerWebRequest()); + + container.Register( + Classes.FromAssemblyContaining() + .BasedOn(typeof (INotificationHandler<>)) + .WithService.AllInterfaces() + .LifestylePerWebRequest()); + } + } +} diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/CastleWindsor/HttpControllersInstaller.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/CastleWindsor/HttpControllersInstaller.cs new file mode 100644 index 000000000..621d03a4d --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/CastleWindsor/HttpControllersInstaller.cs @@ -0,0 +1,16 @@ +namespace Suteki.TardisBank.Web.Mvc.CastleWindsor +{ + using Castle.MicroKernel.Registration; + using Castle.MicroKernel.SubSystems.Configuration; + using Castle.Windsor; + using Controllers; + using SharpArch.Web.Http.Castle; + + public class HttpControllersInstaller : IWindsorInstaller + { + public void Install(IWindsorContainer container, IConfigurationStore store) + { + container.RegisterHttpControllers(typeof (AnnouncementsController).Assembly); + } + } +} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/CastleWindsor/MediatorInstaller.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/CastleWindsor/MediatorInstaller.cs new file mode 100644 index 000000000..aee6d7e1d --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/CastleWindsor/MediatorInstaller.cs @@ -0,0 +1,52 @@ +namespace Suteki.TardisBank.Web.Mvc.CastleWindsor +{ + using System; + using System.Collections.Generic; + using System.Reflection; + using Castle.MicroKernel; + using Castle.MicroKernel.Registration; + using Castle.MicroKernel.SubSystems.Configuration; + using Castle.Windsor; + using MediatR; + + /// + /// Installs and configures MediatR. + /// See https://github.com/jbogard/MediatR/tree/master/src/MediatR.Examples.Windsor + /// + public class MediatorInstaller : IWindsorInstaller + { + public void Install(IWindsorContainer container, IConfigurationStore store) + { + container.Kernel.AddHandlersFilter(new ContravariantFilter()); + + container.Register(Component.For().ImplementedBy()); + + container.Register( + Component.For().UsingFactoryMethod(k => t => k.Resolve(t))); + container.Register( + Component.For() + .UsingFactoryMethod(k => t => (IEnumerable) k.ResolveAll(t))); + } + + public class ContravariantFilter : IHandlersFilter + { + public bool HasOpinionAbout(Type service) + { + if (!service.IsGenericType) + { + return false; + } + + var genericType = service.GetGenericTypeDefinition(); + var genericArguments = genericType.GetGenericArguments(); + return genericArguments.Length == 1 + && genericArguments[0].GenericParameterAttributes.HasFlag(GenericParameterAttributes.Contravariant); + } + + public IHandler[] SelectHandlers(Type service, IHandler[] handlers) + { + return handlers; + } + } + } +} diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/CastleWindsor/MvcControllersInstaller.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/CastleWindsor/MvcControllersInstaller.cs new file mode 100644 index 000000000..b9ade8602 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/CastleWindsor/MvcControllersInstaller.cs @@ -0,0 +1,16 @@ +namespace Suteki.TardisBank.Web.Mvc.CastleWindsor +{ + using Castle.MicroKernel.Registration; + using Castle.MicroKernel.SubSystems.Configuration; + using Castle.Windsor; + using Controllers; + using SharpArch.Web.Mvc.Castle; + + public class MvcControllersInstaller : IWindsorInstaller + { + public void Install(IWindsorContainer container, IConfigurationStore store) + { + container.RegisterMvcControllers(typeof(HomeController).Assembly); + } + } +} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/CastleWindsor/MvcGooInstaller.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/CastleWindsor/MvcGooInstaller.cs new file mode 100644 index 000000000..710a06116 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/CastleWindsor/MvcGooInstaller.cs @@ -0,0 +1,27 @@ +namespace Suteki.TardisBank.Web.Mvc.CastleWindsor +{ + using Castle.MicroKernel.Registration; + using Castle.MicroKernel.SubSystems.Configuration; + using Castle.Windsor; + + using Suteki.TardisBank.Tasks; + using Suteki.TardisBank.Web.Mvc.Utilities; + + public class MvcGooInstaller : IWindsorInstaller + { + public void Install(IWindsorContainer container, IConfigurationStore store) + { + container.Register( + Component.For().Named("TardisConfiguration").LifeStyle.Singleton + ); + + container.Register( + Component.For().ImplementedBy().LifeStyle.Transient + ); + + container.Register( + Component.For().ImplementedBy().LifeStyle.Transient + ); + } + } +} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/CastleWindsor/MvcServiceLocator.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/CastleWindsor/MvcServiceLocator.cs new file mode 100644 index 000000000..63103f6ec --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/CastleWindsor/MvcServiceLocator.cs @@ -0,0 +1,41 @@ +namespace Suteki.TardisBank.Web.Mvc.CastleWindsor +{ + using System; + using System.Collections.Generic; + using System.Web.Mvc; + + using Microsoft.Practices.ServiceLocation; + + public class MvcServiceLocator: ServiceLocatorImplBase + { + /// + /// When implemented by inheriting classes, this method will do the actual work of resolving + /// the requested service instance. + /// + /// Type of instance requested.Name of registered service you want. May be null. + /// + /// The requested service instance. + /// + /// Named instances are not supported + protected override object DoGetInstance(Type serviceType, string key) + { + if (!string.IsNullOrEmpty(key)) + throw new InvalidOperationException("Named instances are not supported"); + + return DependencyResolver.Current.GetService(serviceType); + } + + /// + /// When implemented by inheriting classes, this method will do the actual work of + /// resolving all the requested service instances. + /// + /// Type of service requested. + /// + /// Sequence of service instance objects. + /// + protected override IEnumerable DoGetAllInstances(Type serviceType) + { + return DependencyResolver.Current.GetServices(serviceType); + } + } +} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/CastleWindsor/NHibernateInstaller.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/CastleWindsor/NHibernateInstaller.cs new file mode 100644 index 000000000..982f3baeb --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/CastleWindsor/NHibernateInstaller.cs @@ -0,0 +1,56 @@ +using System.Diagnostics; +using System.Web.Hosting; +using Castle.MicroKernel; +using Castle.MicroKernel.Registration; +using Castle.MicroKernel.SubSystems.Configuration; +using Castle.Windsor; +using NHibernate; +using SharpArch.NHibernate; +using Suteki.TardisBank.Infrastructure.NHibernateMaps; + +namespace Suteki.TardisBank.Web.Mvc.CastleWindsor +{ + public class NHibernateInstaller : IWindsorInstaller + { + ISessionFactory CreateSessionFactory(IKernel kernel) + { + ISessionFactory sessionFactory = new NHibernateSessionFactoryBuilder() + .AddMappingAssemblies(new[] { HostingEnvironment.MapPath(@"~/bin/Suteki.TardisBank.Infrastructure.dll") }) + .UseAutoPersistenceModel(new AutoPersistenceModelGenerator().Generate()) + .UseConfigFile(HostingEnvironment.MapPath("~/NHibernate.config")) + .UseConfigurationCache(new NHibernateConfigurationFileCache()) + .BuildSessionFactory(); + + return sessionFactory; + } + + + public void Install(IWindsorContainer container, IConfigurationStore store) + { + container.Register( + Component.For() + .UsingFactoryMethod(CreateSessionFactory) + .LifestyleSingleton() + .Named(NHibernateSessionFactoryBuilder.DefaultConfigurationName + ".factory") + ); + + container.Register( + Component.For() + .UsingFactoryMethod(k => k.Resolve().OpenSession()) + .LifestylePerWebRequest() + .Named(NHibernateSessionFactoryBuilder.DefaultConfigurationName + ".session") +#if DEBUG + .OnDestroy(s => Debug.WriteLine("Destroy session {0}", s.GetSessionImplementation().Timestamp)) + .OnCreate(s => Debug.WriteLine("Created session {0}", s.GetSessionImplementation().Timestamp)) +#endif + ); + + container.Register( + Component.For() + .UsingFactoryMethod(k => k.Resolve().OpenStatelessSession()) + .LifestylePerWebRequest() + .Named(NHibernateSessionFactoryBuilder.DefaultConfigurationName + ".stateless-session") + ); + } + } +} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/CastleWindsor/QueriesInstaller.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/CastleWindsor/QueriesInstaller.cs new file mode 100644 index 000000000..82e592c7f --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/CastleWindsor/QueriesInstaller.cs @@ -0,0 +1,29 @@ +namespace Suteki.TardisBank.Web.Mvc.CastleWindsor +{ + using Castle.MicroKernel.Registration; + using Castle.MicroKernel.SubSystems.Configuration; + using Castle.Windsor; + + using SharpArch.NHibernate; + + public class QueriesInstaller : IWindsorInstaller + { + public void Install(IWindsorContainer container, IConfigurationStore store) + { + container.Register( + Classes.FromAssemblyNamed("Suteki.TardisBank.Web.Mvc") + .BasedOn() + .WithService.DefaultInterfaces() + .LifestyleTransient() + ); + + + container.Register( + Classes.FromAssemblyNamed("Suteki.TardisBank.Infrastructure") + .BasedOn(typeof (NHibernateQuery)) + .WithService.DefaultInterfaces() + .LifestyleTransient() + ); + } + } +} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/CastleWindsor/RepositoriesInstaller.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/CastleWindsor/RepositoriesInstaller.cs new file mode 100644 index 000000000..f4351df97 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/CastleWindsor/RepositoriesInstaller.cs @@ -0,0 +1,52 @@ +namespace Suteki.TardisBank.Web.Mvc.CastleWindsor +{ + using Castle.MicroKernel.Registration; + using Castle.MicroKernel.SubSystems.Configuration; + using Castle.Windsor; + + using SharpArch.Domain.PersistenceSupport; + using SharpArch.NHibernate; + using SharpArch.NHibernate.Contracts.Repositories; + + public class RepositoriesInstaller : IWindsorInstaller + { + public void Install(IWindsorContainer container, IConfigurationStore store) + { + AddGenericRepositoriesTo(container); + AddCustomRepositoriesTo(container); + container.Register(Component.For() + .ImplementedBy().LifestylePerWebRequest()); + } + + private static void AddCustomRepositoriesTo(IWindsorContainer container) + { + container.Register( + Classes.FromAssemblyNamed("Suteki.TardisBank.Infrastructure") + .BasedOn(typeof(IRepositoryWithTypedId<,>)) + .WithService.DefaultInterfaces().LifestyleTransient()); + } + + private static void AddGenericRepositoriesTo(IWindsorContainer container) + { + container.Register( + Component.For(typeof(INHibernateRepository<>)) + .ImplementedBy(typeof(NHibernateRepository<>)) + .Named("nhibernateRepositoryType") + .Forward(typeof(IRepository<>)) + .LifestylePerWebRequest()); + + container.Register( + Component.For(typeof(INHibernateRepositoryWithTypedId<,>)) + .ImplementedBy(typeof(NHibernateRepositoryWithTypedId<,>)) + .Named("nhibernateRepositoryWithTypedId") + .Forward(typeof(IRepositoryWithTypedId<,>)) + .LifestylePerWebRequest()); + + container.Register( + Component.For(typeof(ILinqRepository<>)) + .ImplementedBy(typeof(LinqRepository<>)) + .Named("nhibernateLinqWithTypedId") + .LifestylePerWebRequest()); + } + } +} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/CastleWindsor/ServicesInstaller.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/CastleWindsor/ServicesInstaller.cs new file mode 100644 index 000000000..4a33a472d --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/CastleWindsor/ServicesInstaller.cs @@ -0,0 +1,22 @@ +namespace Suteki.TardisBank.Web.Mvc.CastleWindsor +{ + using Castle.MicroKernel.Registration; + using Castle.MicroKernel.SubSystems.Configuration; + using Castle.Windsor; + + using Tasks; + + public class TasksInstaller : IWindsorInstaller + { + public void Install(IWindsorContainer container, IConfigurationStore store) + { + container.Register( + Classes + .FromAssemblyContaining() + .Where(Component.IsInSameNamespaceAs()) + .WithService.DefaultInterfaces() + .LifestyleTransient() + ); + } + } +} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/CastleWindsor/SharpArchInstaller.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/CastleWindsor/SharpArchInstaller.cs new file mode 100644 index 000000000..5a8a0353e --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/CastleWindsor/SharpArchInstaller.cs @@ -0,0 +1,24 @@ +namespace Suteki.TardisBank.Web.Mvc.CastleWindsor +{ + using Castle.MicroKernel.Registration; + using Castle.MicroKernel.SubSystems.Configuration; + using Castle.Windsor; + using SharpArch.Domain.PersistenceSupport; + using SharpArch.NHibernate; + + /// + /// Installs S#Arch + /// + public class SharpArchInstaller : IWindsorInstaller + { + public void Install(IWindsorContainer container, IConfigurationStore store) + { + container.Register( + Component.For(typeof (IEntityDuplicateChecker)) + .ImplementedBy(typeof (EntityDuplicateChecker)) + .Named("entityDuplicateChecker") + .LifestyleTransient()); + + } + } +} diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/960.css b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/960.css new file mode 100644 index 000000000..d7bbb8d45 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/960.css @@ -0,0 +1 @@ +body{min-width:960px}.container_12,.container_16{margin-left:auto;margin-right:auto;width:960px}.grid_1,.grid_2,.grid_3,.grid_4,.grid_5,.grid_6,.grid_7,.grid_8,.grid_9,.grid_10,.grid_11,.grid_12,.grid_13,.grid_14,.grid_15,.grid_16{display:inline;float:left;margin-left:10px;margin-right:10px}.push_1,.pull_1,.push_2,.pull_2,.push_3,.pull_3,.push_4,.pull_4,.push_5,.pull_5,.push_6,.pull_6,.push_7,.pull_7,.push_8,.pull_8,.push_9,.pull_9,.push_10,.pull_10,.push_11,.pull_11,.push_12,.pull_12,.push_13,.pull_13,.push_14,.pull_14,.push_15,.pull_15{position:relative}.container_12 .grid_3,.container_16 .grid_4{width:220px}.container_12 .grid_6,.container_16 .grid_8{width:460px}.container_12 .grid_9,.container_16 .grid_12{width:700px}.container_12 .grid_12,.container_16 .grid_16{width:940px}.alpha{margin-left:0}.omega{margin-right:0}.container_12 .grid_1{width:60px}.container_12 .grid_2{width:140px}.container_12 .grid_4{width:300px}.container_12 .grid_5{width:380px}.container_12 .grid_7{width:540px}.container_12 .grid_8{width:620px}.container_12 .grid_10{width:780px}.container_12 .grid_11{width:860px}.container_16 .grid_1{width:40px}.container_16 .grid_2{width:100px}.container_16 .grid_3{width:160px}.container_16 .grid_5{width:280px}.container_16 .grid_6{width:340px}.container_16 .grid_7{width:400px}.container_16 .grid_9{width:520px}.container_16 .grid_10{width:580px}.container_16 .grid_11{width:640px}.container_16 .grid_13{width:760px}.container_16 .grid_14{width:820px}.container_16 .grid_15{width:880px}.container_12 .prefix_3,.container_16 .prefix_4{padding-left:240px}.container_12 .prefix_6,.container_16 .prefix_8{padding-left:480px}.container_12 .prefix_9,.container_16 .prefix_12{padding-left:720px}.container_12 .prefix_1{padding-left:80px}.container_12 .prefix_2{padding-left:160px}.container_12 .prefix_4{padding-left:320px}.container_12 .prefix_5{padding-left:400px}.container_12 .prefix_7{padding-left:560px}.container_12 .prefix_8{padding-left:640px}.container_12 .prefix_10{padding-left:800px}.container_12 .prefix_11{padding-left:880px}.container_16 .prefix_1{padding-left:60px}.container_16 .prefix_2{padding-left:120px}.container_16 .prefix_3{padding-left:180px}.container_16 .prefix_5{padding-left:300px}.container_16 .prefix_6{padding-left:360px}.container_16 .prefix_7{padding-left:420px}.container_16 .prefix_9{padding-left:540px}.container_16 .prefix_10{padding-left:600px}.container_16 .prefix_11{padding-left:660px}.container_16 .prefix_13{padding-left:780px}.container_16 .prefix_14{padding-left:840px}.container_16 .prefix_15{padding-left:900px}.container_12 .suffix_3,.container_16 .suffix_4{padding-right:240px}.container_12 .suffix_6,.container_16 .suffix_8{padding-right:480px}.container_12 .suffix_9,.container_16 .suffix_12{padding-right:720px}.container_12 .suffix_1{padding-right:80px}.container_12 .suffix_2{padding-right:160px}.container_12 .suffix_4{padding-right:320px}.container_12 .suffix_5{padding-right:400px}.container_12 .suffix_7{padding-right:560px}.container_12 .suffix_8{padding-right:640px}.container_12 .suffix_10{padding-right:800px}.container_12 .suffix_11{padding-right:880px}.container_16 .suffix_1{padding-right:60px}.container_16 .suffix_2{padding-right:120px}.container_16 .suffix_3{padding-right:180px}.container_16 .suffix_5{padding-right:300px}.container_16 .suffix_6{padding-right:360px}.container_16 .suffix_7{padding-right:420px}.container_16 .suffix_9{padding-right:540px}.container_16 .suffix_10{padding-right:600px}.container_16 .suffix_11{padding-right:660px}.container_16 .suffix_13{padding-right:780px}.container_16 .suffix_14{padding-right:840px}.container_16 .suffix_15{padding-right:900px}.container_12 .push_3,.container_16 .push_4{left:240px}.container_12 .push_6,.container_16 .push_8{left:480px}.container_12 .push_9,.container_16 .push_12{left:720px}.container_12 .push_1{left:80px}.container_12 .push_2{left:160px}.container_12 .push_4{left:320px}.container_12 .push_5{left:400px}.container_12 .push_7{left:560px}.container_12 .push_8{left:640px}.container_12 .push_10{left:800px}.container_12 .push_11{left:880px}.container_16 .push_1{left:60px}.container_16 .push_2{left:120px}.container_16 .push_3{left:180px}.container_16 .push_5{left:300px}.container_16 .push_6{left:360px}.container_16 .push_7{left:420px}.container_16 .push_9{left:540px}.container_16 .push_10{left:600px}.container_16 .push_11{left:660px}.container_16 .push_13{left:780px}.container_16 .push_14{left:840px}.container_16 .push_15{left:900px}.container_12 .pull_3,.container_16 .pull_4{left:-240px}.container_12 .pull_6,.container_16 .pull_8{left:-480px}.container_12 .pull_9,.container_16 .pull_12{left:-720px}.container_12 .pull_1{left:-80px}.container_12 .pull_2{left:-160px}.container_12 .pull_4{left:-320px}.container_12 .pull_5{left:-400px}.container_12 .pull_7{left:-560px}.container_12 .pull_8{left:-640px}.container_12 .pull_10{left:-800px}.container_12 .pull_11{left:-880px}.container_16 .pull_1{left:-60px}.container_16 .pull_2{left:-120px}.container_16 .pull_3{left:-180px}.container_16 .pull_5{left:-300px}.container_16 .pull_6{left:-360px}.container_16 .pull_7{left:-420px}.container_16 .pull_9{left:-540px}.container_16 .pull_10{left:-600px}.container_16 .pull_11{left:-660px}.container_16 .pull_13{left:-780px}.container_16 .pull_14{left:-840px}.container_16 .pull_15{left:-900px}.clear{clear:both;display:block;overflow:hidden;visibility:hidden;width:0;height:0}.clearfix:after{clear:both;content:' ';display:block;font-size:0;line-height:0;visibility:hidden;width:0;height:0}* html .clearfix,*:first-child+html .clearfix{zoom:1} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/Site.css b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/Site.css new file mode 100644 index 000000000..850ae48ab --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/Site.css @@ -0,0 +1,182 @@ +body { + background-color: #F2F2F0; + color: #333; + font: 100% Arial; +} + +#header { + background-color: #2580a2; + background-image: url(Images/title_background.png); + color: #fff; + height: 145px; +} + +#header a { + color: #ccc; + font-weight: bold; + text-decoration: none; +} + +#header a:hover { color: #fff } + +#header h1 { font-size: 32pt; } + +#login_status { text-align: right; } + +#content a { + -moz-border-radius: 5px; + background-color: #333; + border-radius: 5px; + color: #ccc; + margin: 7px; + padding: 7px; + text-decoration: none; +} + +#content a:hover { color: #fff; } + +#content a.text_link { + background-color: transparent; + color: #333; + padding: 0px; + text-decoration: underline; +} + +#content a:hover.text_link { color: #333; } + +#content a.warning { background-color: #b00; } + +div.rightline { + border-right: 1px solid #ccc; + padding-right: 10px; +} + +#footer { + background: #333; + color: #ccc; + font-size: 10px; +} + +#footer a { color: #ccc; } + +/* Table */ + +th { + padding: 5px 5px 5px 5px; + text-align: left; +} + +td { padding: 10px 5px; } + +td.money { text-align: right; } + +/* Form */ + +input { + -moz-border-radius: 5px; + border-radius: 5px; + border-style: inset; + border-width: 2px; + font: 100% Arial; +} + +input[type=submit] { + -moz-border-radius: 5px; + background-color: #333; + border-radius: 5px; + border-style: none; + border-width: 0; + color: #ccc; + padding: 7px; + text-decoration: none; +} + +input[type=submit]:hover { + color: #fff; + cursor: pointer; +} + +select { + -moz-border-radius: 5px; + border-radius: 5px; + border-style: inset; + border-width: 2px; + font: 100% Arial; +} + + +.announcement-container { + height: 250px; + overflow-y: scroll; + padding-bottom: 4px; + padding-top: 4px; +} + +ul.announcement-list { list-style: outside none none; } + +ul.announcement-list li { + margin-left: 0; + padding-bottom: 8px; + padding-top: 8px; +} + +.announcement-details { + height: 200px; + margin-bottom: 8px; + margin-top: 8px; + overflow: scroll; +} + +/* Styles for validation helpers +-----------------------------------------------------------*/ + +textarea:required, +input:required { + background: hsl(180, 50%, 90%); + border: 1px solid #999; +} + +textarea:valid, +input:not([type=submit]):valid, +input:not([type=submit]):in-range { + background: hsl(120, 50%, 90%); + border-color: hsl(120, 50%, 50%); +} + +textarea:invalid, +input:invalid, +input:out-of-range { + background: hsl(0, 50%, 90%); + border-color: hsl(0, 50%, 50%); +} + +.field-validation-error { color: #ff0000; } + +.field-validation-valid { display: none; } + +.input-validation-error { + background-color: #ffeeee; + border: 1px solid #ff0000; +} + +.validation-summary-errors { + color: #ff0000; + font-weight: bold; +} + +.validation-summary-valid { display: none; } + +p { + display: block; + padding-bottom: 8px; + padding-top: 8px; +} + +/* NEWS editor */ +#publishedAnnouncements a.delete-link { + color: red; + background-color: #F2F2F0; + border-radius: 0; + -moz-border-radius: 0; + padding: 0; +} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/bootstrap-theme.css b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/bootstrap-theme.css new file mode 100644 index 000000000..31d888266 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/bootstrap-theme.css @@ -0,0 +1,587 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +.btn-default, +.btn-primary, +.btn-success, +.btn-info, +.btn-warning, +.btn-danger { + text-shadow: 0 -1px 0 rgba(0, 0, 0, .2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); +} +.btn-default:active, +.btn-primary:active, +.btn-success:active, +.btn-info:active, +.btn-warning:active, +.btn-danger:active, +.btn-default.active, +.btn-primary.active, +.btn-success.active, +.btn-info.active, +.btn-warning.active, +.btn-danger.active { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn-default.disabled, +.btn-primary.disabled, +.btn-success.disabled, +.btn-info.disabled, +.btn-warning.disabled, +.btn-danger.disabled, +.btn-default[disabled], +.btn-primary[disabled], +.btn-success[disabled], +.btn-info[disabled], +.btn-warning[disabled], +.btn-danger[disabled], +fieldset[disabled] .btn-default, +fieldset[disabled] .btn-primary, +fieldset[disabled] .btn-success, +fieldset[disabled] .btn-info, +fieldset[disabled] .btn-warning, +fieldset[disabled] .btn-danger { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-default .badge, +.btn-primary .badge, +.btn-success .badge, +.btn-info .badge, +.btn-warning .badge, +.btn-danger .badge { + text-shadow: none; +} +.btn:active, +.btn.active { + background-image: none; +} +.btn-default { + text-shadow: 0 1px 0 #fff; + background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%); + background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0)); + background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #dbdbdb; + border-color: #ccc; +} +.btn-default:hover, +.btn-default:focus { + background-color: #e0e0e0; + background-position: 0 -15px; +} +.btn-default:active, +.btn-default.active { + background-color: #e0e0e0; + border-color: #dbdbdb; +} +.btn-default.disabled, +.btn-default[disabled], +fieldset[disabled] .btn-default, +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled.focus, +.btn-default[disabled].focus, +fieldset[disabled] .btn-default.focus, +.btn-default.disabled:active, +.btn-default[disabled]:active, +fieldset[disabled] .btn-default:active, +.btn-default.disabled.active, +.btn-default[disabled].active, +fieldset[disabled] .btn-default.active { + background-color: #e0e0e0; + background-image: none; +} +.btn-primary { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88)); + background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #245580; +} +.btn-primary:hover, +.btn-primary:focus { + background-color: #265a88; + background-position: 0 -15px; +} +.btn-primary:active, +.btn-primary.active { + background-color: #265a88; + border-color: #245580; +} +.btn-primary.disabled, +.btn-primary[disabled], +fieldset[disabled] .btn-primary, +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled.focus, +.btn-primary[disabled].focus, +fieldset[disabled] .btn-primary.focus, +.btn-primary.disabled:active, +.btn-primary[disabled]:active, +fieldset[disabled] .btn-primary:active, +.btn-primary.disabled.active, +.btn-primary[disabled].active, +fieldset[disabled] .btn-primary.active { + background-color: #265a88; + background-image: none; +} +.btn-success { + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); + background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641)); + background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #3e8f3e; +} +.btn-success:hover, +.btn-success:focus { + background-color: #419641; + background-position: 0 -15px; +} +.btn-success:active, +.btn-success.active { + background-color: #419641; + border-color: #3e8f3e; +} +.btn-success.disabled, +.btn-success[disabled], +fieldset[disabled] .btn-success, +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled.focus, +.btn-success[disabled].focus, +fieldset[disabled] .btn-success.focus, +.btn-success.disabled:active, +.btn-success[disabled]:active, +fieldset[disabled] .btn-success:active, +.btn-success.disabled.active, +.btn-success[disabled].active, +fieldset[disabled] .btn-success.active { + background-color: #419641; + background-image: none; +} +.btn-info { + background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); + background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2)); + background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #28a4c9; +} +.btn-info:hover, +.btn-info:focus { + background-color: #2aabd2; + background-position: 0 -15px; +} +.btn-info:active, +.btn-info.active { + background-color: #2aabd2; + border-color: #28a4c9; +} +.btn-info.disabled, +.btn-info[disabled], +fieldset[disabled] .btn-info, +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled.focus, +.btn-info[disabled].focus, +fieldset[disabled] .btn-info.focus, +.btn-info.disabled:active, +.btn-info[disabled]:active, +fieldset[disabled] .btn-info:active, +.btn-info.disabled.active, +.btn-info[disabled].active, +fieldset[disabled] .btn-info.active { + background-color: #2aabd2; + background-image: none; +} +.btn-warning { + background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); + background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316)); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #e38d13; +} +.btn-warning:hover, +.btn-warning:focus { + background-color: #eb9316; + background-position: 0 -15px; +} +.btn-warning:active, +.btn-warning.active { + background-color: #eb9316; + border-color: #e38d13; +} +.btn-warning.disabled, +.btn-warning[disabled], +fieldset[disabled] .btn-warning, +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled.focus, +.btn-warning[disabled].focus, +fieldset[disabled] .btn-warning.focus, +.btn-warning.disabled:active, +.btn-warning[disabled]:active, +fieldset[disabled] .btn-warning:active, +.btn-warning.disabled.active, +.btn-warning[disabled].active, +fieldset[disabled] .btn-warning.active { + background-color: #eb9316; + background-image: none; +} +.btn-danger { + background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); + background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a)); + background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #b92c28; +} +.btn-danger:hover, +.btn-danger:focus { + background-color: #c12e2a; + background-position: 0 -15px; +} +.btn-danger:active, +.btn-danger.active { + background-color: #c12e2a; + border-color: #b92c28; +} +.btn-danger.disabled, +.btn-danger[disabled], +fieldset[disabled] .btn-danger, +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled.focus, +.btn-danger[disabled].focus, +fieldset[disabled] .btn-danger.focus, +.btn-danger.disabled:active, +.btn-danger[disabled]:active, +fieldset[disabled] .btn-danger:active, +.btn-danger.disabled.active, +.btn-danger[disabled].active, +fieldset[disabled] .btn-danger.active { + background-color: #c12e2a; + background-image: none; +} +.thumbnail, +.img-thumbnail { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); + box-shadow: 0 1px 2px rgba(0, 0, 0, .075); +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + background-color: #e8e8e8; + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-repeat: repeat-x; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + background-color: #2e6da4; + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + background-repeat: repeat-x; +} +.navbar-default { + background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%); + background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8)); + background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); +} +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .active > a { + background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); + background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2)); + background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0); + background-repeat: repeat-x; + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); +} +.navbar-brand, +.navbar-nav > li > a { + text-shadow: 0 1px 0 rgba(255, 255, 255, .25); +} +.navbar-inverse { + background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%); + background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222)); + background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-radius: 4px; +} +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .active > a { + background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%); + background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f)); + background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0); + background-repeat: repeat-x; + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); +} +.navbar-inverse .navbar-brand, +.navbar-inverse .navbar-nav > li > a { + text-shadow: 0 -1px 0 rgba(0, 0, 0, .25); +} +.navbar-static-top, +.navbar-fixed-top, +.navbar-fixed-bottom { + border-radius: 0; +} +@media (max-width: 767px) { + .navbar .navbar-nav .open .dropdown-menu > .active > a, + .navbar .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #fff; + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + background-repeat: repeat-x; + } +} +.alert { + text-shadow: 0 1px 0 rgba(255, 255, 255, .2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); +} +.alert-success { + background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); + background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc)); + background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); + background-repeat: repeat-x; + border-color: #b2dba1; +} +.alert-info { + background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); + background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0)); + background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); + background-repeat: repeat-x; + border-color: #9acfea; +} +.alert-warning { + background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); + background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0)); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); + background-repeat: repeat-x; + border-color: #f5e79e; +} +.alert-danger { + background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); + background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3)); + background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); + background-repeat: repeat-x; + border-color: #dca7a7; +} +.progress { + background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); + background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5)); + background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090)); + background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-success { + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); + background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44)); + background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-info { + background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); + background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5)); + background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-warning { + background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); + background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f)); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-danger { + background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); + background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c)); + background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.list-group { + border-radius: 4px; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); + box-shadow: 0 1px 2px rgba(0, 0, 0, .075); +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + text-shadow: 0 -1px 0 #286090; + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0); + background-repeat: repeat-x; + border-color: #2b669a; +} +.list-group-item.active .badge, +.list-group-item.active:hover .badge, +.list-group-item.active:focus .badge { + text-shadow: none; +} +.panel { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05); + box-shadow: 0 1px 2px rgba(0, 0, 0, .05); +} +.panel-default > .panel-heading { + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-repeat: repeat-x; +} +.panel-primary > .panel-heading { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + background-repeat: repeat-x; +} +.panel-success > .panel-heading { + background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); + background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6)); + background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); + background-repeat: repeat-x; +} +.panel-info > .panel-heading { + background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); + background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3)); + background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); + background-repeat: repeat-x; +} +.panel-warning > .panel-heading { + background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); + background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc)); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); + background-repeat: repeat-x; +} +.panel-danger > .panel-heading { + background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); + background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc)); + background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); + background-repeat: repeat-x; +} +.well { + background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); + background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5)); + background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); + background-repeat: repeat-x; + border-color: #dcdcdc; + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); +} +/*# sourceMappingURL=bootstrap-theme.css.map */ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/bootstrap-theme.css.map b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/bootstrap-theme.css.map new file mode 100644 index 000000000..d876f60fb --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/bootstrap-theme.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["bootstrap-theme.css","less/theme.less","less/mixins/vendor-prefixes.less","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"AAAA;;;;GAIG;ACeH;;;;;;EAME,yCAAA;EC2CA,4FAAA;EACQ,oFAAA;CFvDT;ACgBC;;;;;;;;;;;;ECsCA,yDAAA;EACQ,iDAAA;CFxCT;ACMC;;;;;;;;;;;;;;;;;;ECiCA,yBAAA;EACQ,iBAAA;CFnBT;AC/BD;;;;;;EAuBI,kBAAA;CDgBH;ACyBC;;EAEE,uBAAA;CDvBH;AC4BD;EErEI,sEAAA;EACA,iEAAA;EACA,2FAAA;EAAA,oEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;EAuC2C,0BAAA;EAA2B,mBAAA;CDjBvE;ACpBC;;EAEE,0BAAA;EACA,6BAAA;CDsBH;ACnBC;;EAEE,0BAAA;EACA,sBAAA;CDqBH;ACfG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CD6BL;ACbD;EEtEI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CD8DD;AC5DC;;EAEE,0BAAA;EACA,6BAAA;CD8DH;AC3DC;;EAEE,0BAAA;EACA,sBAAA;CD6DH;ACvDG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CDqEL;ACpDD;EEvEI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CDsGD;ACpGC;;EAEE,0BAAA;EACA,6BAAA;CDsGH;ACnGC;;EAEE,0BAAA;EACA,sBAAA;CDqGH;AC/FG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CD6GL;AC3FD;EExEI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CD8ID;AC5IC;;EAEE,0BAAA;EACA,6BAAA;CD8IH;AC3IC;;EAEE,0BAAA;EACA,sBAAA;CD6IH;ACvIG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CDqJL;AClID;EEzEI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CDsLD;ACpLC;;EAEE,0BAAA;EACA,6BAAA;CDsLH;ACnLC;;EAEE,0BAAA;EACA,sBAAA;CDqLH;AC/KG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CD6LL;ACzKD;EE1EI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CD8ND;AC5NC;;EAEE,0BAAA;EACA,6BAAA;CD8NH;AC3NC;;EAEE,0BAAA;EACA,sBAAA;CD6NH;ACvNG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CDqOL;AC1MD;;EClCE,mDAAA;EACQ,2CAAA;CFgPT;ACrMD;;EE3FI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF0FF,0BAAA;CD2MD;ACzMD;;;EEhGI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EFgGF,0BAAA;CD+MD;ACtMD;EE7GI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;ECnBF,oEAAA;EH+HA,mBAAA;ECjEA,4FAAA;EACQ,oFAAA;CF8QT;ACjND;;EE7GI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;ED2CF,yDAAA;EACQ,iDAAA;CFwRT;AC9MD;;EAEE,+CAAA;CDgND;AC5MD;EEhII,sEAAA;EACA,iEAAA;EACA,2FAAA;EAAA,oEAAA;EACA,4BAAA;EACA,uHAAA;ECnBF,oEAAA;EHkJA,mBAAA;CDkND;ACrND;;EEhII,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;ED2CF,wDAAA;EACQ,gDAAA;CF+ST;AC/ND;;EAYI,0CAAA;CDuNH;AClND;;;EAGE,iBAAA;CDoND;AC/LD;EAfI;;;IAGE,YAAA;IE7JF,yEAAA;IACA,oEAAA;IACA,8FAAA;IAAA,uEAAA;IACA,4BAAA;IACA,uHAAA;GH+WD;CACF;AC3MD;EACE,8CAAA;EC3HA,2FAAA;EACQ,mFAAA;CFyUT;ACnMD;EEtLI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF8KF,sBAAA;CD+MD;AC1MD;EEvLI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF8KF,sBAAA;CDuND;ACjND;EExLI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF8KF,sBAAA;CD+ND;ACxND;EEzLI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF8KF,sBAAA;CDuOD;ACxND;EEjMI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CH4ZH;ACrND;EE3MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHmaH;AC3ND;EE5MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CH0aH;ACjOD;EE7MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHibH;ACvOD;EE9MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHwbH;AC7OD;EE/MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CH+bH;AChPD;EElLI,8MAAA;EACA,yMAAA;EACA,sMAAA;CHqaH;AC5OD;EACE,mBAAA;EC9KA,mDAAA;EACQ,2CAAA;CF6ZT;AC7OD;;;EAGE,8BAAA;EEnOE,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EFiOF,sBAAA;CDmPD;ACxPD;;;EAQI,kBAAA;CDqPH;AC3OD;ECnME,kDAAA;EACQ,0CAAA;CFibT;ACrOD;EE5PI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHoeH;AC3OD;EE7PI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CH2eH;ACjPD;EE9PI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHkfH;ACvPD;EE/PI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHyfH;AC7PD;EEhQI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHggBH;ACnQD;EEjQI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHugBH;ACnQD;EExQI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EFsQF,sBAAA;EC3NA,0FAAA;EACQ,kFAAA;CFqeT","file":"bootstrap-theme.css","sourcesContent":["/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-default.disabled,\n.btn-primary.disabled,\n.btn-success.disabled,\n.btn-info.disabled,\n.btn-warning.disabled,\n.btn-danger.disabled,\n.btn-default[disabled],\n.btn-primary[disabled],\n.btn-success[disabled],\n.btn-info[disabled],\n.btn-warning[disabled],\n.btn-danger[disabled],\nfieldset[disabled] .btn-default,\nfieldset[disabled] .btn-primary,\nfieldset[disabled] .btn-success,\nfieldset[disabled] .btn-info,\nfieldset[disabled] .btn-warning,\nfieldset[disabled] .btn-danger {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n text-shadow: none;\n}\n.btn:active,\n.btn.active {\n background-image: none;\n}\n.btn-default {\n background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #dbdbdb;\n text-shadow: 0 1px 0 #fff;\n border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n background-color: #e0e0e0;\n background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n background-color: #e0e0e0;\n border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n background-color: #e0e0e0;\n background-image: none;\n}\n.btn-primary {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n background-color: #265a88;\n background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n background-color: #265a88;\n border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n background-color: #265a88;\n background-image: none;\n}\n.btn-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n background-color: #419641;\n background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n background-color: #419641;\n border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n background-color: #419641;\n background-image: none;\n}\n.btn-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n background-color: #2aabd2;\n background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n background-color: #2aabd2;\n border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n background-color: #2aabd2;\n background-image: none;\n}\n.btn-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n background-color: #eb9316;\n background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n background-color: #eb9316;\n border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n background-color: #eb9316;\n background-image: none;\n}\n.btn-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n background-color: #c12e2a;\n background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n background-color: #c12e2a;\n border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n background-color: #c12e2a;\n background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n background-color: #e8e8e8;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-color: #2e6da4;\n}\n.navbar-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);\n}\n.navbar-inverse {\n background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);\n background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);\n background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n@media (max-width: 767px) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n }\n}\n.alert {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.alert-success {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n border-color: #b2dba1;\n}\n.alert-info {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n border-color: #9acfea;\n}\n.alert-warning {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n border-color: #f5e79e;\n}\n.alert-danger {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n border-color: #dca7a7;\n}\n.progress {\n background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n}\n.progress-bar {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n}\n.progress-bar-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n}\n.progress-bar-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n}\n.progress-bar-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n}\n.progress-bar-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n}\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.list-group {\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 #286090;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n text-shadow: none;\n}\n.panel {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.panel-default > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n}\n.panel-primary > .panel-heading {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n}\n.panel-success > .panel-heading {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n}\n.panel-info > .panel-heading {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n}\n.panel-warning > .panel-heading {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n}\n.panel-danger > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n}\n.well {\n background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n border-color: #dcdcdc;\n -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */","/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n .box-shadow(none);\n }\n\n .badge {\n text-shadow: none;\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257\n border-radius: @navbar-border-radius;\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n// Fix active state of dropdown items in collapsed mode\n@media (max-width: @grid-float-breakpoint-max) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: #fff;\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n }\n }\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n\n .badge {\n text-shadow: none;\n }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/bootstrap-theme.min.css b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/bootstrap-theme.min.css new file mode 100644 index 000000000..5e3940195 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/bootstrap-theme.min.css @@ -0,0 +1,6 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */.btn-danger,.btn-default,.btn-info,.btn-primary,.btn-success,.btn-warning{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-danger.disabled,.btn-danger[disabled],.btn-default.disabled,.btn-default[disabled],.btn-info.disabled,.btn-info[disabled],.btn-primary.disabled,.btn-primary[disabled],.btn-success.disabled,.btn-success[disabled],.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-danger,fieldset[disabled] .btn-default,fieldset[disabled] .btn-info,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-success,fieldset[disabled] .btn-warning{-webkit-box-shadow:none;box-shadow:none}.btn-danger .badge,.btn-default .badge,.btn-info .badge,.btn-primary .badge,.btn-success .badge,.btn-warning .badge{text-shadow:none}.btn.active,.btn:active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:focus,.btn-default:hover{background-color:#e0e0e0;background-position:0 -15px}.btn-default.active,.btn-default:active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:focus,.btn-primary:hover{background-color:#265a88;background-position:0 -15px}.btn-primary.active,.btn-primary:active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:focus,.btn-success:hover{background-color:#419641;background-position:0 -15px}.btn-success.active,.btn-success:active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:focus,.btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.btn-info.active,.btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:focus,.btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.btn-warning.active,.btn-warning:active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:focus,.btn-danger:hover{background-color:#c12e2a;background-position:0 -15px}.btn-danger.active,.btn-danger:active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#c12e2a;background-image:none}.img-thumbnail,.thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#2e6da4;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:focus .badge,.list-group-item.active:hover .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)} +/*# sourceMappingURL=bootstrap-theme.min.css.map */ \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/bootstrap-theme.min.css.map b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/bootstrap-theme.min.css.map new file mode 100644 index 000000000..94813e900 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/bootstrap-theme.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["less/theme.less","less/mixins/vendor-prefixes.less","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":";;;;AAmBA,YAAA,aAAA,UAAA,aAAA,aAAA,aAME,YAAA,EAAA,KAAA,EAAA,eC2CA,mBAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,iBDvCR,mBAAA,mBAAA,oBAAA,oBAAA,iBAAA,iBAAA,oBAAA,oBAAA,oBAAA,oBAAA,oBAAA,oBCsCA,mBAAA,MAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,iBDlCR,qBAAA,sBAAA,sBAAA,uBAAA,mBAAA,oBAAA,sBAAA,uBAAA,sBAAA,uBAAA,sBAAA,uBAAA,+BAAA,gCAAA,6BAAA,gCAAA,gCAAA,gCCiCA,mBAAA,KACQ,WAAA,KDlDV,mBAAA,oBAAA,iBAAA,oBAAA,oBAAA,oBAuBI,YAAA,KAyCF,YAAA,YAEE,iBAAA,KAKJ,aErEI,YAAA,EAAA,IAAA,EAAA,KACA,iBAAA,iDACA,iBAAA,4CAAA,iBAAA,qEAEA,iBAAA,+CCnBF,OAAA,+GH4CA,OAAA,0DACA,kBAAA,SAuC2C,aAAA,QAA2B,aAAA,KArCtE,mBAAA,mBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,oBAAA,oBAEE,iBAAA,QACA,aAAA,QAMA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,uBAAA,8BAAA,6BAAA,8BAAA,6BAAA,6BAAA,gCAAA,uCAAA,sCAAA,uCAAA,sCAAA,sCAME,iBAAA,QACA,iBAAA,KAgBN,aEtEI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,mBAAA,mBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,oBAAA,oBAEE,iBAAA,QACA,aAAA,QAMA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,uBAAA,8BAAA,6BAAA,8BAAA,6BAAA,6BAAA,gCAAA,uCAAA,sCAAA,uCAAA,sCAAA,sCAME,iBAAA,QACA,iBAAA,KAiBN,aEvEI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,mBAAA,mBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,oBAAA,oBAEE,iBAAA,QACA,aAAA,QAMA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,uBAAA,8BAAA,6BAAA,8BAAA,6BAAA,6BAAA,gCAAA,uCAAA,sCAAA,uCAAA,sCAAA,sCAME,iBAAA,QACA,iBAAA,KAkBN,UExEI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,gBAAA,gBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,iBAAA,iBAEE,iBAAA,QACA,aAAA,QAMA,mBAAA,0BAAA,yBAAA,0BAAA,yBAAA,yBAAA,oBAAA,2BAAA,0BAAA,2BAAA,0BAAA,0BAAA,6BAAA,oCAAA,mCAAA,oCAAA,mCAAA,mCAME,iBAAA,QACA,iBAAA,KAmBN,aEzEI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,mBAAA,mBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,oBAAA,oBAEE,iBAAA,QACA,aAAA,QAMA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,uBAAA,8BAAA,6BAAA,8BAAA,6BAAA,6BAAA,gCAAA,uCAAA,sCAAA,uCAAA,sCAAA,sCAME,iBAAA,QACA,iBAAA,KAoBN,YE1EI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,kBAAA,kBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,mBAAA,mBAEE,iBAAA,QACA,aAAA,QAMA,qBAAA,4BAAA,2BAAA,4BAAA,2BAAA,2BAAA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,+BAAA,sCAAA,qCAAA,sCAAA,qCAAA,qCAME,iBAAA,QACA,iBAAA,KA2BN,eAAA,WClCE,mBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,EAAA,IAAA,IAAA,iBD2CV,0BAAA,0BE3FI,iBAAA,QACA,iBAAA,oDACA,iBAAA,+CAAA,iBAAA,wEACA,iBAAA,kDACA,OAAA,+GF0FF,kBAAA,SAEF,yBAAA,+BAAA,+BEhGI,iBAAA,QACA,iBAAA,oDACA,iBAAA,+CAAA,iBAAA,wEACA,iBAAA,kDACA,OAAA,+GFgGF,kBAAA,SASF,gBE7GI,iBAAA,iDACA,iBAAA,4CACA,iBAAA,qEAAA,iBAAA,+CACA,OAAA,+GACA,OAAA,0DCnBF,kBAAA,SH+HA,cAAA,ICjEA,mBAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,iBD6DV,sCAAA,oCE7GI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SD2CF,mBAAA,MAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,iBD0EV,cAAA,iBAEE,YAAA,EAAA,IAAA,EAAA,sBAIF,gBEhII,iBAAA,iDACA,iBAAA,4CACA,iBAAA,qEAAA,iBAAA,+CACA,OAAA,+GACA,OAAA,0DCnBF,kBAAA,SHkJA,cAAA,IAHF,sCAAA,oCEhII,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SD2CF,mBAAA,MAAA,EAAA,IAAA,IAAA,gBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,gBDgFV,8BAAA,iCAYI,YAAA,EAAA,KAAA,EAAA,gBAKJ,qBAAA,kBAAA,mBAGE,cAAA,EAqBF,yBAfI,mDAAA,yDAAA,yDAGE,MAAA,KE7JF,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,UFqKJ,OACE,YAAA,EAAA,IAAA,EAAA,qBC3HA,mBAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,gBACQ,WAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,gBDsIV,eEtLI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF8KF,aAAA,QAKF,YEvLI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF8KF,aAAA,QAMF,eExLI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF8KF,aAAA,QAOF,cEzLI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF8KF,aAAA,QAeF,UEjMI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFuMJ,cE3MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFwMJ,sBE5MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFyMJ,mBE7MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF0MJ,sBE9MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF2MJ,qBE/MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF+MJ,sBElLI,iBAAA,yKACA,iBAAA,oKACA,iBAAA,iKFyLJ,YACE,cAAA,IC9KA,mBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,EAAA,IAAA,IAAA,iBDgLV,wBAAA,8BAAA,8BAGE,YAAA,EAAA,KAAA,EAAA,QEnOE,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFiOF,aAAA,QALF,+BAAA,qCAAA,qCAQI,YAAA,KAUJ,OCnME,mBAAA,EAAA,IAAA,IAAA,gBACQ,WAAA,EAAA,IAAA,IAAA,gBD4MV,8BE5PI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFyPJ,8BE7PI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF0PJ,8BE9PI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF2PJ,2BE/PI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF4PJ,8BEhQI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF6PJ,6BEjQI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFoQJ,MExQI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFsQF,aAAA,QC3NA,mBAAA,MAAA,EAAA,IAAA,IAAA,gBAAA,EAAA,IAAA,EAAA,qBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,gBAAA,EAAA,IAAA,EAAA","sourcesContent":["/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n .box-shadow(none);\n }\n\n .badge {\n text-shadow: none;\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257\n border-radius: @navbar-border-radius;\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n// Fix active state of dropdown items in collapsed mode\n@media (max-width: @grid-float-breakpoint-max) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: #fff;\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n }\n }\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n\n .badge {\n text-shadow: none;\n }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/bootstrap.css b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/bootstrap.css new file mode 100644 index 000000000..6167622ce --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/bootstrap.css @@ -0,0 +1,6757 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ +html { + font-family: sans-serif; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} +body { + margin: 0; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline; +} +audio:not([controls]) { + display: none; + height: 0; +} +[hidden], +template { + display: none; +} +a { + background-color: transparent; +} +a:active, +a:hover { + outline: 0; +} +abbr[title] { + border-bottom: 1px dotted; +} +b, +strong { + font-weight: bold; +} +dfn { + font-style: italic; +} +h1 { + margin: .67em 0; + font-size: 2em; +} +mark { + color: #000; + background: #ff0; +} +small { + font-size: 80%; +} +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} +sup { + top: -.5em; +} +sub { + bottom: -.25em; +} +img { + border: 0; +} +svg:not(:root) { + overflow: hidden; +} +figure { + margin: 1em 40px; +} +hr { + height: 0; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +pre { + overflow: auto; +} +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +button, +input, +optgroup, +select, +textarea { + margin: 0; + font: inherit; + color: inherit; +} +button { + overflow: visible; +} +button, +select { + text-transform: none; +} +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} +button[disabled], +html input[disabled] { + cursor: default; +} +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} +input { + line-height: normal; +} +input[type="checkbox"], +input[type="radio"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 0; +} +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} +input[type="search"] { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-appearance: textfield; +} +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +fieldset { + padding: .35em .625em .75em; + margin: 0 2px; + border: 1px solid #c0c0c0; +} +legend { + padding: 0; + border: 0; +} +textarea { + overflow: auto; +} +optgroup { + font-weight: bold; +} +table { + border-spacing: 0; + border-collapse: collapse; +} +td, +th { + padding: 0; +} +/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ +@media print { + *, + *:before, + *:after { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + a[href^="#"]:after, + a[href^="javascript:"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + .navbar { + display: none; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .label { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} +@font-face { + font-family: 'Glyphicons Halflings'; + + src: url('../fonts/glyphicons-halflings-regular.eot'); + src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); +} +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; + + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.glyphicon-asterisk:before { + content: "\002a"; +} +.glyphicon-plus:before { + content: "\002b"; +} +.glyphicon-euro:before, +.glyphicon-eur:before { + content: "\20ac"; +} +.glyphicon-minus:before { + content: "\2212"; +} +.glyphicon-cloud:before { + content: "\2601"; +} +.glyphicon-envelope:before { + content: "\2709"; +} +.glyphicon-pencil:before { + content: "\270f"; +} +.glyphicon-glass:before { + content: "\e001"; +} +.glyphicon-music:before { + content: "\e002"; +} +.glyphicon-search:before { + content: "\e003"; +} +.glyphicon-heart:before { + content: "\e005"; +} +.glyphicon-star:before { + content: "\e006"; +} +.glyphicon-star-empty:before { + content: "\e007"; +} +.glyphicon-user:before { + content: "\e008"; +} +.glyphicon-film:before { + content: "\e009"; +} +.glyphicon-th-large:before { + content: "\e010"; +} +.glyphicon-th:before { + content: "\e011"; +} +.glyphicon-th-list:before { + content: "\e012"; +} +.glyphicon-ok:before { + content: "\e013"; +} +.glyphicon-remove:before { + content: "\e014"; +} +.glyphicon-zoom-in:before { + content: "\e015"; +} +.glyphicon-zoom-out:before { + content: "\e016"; +} +.glyphicon-off:before { + content: "\e017"; +} +.glyphicon-signal:before { + content: "\e018"; +} +.glyphicon-cog:before { + content: "\e019"; +} +.glyphicon-trash:before { + content: "\e020"; +} +.glyphicon-home:before { + content: "\e021"; +} +.glyphicon-file:before { + content: "\e022"; +} +.glyphicon-time:before { + content: "\e023"; +} +.glyphicon-road:before { + content: "\e024"; +} +.glyphicon-download-alt:before { + content: "\e025"; +} +.glyphicon-download:before { + content: "\e026"; +} +.glyphicon-upload:before { + content: "\e027"; +} +.glyphicon-inbox:before { + content: "\e028"; +} +.glyphicon-play-circle:before { + content: "\e029"; +} +.glyphicon-repeat:before { + content: "\e030"; +} +.glyphicon-refresh:before { + content: "\e031"; +} +.glyphicon-list-alt:before { + content: "\e032"; +} +.glyphicon-lock:before { + content: "\e033"; +} +.glyphicon-flag:before { + content: "\e034"; +} +.glyphicon-headphones:before { + content: "\e035"; +} +.glyphicon-volume-off:before { + content: "\e036"; +} +.glyphicon-volume-down:before { + content: "\e037"; +} +.glyphicon-volume-up:before { + content: "\e038"; +} +.glyphicon-qrcode:before { + content: "\e039"; +} +.glyphicon-barcode:before { + content: "\e040"; +} +.glyphicon-tag:before { + content: "\e041"; +} +.glyphicon-tags:before { + content: "\e042"; +} +.glyphicon-book:before { + content: "\e043"; +} +.glyphicon-bookmark:before { + content: "\e044"; +} +.glyphicon-print:before { + content: "\e045"; +} +.glyphicon-camera:before { + content: "\e046"; +} +.glyphicon-font:before { + content: "\e047"; +} +.glyphicon-bold:before { + content: "\e048"; +} +.glyphicon-italic:before { + content: "\e049"; +} +.glyphicon-text-height:before { + content: "\e050"; +} +.glyphicon-text-width:before { + content: "\e051"; +} +.glyphicon-align-left:before { + content: "\e052"; +} +.glyphicon-align-center:before { + content: "\e053"; +} +.glyphicon-align-right:before { + content: "\e054"; +} +.glyphicon-align-justify:before { + content: "\e055"; +} +.glyphicon-list:before { + content: "\e056"; +} +.glyphicon-indent-left:before { + content: "\e057"; +} +.glyphicon-indent-right:before { + content: "\e058"; +} +.glyphicon-facetime-video:before { + content: "\e059"; +} +.glyphicon-picture:before { + content: "\e060"; +} +.glyphicon-map-marker:before { + content: "\e062"; +} +.glyphicon-adjust:before { + content: "\e063"; +} +.glyphicon-tint:before { + content: "\e064"; +} +.glyphicon-edit:before { + content: "\e065"; +} +.glyphicon-share:before { + content: "\e066"; +} +.glyphicon-check:before { + content: "\e067"; +} +.glyphicon-move:before { + content: "\e068"; +} +.glyphicon-step-backward:before { + content: "\e069"; +} +.glyphicon-fast-backward:before { + content: "\e070"; +} +.glyphicon-backward:before { + content: "\e071"; +} +.glyphicon-play:before { + content: "\e072"; +} +.glyphicon-pause:before { + content: "\e073"; +} +.glyphicon-stop:before { + content: "\e074"; +} +.glyphicon-forward:before { + content: "\e075"; +} +.glyphicon-fast-forward:before { + content: "\e076"; +} +.glyphicon-step-forward:before { + content: "\e077"; +} +.glyphicon-eject:before { + content: "\e078"; +} +.glyphicon-chevron-left:before { + content: "\e079"; +} +.glyphicon-chevron-right:before { + content: "\e080"; +} +.glyphicon-plus-sign:before { + content: "\e081"; +} +.glyphicon-minus-sign:before { + content: "\e082"; +} +.glyphicon-remove-sign:before { + content: "\e083"; +} +.glyphicon-ok-sign:before { + content: "\e084"; +} +.glyphicon-question-sign:before { + content: "\e085"; +} +.glyphicon-info-sign:before { + content: "\e086"; +} +.glyphicon-screenshot:before { + content: "\e087"; +} +.glyphicon-remove-circle:before { + content: "\e088"; +} +.glyphicon-ok-circle:before { + content: "\e089"; +} +.glyphicon-ban-circle:before { + content: "\e090"; +} +.glyphicon-arrow-left:before { + content: "\e091"; +} +.glyphicon-arrow-right:before { + content: "\e092"; +} +.glyphicon-arrow-up:before { + content: "\e093"; +} +.glyphicon-arrow-down:before { + content: "\e094"; +} +.glyphicon-share-alt:before { + content: "\e095"; +} +.glyphicon-resize-full:before { + content: "\e096"; +} +.glyphicon-resize-small:before { + content: "\e097"; +} +.glyphicon-exclamation-sign:before { + content: "\e101"; +} +.glyphicon-gift:before { + content: "\e102"; +} +.glyphicon-leaf:before { + content: "\e103"; +} +.glyphicon-fire:before { + content: "\e104"; +} +.glyphicon-eye-open:before { + content: "\e105"; +} +.glyphicon-eye-close:before { + content: "\e106"; +} +.glyphicon-warning-sign:before { + content: "\e107"; +} +.glyphicon-plane:before { + content: "\e108"; +} +.glyphicon-calendar:before { + content: "\e109"; +} +.glyphicon-random:before { + content: "\e110"; +} +.glyphicon-comment:before { + content: "\e111"; +} +.glyphicon-magnet:before { + content: "\e112"; +} +.glyphicon-chevron-up:before { + content: "\e113"; +} +.glyphicon-chevron-down:before { + content: "\e114"; +} +.glyphicon-retweet:before { + content: "\e115"; +} +.glyphicon-shopping-cart:before { + content: "\e116"; +} +.glyphicon-folder-close:before { + content: "\e117"; +} +.glyphicon-folder-open:before { + content: "\e118"; +} +.glyphicon-resize-vertical:before { + content: "\e119"; +} +.glyphicon-resize-horizontal:before { + content: "\e120"; +} +.glyphicon-hdd:before { + content: "\e121"; +} +.glyphicon-bullhorn:before { + content: "\e122"; +} +.glyphicon-bell:before { + content: "\e123"; +} +.glyphicon-certificate:before { + content: "\e124"; +} +.glyphicon-thumbs-up:before { + content: "\e125"; +} +.glyphicon-thumbs-down:before { + content: "\e126"; +} +.glyphicon-hand-right:before { + content: "\e127"; +} +.glyphicon-hand-left:before { + content: "\e128"; +} +.glyphicon-hand-up:before { + content: "\e129"; +} +.glyphicon-hand-down:before { + content: "\e130"; +} +.glyphicon-circle-arrow-right:before { + content: "\e131"; +} +.glyphicon-circle-arrow-left:before { + content: "\e132"; +} +.glyphicon-circle-arrow-up:before { + content: "\e133"; +} +.glyphicon-circle-arrow-down:before { + content: "\e134"; +} +.glyphicon-globe:before { + content: "\e135"; +} +.glyphicon-wrench:before { + content: "\e136"; +} +.glyphicon-tasks:before { + content: "\e137"; +} +.glyphicon-filter:before { + content: "\e138"; +} +.glyphicon-briefcase:before { + content: "\e139"; +} +.glyphicon-fullscreen:before { + content: "\e140"; +} +.glyphicon-dashboard:before { + content: "\e141"; +} +.glyphicon-paperclip:before { + content: "\e142"; +} +.glyphicon-heart-empty:before { + content: "\e143"; +} +.glyphicon-link:before { + content: "\e144"; +} +.glyphicon-phone:before { + content: "\e145"; +} +.glyphicon-pushpin:before { + content: "\e146"; +} +.glyphicon-usd:before { + content: "\e148"; +} +.glyphicon-gbp:before { + content: "\e149"; +} +.glyphicon-sort:before { + content: "\e150"; +} +.glyphicon-sort-by-alphabet:before { + content: "\e151"; +} +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152"; +} +.glyphicon-sort-by-order:before { + content: "\e153"; +} +.glyphicon-sort-by-order-alt:before { + content: "\e154"; +} +.glyphicon-sort-by-attributes:before { + content: "\e155"; +} +.glyphicon-sort-by-attributes-alt:before { + content: "\e156"; +} +.glyphicon-unchecked:before { + content: "\e157"; +} +.glyphicon-expand:before { + content: "\e158"; +} +.glyphicon-collapse-down:before { + content: "\e159"; +} +.glyphicon-collapse-up:before { + content: "\e160"; +} +.glyphicon-log-in:before { + content: "\e161"; +} +.glyphicon-flash:before { + content: "\e162"; +} +.glyphicon-log-out:before { + content: "\e163"; +} +.glyphicon-new-window:before { + content: "\e164"; +} +.glyphicon-record:before { + content: "\e165"; +} +.glyphicon-save:before { + content: "\e166"; +} +.glyphicon-open:before { + content: "\e167"; +} +.glyphicon-saved:before { + content: "\e168"; +} +.glyphicon-import:before { + content: "\e169"; +} +.glyphicon-export:before { + content: "\e170"; +} +.glyphicon-send:before { + content: "\e171"; +} +.glyphicon-floppy-disk:before { + content: "\e172"; +} +.glyphicon-floppy-saved:before { + content: "\e173"; +} +.glyphicon-floppy-remove:before { + content: "\e174"; +} +.glyphicon-floppy-save:before { + content: "\e175"; +} +.glyphicon-floppy-open:before { + content: "\e176"; +} +.glyphicon-credit-card:before { + content: "\e177"; +} +.glyphicon-transfer:before { + content: "\e178"; +} +.glyphicon-cutlery:before { + content: "\e179"; +} +.glyphicon-header:before { + content: "\e180"; +} +.glyphicon-compressed:before { + content: "\e181"; +} +.glyphicon-earphone:before { + content: "\e182"; +} +.glyphicon-phone-alt:before { + content: "\e183"; +} +.glyphicon-tower:before { + content: "\e184"; +} +.glyphicon-stats:before { + content: "\e185"; +} +.glyphicon-sd-video:before { + content: "\e186"; +} +.glyphicon-hd-video:before { + content: "\e187"; +} +.glyphicon-subtitles:before { + content: "\e188"; +} +.glyphicon-sound-stereo:before { + content: "\e189"; +} +.glyphicon-sound-dolby:before { + content: "\e190"; +} +.glyphicon-sound-5-1:before { + content: "\e191"; +} +.glyphicon-sound-6-1:before { + content: "\e192"; +} +.glyphicon-sound-7-1:before { + content: "\e193"; +} +.glyphicon-copyright-mark:before { + content: "\e194"; +} +.glyphicon-registration-mark:before { + content: "\e195"; +} +.glyphicon-cloud-download:before { + content: "\e197"; +} +.glyphicon-cloud-upload:before { + content: "\e198"; +} +.glyphicon-tree-conifer:before { + content: "\e199"; +} +.glyphicon-tree-deciduous:before { + content: "\e200"; +} +.glyphicon-cd:before { + content: "\e201"; +} +.glyphicon-save-file:before { + content: "\e202"; +} +.glyphicon-open-file:before { + content: "\e203"; +} +.glyphicon-level-up:before { + content: "\e204"; +} +.glyphicon-copy:before { + content: "\e205"; +} +.glyphicon-paste:before { + content: "\e206"; +} +.glyphicon-alert:before { + content: "\e209"; +} +.glyphicon-equalizer:before { + content: "\e210"; +} +.glyphicon-king:before { + content: "\e211"; +} +.glyphicon-queen:before { + content: "\e212"; +} +.glyphicon-pawn:before { + content: "\e213"; +} +.glyphicon-bishop:before { + content: "\e214"; +} +.glyphicon-knight:before { + content: "\e215"; +} +.glyphicon-baby-formula:before { + content: "\e216"; +} +.glyphicon-tent:before { + content: "\26fa"; +} +.glyphicon-blackboard:before { + content: "\e218"; +} +.glyphicon-bed:before { + content: "\e219"; +} +.glyphicon-apple:before { + content: "\f8ff"; +} +.glyphicon-erase:before { + content: "\e221"; +} +.glyphicon-hourglass:before { + content: "\231b"; +} +.glyphicon-lamp:before { + content: "\e223"; +} +.glyphicon-duplicate:before { + content: "\e224"; +} +.glyphicon-piggy-bank:before { + content: "\e225"; +} +.glyphicon-scissors:before { + content: "\e226"; +} +.glyphicon-bitcoin:before { + content: "\e227"; +} +.glyphicon-btc:before { + content: "\e227"; +} +.glyphicon-xbt:before { + content: "\e227"; +} +.glyphicon-yen:before { + content: "\00a5"; +} +.glyphicon-jpy:before { + content: "\00a5"; +} +.glyphicon-ruble:before { + content: "\20bd"; +} +.glyphicon-rub:before { + content: "\20bd"; +} +.glyphicon-scale:before { + content: "\e230"; +} +.glyphicon-ice-lolly:before { + content: "\e231"; +} +.glyphicon-ice-lolly-tasted:before { + content: "\e232"; +} +.glyphicon-education:before { + content: "\e233"; +} +.glyphicon-option-horizontal:before { + content: "\e234"; +} +.glyphicon-option-vertical:before { + content: "\e235"; +} +.glyphicon-menu-hamburger:before { + content: "\e236"; +} +.glyphicon-modal-window:before { + content: "\e237"; +} +.glyphicon-oil:before { + content: "\e238"; +} +.glyphicon-grain:before { + content: "\e239"; +} +.glyphicon-sunglasses:before { + content: "\e240"; +} +.glyphicon-text-size:before { + content: "\e241"; +} +.glyphicon-text-color:before { + content: "\e242"; +} +.glyphicon-text-background:before { + content: "\e243"; +} +.glyphicon-object-align-top:before { + content: "\e244"; +} +.glyphicon-object-align-bottom:before { + content: "\e245"; +} +.glyphicon-object-align-horizontal:before { + content: "\e246"; +} +.glyphicon-object-align-left:before { + content: "\e247"; +} +.glyphicon-object-align-vertical:before { + content: "\e248"; +} +.glyphicon-object-align-right:before { + content: "\e249"; +} +.glyphicon-triangle-right:before { + content: "\e250"; +} +.glyphicon-triangle-left:before { + content: "\e251"; +} +.glyphicon-triangle-bottom:before { + content: "\e252"; +} +.glyphicon-triangle-top:before { + content: "\e253"; +} +.glyphicon-console:before { + content: "\e254"; +} +.glyphicon-superscript:before { + content: "\e255"; +} +.glyphicon-subscript:before { + content: "\e256"; +} +.glyphicon-menu-left:before { + content: "\e257"; +} +.glyphicon-menu-right:before { + content: "\e258"; +} +.glyphicon-menu-down:before { + content: "\e259"; +} +.glyphicon-menu-up:before { + content: "\e260"; +} +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +html { + font-size: 10px; + + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.42857143; + color: #333; + background-color: #fff; +} +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} +a { + color: #337ab7; + text-decoration: none; +} +a:hover, +a:focus { + color: #23527c; + text-decoration: underline; +} +a:focus { + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +figure { + margin: 0; +} +img { + vertical-align: middle; +} +.img-responsive, +.thumbnail > img, +.thumbnail a > img, +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + max-width: 100%; + height: auto; +} +.img-rounded { + border-radius: 6px; +} +.img-thumbnail { + display: inline-block; + max-width: 100%; + height: auto; + padding: 4px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; +} +.img-circle { + border-radius: 50%; +} +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eee; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} +[role="button"] { + cursor: pointer; +} +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small, +.h1 small, +.h2 small, +.h3 small, +.h4 small, +.h5 small, +.h6 small, +h1 .small, +h2 .small, +h3 .small, +h4 .small, +h5 .small, +h6 .small, +.h1 .small, +.h2 .small, +.h3 .small, +.h4 .small, +.h5 .small, +.h6 .small { + font-weight: normal; + line-height: 1; + color: #777; +} +h1, +.h1, +h2, +.h2, +h3, +.h3 { + margin-top: 20px; + margin-bottom: 10px; +} +h1 small, +.h1 small, +h2 small, +.h2 small, +h3 small, +.h3 small, +h1 .small, +.h1 .small, +h2 .small, +.h2 .small, +h3 .small, +.h3 .small { + font-size: 65%; +} +h4, +.h4, +h5, +.h5, +h6, +.h6 { + margin-top: 10px; + margin-bottom: 10px; +} +h4 small, +.h4 small, +h5 small, +.h5 small, +h6 small, +.h6 small, +h4 .small, +.h4 .small, +h5 .small, +.h5 .small, +h6 .small, +.h6 .small { + font-size: 75%; +} +h1, +.h1 { + font-size: 36px; +} +h2, +.h2 { + font-size: 30px; +} +h3, +.h3 { + font-size: 24px; +} +h4, +.h4 { + font-size: 18px; +} +h5, +.h5 { + font-size: 14px; +} +h6, +.h6 { + font-size: 12px; +} +p { + margin: 0 0 10px; +} +.lead { + margin-bottom: 20px; + font-size: 16px; + font-weight: 300; + line-height: 1.4; +} +@media (min-width: 768px) { + .lead { + font-size: 21px; + } +} +small, +.small { + font-size: 85%; +} +mark, +.mark { + padding: .2em; + background-color: #fcf8e3; +} +.text-left { + text-align: left; +} +.text-right { + text-align: right; +} +.text-center { + text-align: center; +} +.text-justify { + text-align: justify; +} +.text-nowrap { + white-space: nowrap; +} +.text-lowercase { + text-transform: lowercase; +} +.text-uppercase { + text-transform: uppercase; +} +.text-capitalize { + text-transform: capitalize; +} +.text-muted { + color: #777; +} +.text-primary { + color: #337ab7; +} +a.text-primary:hover, +a.text-primary:focus { + color: #286090; +} +.text-success { + color: #3c763d; +} +a.text-success:hover, +a.text-success:focus { + color: #2b542c; +} +.text-info { + color: #31708f; +} +a.text-info:hover, +a.text-info:focus { + color: #245269; +} +.text-warning { + color: #8a6d3b; +} +a.text-warning:hover, +a.text-warning:focus { + color: #66512c; +} +.text-danger { + color: #a94442; +} +a.text-danger:hover, +a.text-danger:focus { + color: #843534; +} +.bg-primary { + color: #fff; + background-color: #337ab7; +} +a.bg-primary:hover, +a.bg-primary:focus { + background-color: #286090; +} +.bg-success { + background-color: #dff0d8; +} +a.bg-success:hover, +a.bg-success:focus { + background-color: #c1e2b3; +} +.bg-info { + background-color: #d9edf7; +} +a.bg-info:hover, +a.bg-info:focus { + background-color: #afd9ee; +} +.bg-warning { + background-color: #fcf8e3; +} +a.bg-warning:hover, +a.bg-warning:focus { + background-color: #f7ecb5; +} +.bg-danger { + background-color: #f2dede; +} +a.bg-danger:hover, +a.bg-danger:focus { + background-color: #e4b9b9; +} +.page-header { + padding-bottom: 9px; + margin: 40px 0 20px; + border-bottom: 1px solid #eee; +} +ul, +ol { + margin-top: 0; + margin-bottom: 10px; +} +ul ul, +ol ul, +ul ol, +ol ol { + margin-bottom: 0; +} +.list-unstyled { + padding-left: 0; + list-style: none; +} +.list-inline { + padding-left: 0; + margin-left: -5px; + list-style: none; +} +.list-inline > li { + display: inline-block; + padding-right: 5px; + padding-left: 5px; +} +dl { + margin-top: 0; + margin-bottom: 20px; +} +dt, +dd { + line-height: 1.42857143; +} +dt { + font-weight: bold; +} +dd { + margin-left: 0; +} +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + overflow: hidden; + clear: left; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap; + } + .dl-horizontal dd { + margin-left: 180px; + } +} +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #777; +} +.initialism { + font-size: 90%; + text-transform: uppercase; +} +blockquote { + padding: 10px 20px; + margin: 0 0 20px; + font-size: 17.5px; + border-left: 5px solid #eee; +} +blockquote p:last-child, +blockquote ul:last-child, +blockquote ol:last-child { + margin-bottom: 0; +} +blockquote footer, +blockquote small, +blockquote .small { + display: block; + font-size: 80%; + line-height: 1.42857143; + color: #777; +} +blockquote footer:before, +blockquote small:before, +blockquote .small:before { + content: '\2014 \00A0'; +} +.blockquote-reverse, +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + text-align: right; + border-right: 5px solid #eee; + border-left: 0; +} +.blockquote-reverse footer:before, +blockquote.pull-right footer:before, +.blockquote-reverse small:before, +blockquote.pull-right small:before, +.blockquote-reverse .small:before, +blockquote.pull-right .small:before { + content: ''; +} +.blockquote-reverse footer:after, +blockquote.pull-right footer:after, +.blockquote-reverse small:after, +blockquote.pull-right small:after, +.blockquote-reverse .small:after, +blockquote.pull-right .small:after { + content: '\00A0 \2014'; +} +address { + margin-bottom: 20px; + font-style: normal; + line-height: 1.42857143; +} +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + background-color: #f9f2f4; + border-radius: 4px; +} +kbd { + padding: 2px 4px; + font-size: 90%; + color: #fff; + background-color: #333; + border-radius: 3px; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); +} +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: bold; + -webkit-box-shadow: none; + box-shadow: none; +} +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.42857143; + color: #333; + word-break: break-all; + word-wrap: break-word; + background-color: #f5f5f5; + border: 1px solid #ccc; + border-radius: 4px; +} +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; +} +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} +.container { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +@media (min-width: 768px) { + .container { + width: 750px; + } +} +@media (min-width: 992px) { + .container { + width: 970px; + } +} +@media (min-width: 1200px) { + .container { + width: 1170px; + } +} +.container-fluid { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +.row { + margin-right: -15px; + margin-left: -15px; +} +.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { + position: relative; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; +} +.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { + float: left; +} +.col-xs-12 { + width: 100%; +} +.col-xs-11 { + width: 91.66666667%; +} +.col-xs-10 { + width: 83.33333333%; +} +.col-xs-9 { + width: 75%; +} +.col-xs-8 { + width: 66.66666667%; +} +.col-xs-7 { + width: 58.33333333%; +} +.col-xs-6 { + width: 50%; +} +.col-xs-5 { + width: 41.66666667%; +} +.col-xs-4 { + width: 33.33333333%; +} +.col-xs-3 { + width: 25%; +} +.col-xs-2 { + width: 16.66666667%; +} +.col-xs-1 { + width: 8.33333333%; +} +.col-xs-pull-12 { + right: 100%; +} +.col-xs-pull-11 { + right: 91.66666667%; +} +.col-xs-pull-10 { + right: 83.33333333%; +} +.col-xs-pull-9 { + right: 75%; +} +.col-xs-pull-8 { + right: 66.66666667%; +} +.col-xs-pull-7 { + right: 58.33333333%; +} +.col-xs-pull-6 { + right: 50%; +} +.col-xs-pull-5 { + right: 41.66666667%; +} +.col-xs-pull-4 { + right: 33.33333333%; +} +.col-xs-pull-3 { + right: 25%; +} +.col-xs-pull-2 { + right: 16.66666667%; +} +.col-xs-pull-1 { + right: 8.33333333%; +} +.col-xs-pull-0 { + right: auto; +} +.col-xs-push-12 { + left: 100%; +} +.col-xs-push-11 { + left: 91.66666667%; +} +.col-xs-push-10 { + left: 83.33333333%; +} +.col-xs-push-9 { + left: 75%; +} +.col-xs-push-8 { + left: 66.66666667%; +} +.col-xs-push-7 { + left: 58.33333333%; +} +.col-xs-push-6 { + left: 50%; +} +.col-xs-push-5 { + left: 41.66666667%; +} +.col-xs-push-4 { + left: 33.33333333%; +} +.col-xs-push-3 { + left: 25%; +} +.col-xs-push-2 { + left: 16.66666667%; +} +.col-xs-push-1 { + left: 8.33333333%; +} +.col-xs-push-0 { + left: auto; +} +.col-xs-offset-12 { + margin-left: 100%; +} +.col-xs-offset-11 { + margin-left: 91.66666667%; +} +.col-xs-offset-10 { + margin-left: 83.33333333%; +} +.col-xs-offset-9 { + margin-left: 75%; +} +.col-xs-offset-8 { + margin-left: 66.66666667%; +} +.col-xs-offset-7 { + margin-left: 58.33333333%; +} +.col-xs-offset-6 { + margin-left: 50%; +} +.col-xs-offset-5 { + margin-left: 41.66666667%; +} +.col-xs-offset-4 { + margin-left: 33.33333333%; +} +.col-xs-offset-3 { + margin-left: 25%; +} +.col-xs-offset-2 { + margin-left: 16.66666667%; +} +.col-xs-offset-1 { + margin-left: 8.33333333%; +} +.col-xs-offset-0 { + margin-left: 0; +} +@media (min-width: 768px) { + .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { + float: left; + } + .col-sm-12 { + width: 100%; + } + .col-sm-11 { + width: 91.66666667%; + } + .col-sm-10 { + width: 83.33333333%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-8 { + width: 66.66666667%; + } + .col-sm-7 { + width: 58.33333333%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-5 { + width: 41.66666667%; + } + .col-sm-4 { + width: 33.33333333%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-2 { + width: 16.66666667%; + } + .col-sm-1 { + width: 8.33333333%; + } + .col-sm-pull-12 { + right: 100%; + } + .col-sm-pull-11 { + right: 91.66666667%; + } + .col-sm-pull-10 { + right: 83.33333333%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-8 { + right: 66.66666667%; + } + .col-sm-pull-7 { + right: 58.33333333%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-5 { + right: 41.66666667%; + } + .col-sm-pull-4 { + right: 33.33333333%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-2 { + right: 16.66666667%; + } + .col-sm-pull-1 { + right: 8.33333333%; + } + .col-sm-pull-0 { + right: auto; + } + .col-sm-push-12 { + left: 100%; + } + .col-sm-push-11 { + left: 91.66666667%; + } + .col-sm-push-10 { + left: 83.33333333%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-8 { + left: 66.66666667%; + } + .col-sm-push-7 { + left: 58.33333333%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-5 { + left: 41.66666667%; + } + .col-sm-push-4 { + left: 33.33333333%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-2 { + left: 16.66666667%; + } + .col-sm-push-1 { + left: 8.33333333%; + } + .col-sm-push-0 { + left: auto; + } + .col-sm-offset-12 { + margin-left: 100%; + } + .col-sm-offset-11 { + margin-left: 91.66666667%; + } + .col-sm-offset-10 { + margin-left: 83.33333333%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-8 { + margin-left: 66.66666667%; + } + .col-sm-offset-7 { + margin-left: 58.33333333%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-5 { + margin-left: 41.66666667%; + } + .col-sm-offset-4 { + margin-left: 33.33333333%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-2 { + margin-left: 16.66666667%; + } + .col-sm-offset-1 { + margin-left: 8.33333333%; + } + .col-sm-offset-0 { + margin-left: 0; + } +} +@media (min-width: 992px) { + .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { + float: left; + } + .col-md-12 { + width: 100%; + } + .col-md-11 { + width: 91.66666667%; + } + .col-md-10 { + width: 83.33333333%; + } + .col-md-9 { + width: 75%; + } + .col-md-8 { + width: 66.66666667%; + } + .col-md-7 { + width: 58.33333333%; + } + .col-md-6 { + width: 50%; + } + .col-md-5 { + width: 41.66666667%; + } + .col-md-4 { + width: 33.33333333%; + } + .col-md-3 { + width: 25%; + } + .col-md-2 { + width: 16.66666667%; + } + .col-md-1 { + width: 8.33333333%; + } + .col-md-pull-12 { + right: 100%; + } + .col-md-pull-11 { + right: 91.66666667%; + } + .col-md-pull-10 { + right: 83.33333333%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-8 { + right: 66.66666667%; + } + .col-md-pull-7 { + right: 58.33333333%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-5 { + right: 41.66666667%; + } + .col-md-pull-4 { + right: 33.33333333%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-2 { + right: 16.66666667%; + } + .col-md-pull-1 { + right: 8.33333333%; + } + .col-md-pull-0 { + right: auto; + } + .col-md-push-12 { + left: 100%; + } + .col-md-push-11 { + left: 91.66666667%; + } + .col-md-push-10 { + left: 83.33333333%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-8 { + left: 66.66666667%; + } + .col-md-push-7 { + left: 58.33333333%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-5 { + left: 41.66666667%; + } + .col-md-push-4 { + left: 33.33333333%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-2 { + left: 16.66666667%; + } + .col-md-push-1 { + left: 8.33333333%; + } + .col-md-push-0 { + left: auto; + } + .col-md-offset-12 { + margin-left: 100%; + } + .col-md-offset-11 { + margin-left: 91.66666667%; + } + .col-md-offset-10 { + margin-left: 83.33333333%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-8 { + margin-left: 66.66666667%; + } + .col-md-offset-7 { + margin-left: 58.33333333%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-5 { + margin-left: 41.66666667%; + } + .col-md-offset-4 { + margin-left: 33.33333333%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-2 { + margin-left: 16.66666667%; + } + .col-md-offset-1 { + margin-left: 8.33333333%; + } + .col-md-offset-0 { + margin-left: 0; + } +} +@media (min-width: 1200px) { + .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { + float: left; + } + .col-lg-12 { + width: 100%; + } + .col-lg-11 { + width: 91.66666667%; + } + .col-lg-10 { + width: 83.33333333%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-8 { + width: 66.66666667%; + } + .col-lg-7 { + width: 58.33333333%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-5 { + width: 41.66666667%; + } + .col-lg-4 { + width: 33.33333333%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-2 { + width: 16.66666667%; + } + .col-lg-1 { + width: 8.33333333%; + } + .col-lg-pull-12 { + right: 100%; + } + .col-lg-pull-11 { + right: 91.66666667%; + } + .col-lg-pull-10 { + right: 83.33333333%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-8 { + right: 66.66666667%; + } + .col-lg-pull-7 { + right: 58.33333333%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-5 { + right: 41.66666667%; + } + .col-lg-pull-4 { + right: 33.33333333%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-2 { + right: 16.66666667%; + } + .col-lg-pull-1 { + right: 8.33333333%; + } + .col-lg-pull-0 { + right: auto; + } + .col-lg-push-12 { + left: 100%; + } + .col-lg-push-11 { + left: 91.66666667%; + } + .col-lg-push-10 { + left: 83.33333333%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-8 { + left: 66.66666667%; + } + .col-lg-push-7 { + left: 58.33333333%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-5 { + left: 41.66666667%; + } + .col-lg-push-4 { + left: 33.33333333%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-2 { + left: 16.66666667%; + } + .col-lg-push-1 { + left: 8.33333333%; + } + .col-lg-push-0 { + left: auto; + } + .col-lg-offset-12 { + margin-left: 100%; + } + .col-lg-offset-11 { + margin-left: 91.66666667%; + } + .col-lg-offset-10 { + margin-left: 83.33333333%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-8 { + margin-left: 66.66666667%; + } + .col-lg-offset-7 { + margin-left: 58.33333333%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-5 { + margin-left: 41.66666667%; + } + .col-lg-offset-4 { + margin-left: 33.33333333%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-2 { + margin-left: 16.66666667%; + } + .col-lg-offset-1 { + margin-left: 8.33333333%; + } + .col-lg-offset-0 { + margin-left: 0; + } +} +table { + background-color: transparent; +} +caption { + padding-top: 8px; + padding-bottom: 8px; + color: #777; + text-align: left; +} +th { + text-align: left; +} +.table { + width: 100%; + max-width: 100%; + margin-bottom: 20px; +} +.table > thead > tr > th, +.table > tbody > tr > th, +.table > tfoot > tr > th, +.table > thead > tr > td, +.table > tbody > tr > td, +.table > tfoot > tr > td { + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid #ddd; +} +.table > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #ddd; +} +.table > caption + thead > tr:first-child > th, +.table > colgroup + thead > tr:first-child > th, +.table > thead:first-child > tr:first-child > th, +.table > caption + thead > tr:first-child > td, +.table > colgroup + thead > tr:first-child > td, +.table > thead:first-child > tr:first-child > td { + border-top: 0; +} +.table > tbody + tbody { + border-top: 2px solid #ddd; +} +.table .table { + background-color: #fff; +} +.table-condensed > thead > tr > th, +.table-condensed > tbody > tr > th, +.table-condensed > tfoot > tr > th, +.table-condensed > thead > tr > td, +.table-condensed > tbody > tr > td, +.table-condensed > tfoot > tr > td { + padding: 5px; +} +.table-bordered { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > tbody > tr > th, +.table-bordered > tfoot > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > td { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} +.table-striped > tbody > tr:nth-of-type(odd) { + background-color: #f9f9f9; +} +.table-hover > tbody > tr:hover { + background-color: #f5f5f5; +} +table col[class*="col-"] { + position: static; + display: table-column; + float: none; +} +table td[class*="col-"], +table th[class*="col-"] { + position: static; + display: table-cell; + float: none; +} +.table > thead > tr > td.active, +.table > tbody > tr > td.active, +.table > tfoot > tr > td.active, +.table > thead > tr > th.active, +.table > tbody > tr > th.active, +.table > tfoot > tr > th.active, +.table > thead > tr.active > td, +.table > tbody > tr.active > td, +.table > tfoot > tr.active > td, +.table > thead > tr.active > th, +.table > tbody > tr.active > th, +.table > tfoot > tr.active > th { + background-color: #f5f5f5; +} +.table-hover > tbody > tr > td.active:hover, +.table-hover > tbody > tr > th.active:hover, +.table-hover > tbody > tr.active:hover > td, +.table-hover > tbody > tr:hover > .active, +.table-hover > tbody > tr.active:hover > th { + background-color: #e8e8e8; +} +.table > thead > tr > td.success, +.table > tbody > tr > td.success, +.table > tfoot > tr > td.success, +.table > thead > tr > th.success, +.table > tbody > tr > th.success, +.table > tfoot > tr > th.success, +.table > thead > tr.success > td, +.table > tbody > tr.success > td, +.table > tfoot > tr.success > td, +.table > thead > tr.success > th, +.table > tbody > tr.success > th, +.table > tfoot > tr.success > th { + background-color: #dff0d8; +} +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, +.table-hover > tbody > tr.success:hover > td, +.table-hover > tbody > tr:hover > .success, +.table-hover > tbody > tr.success:hover > th { + background-color: #d0e9c6; +} +.table > thead > tr > td.info, +.table > tbody > tr > td.info, +.table > tfoot > tr > td.info, +.table > thead > tr > th.info, +.table > tbody > tr > th.info, +.table > tfoot > tr > th.info, +.table > thead > tr.info > td, +.table > tbody > tr.info > td, +.table > tfoot > tr.info > td, +.table > thead > tr.info > th, +.table > tbody > tr.info > th, +.table > tfoot > tr.info > th { + background-color: #d9edf7; +} +.table-hover > tbody > tr > td.info:hover, +.table-hover > tbody > tr > th.info:hover, +.table-hover > tbody > tr.info:hover > td, +.table-hover > tbody > tr:hover > .info, +.table-hover > tbody > tr.info:hover > th { + background-color: #c4e3f3; +} +.table > thead > tr > td.warning, +.table > tbody > tr > td.warning, +.table > tfoot > tr > td.warning, +.table > thead > tr > th.warning, +.table > tbody > tr > th.warning, +.table > tfoot > tr > th.warning, +.table > thead > tr.warning > td, +.table > tbody > tr.warning > td, +.table > tfoot > tr.warning > td, +.table > thead > tr.warning > th, +.table > tbody > tr.warning > th, +.table > tfoot > tr.warning > th { + background-color: #fcf8e3; +} +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, +.table-hover > tbody > tr.warning:hover > td, +.table-hover > tbody > tr:hover > .warning, +.table-hover > tbody > tr.warning:hover > th { + background-color: #faf2cc; +} +.table > thead > tr > td.danger, +.table > tbody > tr > td.danger, +.table > tfoot > tr > td.danger, +.table > thead > tr > th.danger, +.table > tbody > tr > th.danger, +.table > tfoot > tr > th.danger, +.table > thead > tr.danger > td, +.table > tbody > tr.danger > td, +.table > tfoot > tr.danger > td, +.table > thead > tr.danger > th, +.table > tbody > tr.danger > th, +.table > tfoot > tr.danger > th { + background-color: #f2dede; +} +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, +.table-hover > tbody > tr.danger:hover > td, +.table-hover > tbody > tr:hover > .danger, +.table-hover > tbody > tr.danger:hover > th { + background-color: #ebcccc; +} +.table-responsive { + min-height: .01%; + overflow-x: auto; +} +@media screen and (max-width: 767px) { + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-y: hidden; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #ddd; + } + .table-responsive > .table { + margin-bottom: 0; + } + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + .table-responsive > .table-bordered { + border: 0; + } + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: #333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} +label { + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + font-weight: bold; +} +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + line-height: normal; +} +input[type="file"] { + display: block; +} +input[type="range"] { + display: block; + width: 100%; +} +select[multiple], +select[size] { + height: auto; +} +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +output { + display: block; + padding-top: 7px; + font-size: 14px; + line-height: 1.42857143; + color: #555; +} +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +.form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); +} +.form-control::-moz-placeholder { + color: #999; + opacity: 1; +} +.form-control:-ms-input-placeholder { + color: #999; +} +.form-control::-webkit-input-placeholder { + color: #999; +} +.form-control::-ms-expand { + background-color: transparent; + border: 0; +} +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + background-color: #eee; + opacity: 1; +} +.form-control[disabled], +fieldset[disabled] .form-control { + cursor: not-allowed; +} +textarea.form-control { + height: auto; +} +input[type="search"] { + -webkit-appearance: none; +} +@media screen and (-webkit-min-device-pixel-ratio: 0) { + input[type="date"].form-control, + input[type="time"].form-control, + input[type="datetime-local"].form-control, + input[type="month"].form-control { + line-height: 34px; + } + input[type="date"].input-sm, + input[type="time"].input-sm, + input[type="datetime-local"].input-sm, + input[type="month"].input-sm, + .input-group-sm input[type="date"], + .input-group-sm input[type="time"], + .input-group-sm input[type="datetime-local"], + .input-group-sm input[type="month"] { + line-height: 30px; + } + input[type="date"].input-lg, + input[type="time"].input-lg, + input[type="datetime-local"].input-lg, + input[type="month"].input-lg, + .input-group-lg input[type="date"], + .input-group-lg input[type="time"], + .input-group-lg input[type="datetime-local"], + .input-group-lg input[type="month"] { + line-height: 46px; + } +} +.form-group { + margin-bottom: 15px; +} +.radio, +.checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; +} +.radio label, +.checkbox label { + min-height: 20px; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + position: absolute; + margin-top: 4px \9; + margin-left: -20px; +} +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} +.radio-inline, +.checkbox-inline { + position: relative; + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + vertical-align: middle; + cursor: pointer; +} +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"].disabled, +input[type="checkbox"].disabled, +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"] { + cursor: not-allowed; +} +.radio-inline.disabled, +.checkbox-inline.disabled, +fieldset[disabled] .radio-inline, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} +.radio.disabled label, +.checkbox.disabled label, +fieldset[disabled] .radio label, +fieldset[disabled] .checkbox label { + cursor: not-allowed; +} +.form-control-static { + min-height: 34px; + padding-top: 7px; + padding-bottom: 7px; + margin-bottom: 0; +} +.form-control-static.input-lg, +.form-control-static.input-sm { + padding-right: 0; + padding-left: 0; +} +.input-sm { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-sm { + height: 30px; + line-height: 30px; +} +textarea.input-sm, +select[multiple].input-sm { + height: auto; +} +.form-group-sm .form-control { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.form-group-sm select.form-control { + height: 30px; + line-height: 30px; +} +.form-group-sm textarea.form-control, +.form-group-sm select[multiple].form-control { + height: auto; +} +.form-group-sm .form-control-static { + height: 30px; + min-height: 32px; + padding: 6px 10px; + font-size: 12px; + line-height: 1.5; +} +.input-lg { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +select.input-lg { + height: 46px; + line-height: 46px; +} +textarea.input-lg, +select[multiple].input-lg { + height: auto; +} +.form-group-lg .form-control { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +.form-group-lg select.form-control { + height: 46px; + line-height: 46px; +} +.form-group-lg textarea.form-control, +.form-group-lg select[multiple].form-control { + height: auto; +} +.form-group-lg .form-control-static { + height: 46px; + min-height: 38px; + padding: 11px 16px; + font-size: 18px; + line-height: 1.3333333; +} +.has-feedback { + position: relative; +} +.has-feedback .form-control { + padding-right: 42.5px; +} +.form-control-feedback { + position: absolute; + top: 0; + right: 0; + z-index: 2; + display: block; + width: 34px; + height: 34px; + line-height: 34px; + text-align: center; + pointer-events: none; +} +.input-lg + .form-control-feedback, +.input-group-lg + .form-control-feedback, +.form-group-lg .form-control + .form-control-feedback { + width: 46px; + height: 46px; + line-height: 46px; +} +.input-sm + .form-control-feedback, +.input-group-sm + .form-control-feedback, +.form-group-sm .form-control + .form-control-feedback { + width: 30px; + height: 30px; + line-height: 30px; +} +.has-success .help-block, +.has-success .control-label, +.has-success .radio, +.has-success .checkbox, +.has-success .radio-inline, +.has-success .checkbox-inline, +.has-success.radio label, +.has-success.checkbox label, +.has-success.radio-inline label, +.has-success.checkbox-inline label { + color: #3c763d; +} +.has-success .form-control { + border-color: #3c763d; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-success .form-control:focus { + border-color: #2b542c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; +} +.has-success .input-group-addon { + color: #3c763d; + background-color: #dff0d8; + border-color: #3c763d; +} +.has-success .form-control-feedback { + color: #3c763d; +} +.has-warning .help-block, +.has-warning .control-label, +.has-warning .radio, +.has-warning .checkbox, +.has-warning .radio-inline, +.has-warning .checkbox-inline, +.has-warning.radio label, +.has-warning.checkbox label, +.has-warning.radio-inline label, +.has-warning.checkbox-inline label { + color: #8a6d3b; +} +.has-warning .form-control { + border-color: #8a6d3b; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-warning .form-control:focus { + border-color: #66512c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; +} +.has-warning .input-group-addon { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #8a6d3b; +} +.has-warning .form-control-feedback { + color: #8a6d3b; +} +.has-error .help-block, +.has-error .control-label, +.has-error .radio, +.has-error .checkbox, +.has-error .radio-inline, +.has-error .checkbox-inline, +.has-error.radio label, +.has-error.checkbox label, +.has-error.radio-inline label, +.has-error.checkbox-inline label { + color: #a94442; +} +.has-error .form-control { + border-color: #a94442; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-error .form-control:focus { + border-color: #843534; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; +} +.has-error .input-group-addon { + color: #a94442; + background-color: #f2dede; + border-color: #a94442; +} +.has-error .form-control-feedback { + color: #a94442; +} +.has-feedback label ~ .form-control-feedback { + top: 25px; +} +.has-feedback label.sr-only ~ .form-control-feedback { + top: 0; +} +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373; +} +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-static { + display: inline-block; + } + .form-inline .input-group { + display: inline-table; + vertical-align: middle; + } + .form-inline .input-group .input-group-addon, + .form-inline .input-group .input-group-btn, + .form-inline .input-group .form-control { + width: auto; + } + .form-inline .input-group > .form-control { + width: 100%; + } + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio label, + .form-inline .checkbox label { + padding-left: 0; + } + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + padding-top: 7px; + margin-top: 0; + margin-bottom: 0; +} +.form-horizontal .radio, +.form-horizontal .checkbox { + min-height: 27px; +} +.form-horizontal .form-group { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .form-horizontal .control-label { + padding-top: 7px; + margin-bottom: 0; + text-align: right; + } +} +.form-horizontal .has-feedback .form-control-feedback { + right: 15px; +} +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { + padding-top: 11px; + font-size: 18px; + } +} +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { + padding-top: 6px; + font-size: 12px; + } +} +.btn { + display: inline-block; + padding: 6px 12px; + margin-bottom: 0; + font-size: 14px; + font-weight: normal; + line-height: 1.42857143; + text-align: center; + white-space: nowrap; + vertical-align: middle; + -ms-touch-action: manipulation; + touch-action: manipulation; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.btn:focus, +.btn:active:focus, +.btn.active:focus, +.btn.focus, +.btn:active.focus, +.btn.active.focus { + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.btn:hover, +.btn:focus, +.btn.focus { + color: #333; + text-decoration: none; +} +.btn:active, +.btn.active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + cursor: not-allowed; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; + opacity: .65; +} +a.btn.disabled, +fieldset[disabled] a.btn { + pointer-events: none; +} +.btn-default { + color: #333; + background-color: #fff; + border-color: #ccc; +} +.btn-default:focus, +.btn-default.focus { + color: #333; + background-color: #e6e6e6; + border-color: #8c8c8c; +} +.btn-default:hover { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active:hover, +.btn-default.active:hover, +.open > .dropdown-toggle.btn-default:hover, +.btn-default:active:focus, +.btn-default.active:focus, +.open > .dropdown-toggle.btn-default:focus, +.btn-default:active.focus, +.btn-default.active.focus, +.open > .dropdown-toggle.btn-default.focus { + color: #333; + background-color: #d4d4d4; + border-color: #8c8c8c; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + background-image: none; +} +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled.focus, +.btn-default[disabled].focus, +fieldset[disabled] .btn-default.focus { + background-color: #fff; + border-color: #ccc; +} +.btn-default .badge { + color: #fff; + background-color: #333; +} +.btn-primary { + color: #fff; + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary:focus, +.btn-primary.focus { + color: #fff; + background-color: #286090; + border-color: #122b40; +} +.btn-primary:hover { + color: #fff; + background-color: #286090; + border-color: #204d74; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + color: #fff; + background-color: #286090; + border-color: #204d74; +} +.btn-primary:active:hover, +.btn-primary.active:hover, +.open > .dropdown-toggle.btn-primary:hover, +.btn-primary:active:focus, +.btn-primary.active:focus, +.open > .dropdown-toggle.btn-primary:focus, +.btn-primary:active.focus, +.btn-primary.active.focus, +.open > .dropdown-toggle.btn-primary.focus { + color: #fff; + background-color: #204d74; + border-color: #122b40; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + background-image: none; +} +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled.focus, +.btn-primary[disabled].focus, +fieldset[disabled] .btn-primary.focus { + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary .badge { + color: #337ab7; + background-color: #fff; +} +.btn-success { + color: #fff; + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success:focus, +.btn-success.focus { + color: #fff; + background-color: #449d44; + border-color: #255625; +} +.btn-success:hover { + color: #fff; + background-color: #449d44; + border-color: #398439; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + color: #fff; + background-color: #449d44; + border-color: #398439; +} +.btn-success:active:hover, +.btn-success.active:hover, +.open > .dropdown-toggle.btn-success:hover, +.btn-success:active:focus, +.btn-success.active:focus, +.open > .dropdown-toggle.btn-success:focus, +.btn-success:active.focus, +.btn-success.active.focus, +.open > .dropdown-toggle.btn-success.focus { + color: #fff; + background-color: #398439; + border-color: #255625; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + background-image: none; +} +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled.focus, +.btn-success[disabled].focus, +fieldset[disabled] .btn-success.focus { + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success .badge { + color: #5cb85c; + background-color: #fff; +} +.btn-info { + color: #fff; + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info:focus, +.btn-info.focus { + color: #fff; + background-color: #31b0d5; + border-color: #1b6d85; +} +.btn-info:hover { + color: #fff; + background-color: #31b0d5; + border-color: #269abc; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + color: #fff; + background-color: #31b0d5; + border-color: #269abc; +} +.btn-info:active:hover, +.btn-info.active:hover, +.open > .dropdown-toggle.btn-info:hover, +.btn-info:active:focus, +.btn-info.active:focus, +.open > .dropdown-toggle.btn-info:focus, +.btn-info:active.focus, +.btn-info.active.focus, +.open > .dropdown-toggle.btn-info.focus { + color: #fff; + background-color: #269abc; + border-color: #1b6d85; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + background-image: none; +} +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled.focus, +.btn-info[disabled].focus, +fieldset[disabled] .btn-info.focus { + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info .badge { + color: #5bc0de; + background-color: #fff; +} +.btn-warning { + color: #fff; + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning:focus, +.btn-warning.focus { + color: #fff; + background-color: #ec971f; + border-color: #985f0d; +} +.btn-warning:hover { + color: #fff; + background-color: #ec971f; + border-color: #d58512; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + color: #fff; + background-color: #ec971f; + border-color: #d58512; +} +.btn-warning:active:hover, +.btn-warning.active:hover, +.open > .dropdown-toggle.btn-warning:hover, +.btn-warning:active:focus, +.btn-warning.active:focus, +.open > .dropdown-toggle.btn-warning:focus, +.btn-warning:active.focus, +.btn-warning.active.focus, +.open > .dropdown-toggle.btn-warning.focus { + color: #fff; + background-color: #d58512; + border-color: #985f0d; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + background-image: none; +} +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled.focus, +.btn-warning[disabled].focus, +fieldset[disabled] .btn-warning.focus { + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning .badge { + color: #f0ad4e; + background-color: #fff; +} +.btn-danger { + color: #fff; + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger:focus, +.btn-danger.focus { + color: #fff; + background-color: #c9302c; + border-color: #761c19; +} +.btn-danger:hover { + color: #fff; + background-color: #c9302c; + border-color: #ac2925; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + color: #fff; + background-color: #c9302c; + border-color: #ac2925; +} +.btn-danger:active:hover, +.btn-danger.active:hover, +.open > .dropdown-toggle.btn-danger:hover, +.btn-danger:active:focus, +.btn-danger.active:focus, +.open > .dropdown-toggle.btn-danger:focus, +.btn-danger:active.focus, +.btn-danger.active.focus, +.open > .dropdown-toggle.btn-danger.focus { + color: #fff; + background-color: #ac2925; + border-color: #761c19; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + background-image: none; +} +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled.focus, +.btn-danger[disabled].focus, +fieldset[disabled] .btn-danger.focus { + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger .badge { + color: #d9534f; + background-color: #fff; +} +.btn-link { + font-weight: normal; + color: #337ab7; + border-radius: 0; +} +.btn-link, +.btn-link:active, +.btn-link.active, +.btn-link[disabled], +fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-link, +.btn-link:hover, +.btn-link:focus, +.btn-link:active { + border-color: transparent; +} +.btn-link:hover, +.btn-link:focus { + color: #23527c; + text-decoration: underline; + background-color: transparent; +} +.btn-link[disabled]:hover, +fieldset[disabled] .btn-link:hover, +.btn-link[disabled]:focus, +fieldset[disabled] .btn-link:focus { + color: #777; + text-decoration: none; +} +.btn-lg, +.btn-group-lg > .btn { + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +.btn-sm, +.btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-xs, +.btn-group-xs > .btn { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-block { + display: block; + width: 100%; +} +.btn-block + .btn-block { + margin-top: 5px; +} +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} +.fade { + opacity: 0; + -webkit-transition: opacity .15s linear; + -o-transition: opacity .15s linear; + transition: opacity .15s linear; +} +.fade.in { + opacity: 1; +} +.collapse { + display: none; +} +.collapse.in { + display: block; +} +tr.collapse.in { + display: table-row; +} +tbody.collapse.in { + display: table-row-group; +} +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-property: height, visibility; + -o-transition-property: height, visibility; + transition-property: height, visibility; +} +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px dashed; + border-top: 4px solid \9; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} +.dropup, +.dropdown { + position: relative; +} +.dropdown-toggle:focus { + outline: 0; +} +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + font-size: 14px; + text-align: left; + list-style: none; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, .15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); + box-shadow: 0 6px 12px rgba(0, 0, 0, .175); +} +.dropdown-menu.pull-right { + right: 0; + left: auto; +} +.dropdown-menu .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.42857143; + color: #333; + white-space: nowrap; +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + color: #262626; + text-decoration: none; + background-color: #f5f5f5; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #fff; + text-decoration: none; + background-color: #337ab7; + outline: 0; +} +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #777; +} +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + cursor: not-allowed; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.open > .dropdown-menu { + display: block; +} +.open > a { + outline: 0; +} +.dropdown-menu-right { + right: 0; + left: auto; +} +.dropdown-menu-left { + right: auto; + left: 0; +} +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.42857143; + color: #777; + white-space: nowrap; +} +.dropdown-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 990; +} +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + content: ""; + border-top: 0; + border-bottom: 4px dashed; + border-bottom: 4px solid \9; +} +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 2px; +} +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + right: 0; + left: auto; + } + .navbar-right .dropdown-menu-left { + right: auto; + left: 0; + } +} +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover, +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus, +.btn-group > .btn:active, +.btn-group-vertical > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn.active { + z-index: 2; +} +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -1px; +} +.btn-toolbar { + margin-left: -5px; +} +.btn-toolbar .btn, +.btn-toolbar .btn-group, +.btn-toolbar .input-group { + float: left; +} +.btn-toolbar > .btn, +.btn-toolbar > .btn-group, +.btn-toolbar > .input-group { + margin-left: 5px; +} +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} +.btn-group > .btn:first-child { + margin-left: 0; +} +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group > .btn-group { + float: left; +} +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} +.btn-group > .btn + .dropdown-toggle { + padding-right: 8px; + padding-left: 8px; +} +.btn-group > .btn-lg + .dropdown-toggle { + padding-right: 12px; + padding-left: 12px; +} +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn-group.open .dropdown-toggle.btn-link { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn .caret { + margin-left: 0; +} +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0; +} +.dropup .btn-lg .caret { + border-width: 0 5px 5px; +} +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group, +.btn-group-vertical > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; +} +.btn-group-vertical > .btn-group > .btn { + float: none; +} +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; +} +.btn-group-justified > .btn, +.btn-group-justified > .btn-group { + display: table-cell; + float: none; + width: 1%; +} +.btn-group-justified > .btn-group .btn { + width: 100%; +} +.btn-group-justified > .btn-group .dropdown-menu { + left: auto; +} +[data-toggle="buttons"] > .btn input[type="radio"], +[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], +[data-toggle="buttons"] > .btn input[type="checkbox"], +[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} +.input-group { + position: relative; + display: table; + border-collapse: separate; +} +.input-group[class*="col-"] { + float: none; + padding-right: 0; + padding-left: 0; +} +.input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; +} +.input-group .form-control:focus { + z-index: 3; +} +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +select.input-group-lg > .form-control, +select.input-group-lg > .input-group-addon, +select.input-group-lg > .input-group-btn > .btn { + height: 46px; + line-height: 46px; +} +textarea.input-group-lg > .form-control, +textarea.input-group-lg > .input-group-addon, +textarea.input-group-lg > .input-group-btn > .btn, +select[multiple].input-group-lg > .form-control, +select[multiple].input-group-lg > .input-group-addon, +select[multiple].input-group-lg > .input-group-btn > .btn { + height: auto; +} +.input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-group-sm > .form-control, +select.input-group-sm > .input-group-addon, +select.input-group-sm > .input-group-btn > .btn { + height: 30px; + line-height: 30px; +} +textarea.input-group-sm > .form-control, +textarea.input-group-sm > .input-group-addon, +textarea.input-group-sm > .input-group-btn > .btn, +select[multiple].input-group-sm > .form-control, +select[multiple].input-group-sm > .input-group-addon, +select[multiple].input-group-sm > .input-group-btn > .btn { + height: auto; +} +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: normal; + line-height: 1; + color: #555; + text-align: center; + background-color: #eee; + border: 1px solid #ccc; + border-radius: 4px; +} +.input-group-addon.input-sm { + padding: 5px 10px; + font-size: 12px; + border-radius: 3px; +} +.input-group-addon.input-lg { + padding: 10px 16px; + font-size: 18px; + border-radius: 6px; +} +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.input-group-addon:first-child { + border-right: 0; +} +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child), +.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.input-group-addon:last-child { + border-left: 0; +} +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} +.input-group-btn > .btn { + position: relative; +} +.input-group-btn > .btn + .btn { + margin-left: -1px; +} +.input-group-btn > .btn:hover, +.input-group-btn > .btn:focus, +.input-group-btn > .btn:active { + z-index: 2; +} +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group { + margin-right: -1px; +} +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group { + z-index: 2; + margin-left: -1px; +} +.nav { + padding-left: 0; + margin-bottom: 0; + list-style: none; +} +.nav > li { + position: relative; + display: block; +} +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; +} +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eee; +} +.nav > li.disabled > a { + color: #777; +} +.nav > li.disabled > a:hover, +.nav > li.disabled > a:focus { + color: #777; + text-decoration: none; + cursor: not-allowed; + background-color: transparent; +} +.nav .open > a, +.nav .open > a:hover, +.nav .open > a:focus { + background-color: #eee; + border-color: #337ab7; +} +.nav .nav-divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.nav > li > a > img { + max-width: none; +} +.nav-tabs { + border-bottom: 1px solid #ddd; +} +.nav-tabs > li { + float: left; + margin-bottom: -1px; +} +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.42857143; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; +} +.nav-tabs > li > a:hover { + border-color: #eee #eee #ddd; +} +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + color: #555; + cursor: default; + background-color: #fff; + border: 1px solid #ddd; + border-bottom-color: transparent; +} +.nav-tabs.nav-justified { + width: 100%; + border-bottom: 0; +} +.nav-tabs.nav-justified > li { + float: none; +} +.nav-tabs.nav-justified > li > a { + margin-bottom: 5px; + text-align: center; +} +.nav-tabs.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-tabs.nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs.nav-justified > .active > a, +.nav-tabs.nav-justified > .active > a:hover, +.nav-tabs.nav-justified > .active > a:focus { + border: 1px solid #ddd; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs.nav-justified > .active > a, + .nav-tabs.nav-justified > .active > a:hover, + .nav-tabs.nav-justified > .active > a:focus { + border-bottom-color: #fff; + } +} +.nav-pills > li { + float: left; +} +.nav-pills > li > a { + border-radius: 4px; +} +.nav-pills > li + li { + margin-left: 2px; +} +.nav-pills > li.active > a, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:focus { + color: #fff; + background-color: #337ab7; +} +.nav-stacked > li { + float: none; +} +.nav-stacked > li + li { + margin-top: 2px; + margin-left: 0; +} +.nav-justified { + width: 100%; +} +.nav-justified > li { + float: none; +} +.nav-justified > li > a { + margin-bottom: 5px; + text-align: center; +} +.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs-justified { + border-bottom: 0; +} +.nav-tabs-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs-justified > .active > a, +.nav-tabs-justified > .active > a:hover, +.nav-tabs-justified > .active > a:focus { + border: 1px solid #ddd; +} +@media (min-width: 768px) { + .nav-tabs-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs-justified > .active > a, + .nav-tabs-justified > .active > a:hover, + .nav-tabs-justified > .active > a:focus { + border-bottom-color: #fff; + } +} +.tab-content > .tab-pane { + display: none; +} +.tab-content > .active { + display: block; +} +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.navbar { + position: relative; + min-height: 50px; + margin-bottom: 20px; + border: 1px solid transparent; +} +@media (min-width: 768px) { + .navbar { + border-radius: 4px; + } +} +@media (min-width: 768px) { + .navbar-header { + float: left; + } +} +.navbar-collapse { + padding-right: 15px; + padding-left: 15px; + overflow-x: visible; + -webkit-overflow-scrolling: touch; + border-top: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); +} +.navbar-collapse.in { + overflow-y: auto; +} +@media (min-width: 768px) { + .navbar-collapse { + width: auto; + border-top: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-collapse.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; + } + .navbar-collapse.in { + overflow-y: visible; + } + .navbar-fixed-top .navbar-collapse, + .navbar-static-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + padding-right: 0; + padding-left: 0; + } +} +.navbar-fixed-top .navbar-collapse, +.navbar-fixed-bottom .navbar-collapse { + max-height: 340px; +} +@media (max-device-width: 480px) and (orientation: landscape) { + .navbar-fixed-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + max-height: 200px; + } +} +.container > .navbar-header, +.container-fluid > .navbar-header, +.container > .navbar-collapse, +.container-fluid > .navbar-collapse { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .container > .navbar-header, + .container-fluid > .navbar-header, + .container > .navbar-collapse, + .container-fluid > .navbar-collapse { + margin-right: 0; + margin-left: 0; + } +} +.navbar-static-top { + z-index: 1000; + border-width: 0 0 1px; +} +@media (min-width: 768px) { + .navbar-static-top { + border-radius: 0; + } +} +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; +} +@media (min-width: 768px) { + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } +} +.navbar-fixed-top { + top: 0; + border-width: 0 0 1px; +} +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; + border-width: 1px 0 0; +} +.navbar-brand { + float: left; + height: 50px; + padding: 15px 15px; + font-size: 18px; + line-height: 20px; +} +.navbar-brand:hover, +.navbar-brand:focus { + text-decoration: none; +} +.navbar-brand > img { + display: block; +} +@media (min-width: 768px) { + .navbar > .container .navbar-brand, + .navbar > .container-fluid .navbar-brand { + margin-left: -15px; + } +} +.navbar-toggle { + position: relative; + float: right; + padding: 9px 10px; + margin-top: 8px; + margin-right: 15px; + margin-bottom: 8px; + background-color: transparent; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.navbar-toggle:focus { + outline: 0; +} +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; +} +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; +} +@media (min-width: 768px) { + .navbar-toggle { + display: none; + } +} +.navbar-nav { + margin: 7.5px -15px; +} +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 20px; +} +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-nav .open .dropdown-menu > li > a, + .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px; + } + .navbar-nav .open .dropdown-menu > li > a { + line-height: 20px; + } + .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none; + } +} +@media (min-width: 768px) { + .navbar-nav { + float: left; + margin: 0; + } + .navbar-nav > li { + float: left; + } + .navbar-nav > li > a { + padding-top: 15px; + padding-bottom: 15px; + } +} +.navbar-form { + padding: 10px 15px; + margin-top: 8px; + margin-right: -15px; + margin-bottom: 8px; + margin-left: -15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); +} +@media (min-width: 768px) { + .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .navbar-form .form-control-static { + display: inline-block; + } + .navbar-form .input-group { + display: inline-table; + vertical-align: middle; + } + .navbar-form .input-group .input-group-addon, + .navbar-form .input-group .input-group-btn, + .navbar-form .input-group .form-control { + width: auto; + } + .navbar-form .input-group > .form-control { + width: 100%; + } + .navbar-form .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio, + .navbar-form .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio label, + .navbar-form .checkbox label { + padding-left: 0; + } + .navbar-form .radio input[type="radio"], + .navbar-form .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .navbar-form .has-feedback .form-control-feedback { + top: 0; + } +} +@media (max-width: 767px) { + .navbar-form .form-group { + margin-bottom: 5px; + } + .navbar-form .form-group:last-child { + margin-bottom: 0; + } +} +@media (min-width: 768px) { + .navbar-form { + width: auto; + padding-top: 0; + padding-bottom: 0; + margin-right: 0; + margin-left: 0; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } +} +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + margin-bottom: 0; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.navbar-btn { + margin-top: 8px; + margin-bottom: 8px; +} +.navbar-btn.btn-sm { + margin-top: 10px; + margin-bottom: 10px; +} +.navbar-btn.btn-xs { + margin-top: 14px; + margin-bottom: 14px; +} +.navbar-text { + margin-top: 15px; + margin-bottom: 15px; +} +@media (min-width: 768px) { + .navbar-text { + float: left; + margin-right: 15px; + margin-left: 15px; + } +} +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + .navbar-right { + float: right !important; + margin-right: -15px; + } + .navbar-right ~ .navbar-right { + margin-right: 0; + } +} +.navbar-default { + background-color: #f8f8f8; + border-color: #e7e7e7; +} +.navbar-default .navbar-brand { + color: #777; +} +.navbar-default .navbar-brand:hover, +.navbar-default .navbar-brand:focus { + color: #5e5e5e; + background-color: transparent; +} +.navbar-default .navbar-text { + color: #777; +} +.navbar-default .navbar-nav > li > a { + color: #777; +} +.navbar-default .navbar-nav > li > a:hover, +.navbar-default .navbar-nav > li > a:focus { + color: #333; + background-color: transparent; +} +.navbar-default .navbar-nav > .active > a, +.navbar-default .navbar-nav > .active > a:hover, +.navbar-default .navbar-nav > .active > a:focus { + color: #555; + background-color: #e7e7e7; +} +.navbar-default .navbar-nav > .disabled > a, +.navbar-default .navbar-nav > .disabled > a:hover, +.navbar-default .navbar-nav > .disabled > a:focus { + color: #ccc; + background-color: transparent; +} +.navbar-default .navbar-toggle { + border-color: #ddd; +} +.navbar-default .navbar-toggle:hover, +.navbar-default .navbar-toggle:focus { + background-color: #ddd; +} +.navbar-default .navbar-toggle .icon-bar { + background-color: #888; +} +.navbar-default .navbar-collapse, +.navbar-default .navbar-form { + border-color: #e7e7e7; +} +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .open > a:hover, +.navbar-default .navbar-nav > .open > a:focus { + color: #555; + background-color: #e7e7e7; +} +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #777; + } + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #333; + background-color: transparent; + } + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #555; + background-color: #e7e7e7; + } + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #ccc; + background-color: transparent; + } +} +.navbar-default .navbar-link { + color: #777; +} +.navbar-default .navbar-link:hover { + color: #333; +} +.navbar-default .btn-link { + color: #777; +} +.navbar-default .btn-link:hover, +.navbar-default .btn-link:focus { + color: #333; +} +.navbar-default .btn-link[disabled]:hover, +fieldset[disabled] .navbar-default .btn-link:hover, +.navbar-default .btn-link[disabled]:focus, +fieldset[disabled] .navbar-default .btn-link:focus { + color: #ccc; +} +.navbar-inverse { + background-color: #222; + border-color: #080808; +} +.navbar-inverse .navbar-brand { + color: #9d9d9d; +} +.navbar-inverse .navbar-brand:hover, +.navbar-inverse .navbar-brand:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-text { + color: #9d9d9d; +} +.navbar-inverse .navbar-nav > li > a { + color: #9d9d9d; +} +.navbar-inverse .navbar-nav > li > a:hover, +.navbar-inverse .navbar-nav > li > a:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-nav > .active > a, +.navbar-inverse .navbar-nav > .active > a:hover, +.navbar-inverse .navbar-nav > .active > a:focus { + color: #fff; + background-color: #080808; +} +.navbar-inverse .navbar-nav > .disabled > a, +.navbar-inverse .navbar-nav > .disabled > a:hover, +.navbar-inverse .navbar-nav > .disabled > a:focus { + color: #444; + background-color: transparent; +} +.navbar-inverse .navbar-toggle { + border-color: #333; +} +.navbar-inverse .navbar-toggle:hover, +.navbar-inverse .navbar-toggle:focus { + background-color: #333; +} +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #fff; +} +.navbar-inverse .navbar-collapse, +.navbar-inverse .navbar-form { + border-color: #101010; +} +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .open > a:hover, +.navbar-inverse .navbar-nav > .open > a:focus { + color: #fff; + background-color: #080808; +} +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu .divider { + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #9d9d9d; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #fff; + background-color: transparent; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #fff; + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #444; + background-color: transparent; + } +} +.navbar-inverse .navbar-link { + color: #9d9d9d; +} +.navbar-inverse .navbar-link:hover { + color: #fff; +} +.navbar-inverse .btn-link { + color: #9d9d9d; +} +.navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link:focus { + color: #fff; +} +.navbar-inverse .btn-link[disabled]:hover, +fieldset[disabled] .navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link[disabled]:focus, +fieldset[disabled] .navbar-inverse .btn-link:focus { + color: #444; +} +.breadcrumb { + padding: 8px 15px; + margin-bottom: 20px; + list-style: none; + background-color: #f5f5f5; + border-radius: 4px; +} +.breadcrumb > li { + display: inline-block; +} +.breadcrumb > li + li:before { + padding: 0 5px; + color: #ccc; + content: "/\00a0"; +} +.breadcrumb > .active { + color: #777; +} +.pagination { + display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 4px; +} +.pagination > li { + display: inline; +} +.pagination > li > a, +.pagination > li > span { + position: relative; + float: left; + padding: 6px 12px; + margin-left: -1px; + line-height: 1.42857143; + color: #337ab7; + text-decoration: none; + background-color: #fff; + border: 1px solid #ddd; +} +.pagination > li:first-child > a, +.pagination > li:first-child > span { + margin-left: 0; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +.pagination > li > a:hover, +.pagination > li > span:hover, +.pagination > li > a:focus, +.pagination > li > span:focus { + z-index: 2; + color: #23527c; + background-color: #eee; + border-color: #ddd; +} +.pagination > .active > a, +.pagination > .active > span, +.pagination > .active > a:hover, +.pagination > .active > span:hover, +.pagination > .active > a:focus, +.pagination > .active > span:focus { + z-index: 3; + color: #fff; + cursor: default; + background-color: #337ab7; + border-color: #337ab7; +} +.pagination > .disabled > span, +.pagination > .disabled > span:hover, +.pagination > .disabled > span:focus, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + color: #777; + cursor: not-allowed; + background-color: #fff; + border-color: #ddd; +} +.pagination-lg > li > a, +.pagination-lg > li > span { + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; +} +.pagination-lg > li:first-child > a, +.pagination-lg > li:first-child > span { + border-top-left-radius: 6px; + border-bottom-left-radius: 6px; +} +.pagination-lg > li:last-child > a, +.pagination-lg > li:last-child > span { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; +} +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; +} +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} +.pager { + padding-left: 0; + margin: 20px 0; + text-align: center; + list-style: none; +} +.pager li { + display: inline; +} +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 15px; +} +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #eee; +} +.pager .next > a, +.pager .next > span { + float: right; +} +.pager .previous > a, +.pager .previous > span { + float: left; +} +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #777; + cursor: not-allowed; + background-color: #fff; +} +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; +} +a.label:hover, +a.label:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +.label:empty { + display: none; +} +.btn .label { + position: relative; + top: -1px; +} +.label-default { + background-color: #777; +} +.label-default[href]:hover, +.label-default[href]:focus { + background-color: #5e5e5e; +} +.label-primary { + background-color: #337ab7; +} +.label-primary[href]:hover, +.label-primary[href]:focus { + background-color: #286090; +} +.label-success { + background-color: #5cb85c; +} +.label-success[href]:hover, +.label-success[href]:focus { + background-color: #449d44; +} +.label-info { + background-color: #5bc0de; +} +.label-info[href]:hover, +.label-info[href]:focus { + background-color: #31b0d5; +} +.label-warning { + background-color: #f0ad4e; +} +.label-warning[href]:hover, +.label-warning[href]:focus { + background-color: #ec971f; +} +.label-danger { + background-color: #d9534f; +} +.label-danger[href]:hover, +.label-danger[href]:focus { + background-color: #c9302c; +} +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: middle; + background-color: #777; + border-radius: 10px; +} +.badge:empty { + display: none; +} +.btn .badge { + position: relative; + top: -1px; +} +.btn-xs .badge, +.btn-group-xs > .btn .badge { + top: 0; + padding: 1px 5px; +} +a.badge:hover, +a.badge:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +.list-group-item.active > .badge, +.nav-pills > .active > a > .badge { + color: #337ab7; + background-color: #fff; +} +.list-group-item > .badge { + float: right; +} +.list-group-item > .badge + .badge { + margin-right: 5px; +} +.nav-pills > li > a > .badge { + margin-left: 3px; +} +.jumbotron { + padding-top: 30px; + padding-bottom: 30px; + margin-bottom: 30px; + color: inherit; + background-color: #eee; +} +.jumbotron h1, +.jumbotron .h1 { + color: inherit; +} +.jumbotron p { + margin-bottom: 15px; + font-size: 21px; + font-weight: 200; +} +.jumbotron > hr { + border-top-color: #d5d5d5; +} +.container .jumbotron, +.container-fluid .jumbotron { + padding-right: 15px; + padding-left: 15px; + border-radius: 6px; +} +.jumbotron .container { + max-width: 100%; +} +@media screen and (min-width: 768px) { + .jumbotron { + padding-top: 48px; + padding-bottom: 48px; + } + .container .jumbotron, + .container-fluid .jumbotron { + padding-right: 60px; + padding-left: 60px; + } + .jumbotron h1, + .jumbotron .h1 { + font-size: 63px; + } +} +.thumbnail { + display: block; + padding: 4px; + margin-bottom: 20px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: border .2s ease-in-out; + -o-transition: border .2s ease-in-out; + transition: border .2s ease-in-out; +} +.thumbnail > img, +.thumbnail a > img { + margin-right: auto; + margin-left: auto; +} +a.thumbnail:hover, +a.thumbnail:focus, +a.thumbnail.active { + border-color: #337ab7; +} +.thumbnail .caption { + padding: 9px; + color: #333; +} +.alert { + padding: 15px; + margin-bottom: 20px; + border: 1px solid transparent; + border-radius: 4px; +} +.alert h4 { + margin-top: 0; + color: inherit; +} +.alert .alert-link { + font-weight: bold; +} +.alert > p, +.alert > ul { + margin-bottom: 0; +} +.alert > p + p { + margin-top: 5px; +} +.alert-dismissable, +.alert-dismissible { + padding-right: 35px; +} +.alert-dismissable .close, +.alert-dismissible .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; +} +.alert-success { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.alert-success hr { + border-top-color: #c9e2b3; +} +.alert-success .alert-link { + color: #2b542c; +} +.alert-info { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.alert-info hr { + border-top-color: #a6e1ec; +} +.alert-info .alert-link { + color: #245269; +} +.alert-warning { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.alert-warning hr { + border-top-color: #f7e1b5; +} +.alert-warning .alert-link { + color: #66512c; +} +.alert-danger { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.alert-danger hr { + border-top-color: #e4b9c0; +} +.alert-danger .alert-link { + color: #843534; +} +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@-o-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +.progress { + height: 20px; + margin-bottom: 20px; + overflow: hidden; + background-color: #f5f5f5; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); +} +.progress-bar { + float: left; + width: 0; + height: 100%; + font-size: 12px; + line-height: 20px; + color: #fff; + text-align: center; + background-color: #337ab7; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); + -webkit-transition: width .6s ease; + -o-transition: width .6s ease; + transition: width .6s ease; +} +.progress-striped .progress-bar, +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + -webkit-background-size: 40px 40px; + background-size: 40px 40px; +} +.progress.active .progress-bar, +.progress-bar.active { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} +.progress-bar-success { + background-color: #5cb85c; +} +.progress-striped .progress-bar-success { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-info { + background-color: #5bc0de; +} +.progress-striped .progress-bar-info { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-warning { + background-color: #f0ad4e; +} +.progress-striped .progress-bar-warning { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-danger { + background-color: #d9534f; +} +.progress-striped .progress-bar-danger { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.media { + margin-top: 15px; +} +.media:first-child { + margin-top: 0; +} +.media, +.media-body { + overflow: hidden; + zoom: 1; +} +.media-body { + width: 10000px; +} +.media-object { + display: block; +} +.media-object.img-thumbnail { + max-width: none; +} +.media-right, +.media > .pull-right { + padding-left: 10px; +} +.media-left, +.media > .pull-left { + padding-right: 10px; +} +.media-left, +.media-right, +.media-body { + display: table-cell; + vertical-align: top; +} +.media-middle { + vertical-align: middle; +} +.media-bottom { + vertical-align: bottom; +} +.media-heading { + margin-top: 0; + margin-bottom: 5px; +} +.media-list { + padding-left: 0; + list-style: none; +} +.list-group { + padding-left: 0; + margin-bottom: 20px; +} +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid #ddd; +} +.list-group-item:first-child { + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +a.list-group-item, +button.list-group-item { + color: #555; +} +a.list-group-item .list-group-item-heading, +button.list-group-item .list-group-item-heading { + color: #333; +} +a.list-group-item:hover, +button.list-group-item:hover, +a.list-group-item:focus, +button.list-group-item:focus { + color: #555; + text-decoration: none; + background-color: #f5f5f5; +} +button.list-group-item { + width: 100%; + text-align: left; +} +.list-group-item.disabled, +.list-group-item.disabled:hover, +.list-group-item.disabled:focus { + color: #777; + cursor: not-allowed; + background-color: #eee; +} +.list-group-item.disabled .list-group-item-heading, +.list-group-item.disabled:hover .list-group-item-heading, +.list-group-item.disabled:focus .list-group-item-heading { + color: inherit; +} +.list-group-item.disabled .list-group-item-text, +.list-group-item.disabled:hover .list-group-item-text, +.list-group-item.disabled:focus .list-group-item-text { + color: #777; +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + z-index: 2; + color: #fff; + background-color: #337ab7; + border-color: #337ab7; +} +.list-group-item.active .list-group-item-heading, +.list-group-item.active:hover .list-group-item-heading, +.list-group-item.active:focus .list-group-item-heading, +.list-group-item.active .list-group-item-heading > small, +.list-group-item.active:hover .list-group-item-heading > small, +.list-group-item.active:focus .list-group-item-heading > small, +.list-group-item.active .list-group-item-heading > .small, +.list-group-item.active:hover .list-group-item-heading > .small, +.list-group-item.active:focus .list-group-item-heading > .small { + color: inherit; +} +.list-group-item.active .list-group-item-text, +.list-group-item.active:hover .list-group-item-text, +.list-group-item.active:focus .list-group-item-text { + color: #c7ddef; +} +.list-group-item-success { + color: #3c763d; + background-color: #dff0d8; +} +a.list-group-item-success, +button.list-group-item-success { + color: #3c763d; +} +a.list-group-item-success .list-group-item-heading, +button.list-group-item-success .list-group-item-heading { + color: inherit; +} +a.list-group-item-success:hover, +button.list-group-item-success:hover, +a.list-group-item-success:focus, +button.list-group-item-success:focus { + color: #3c763d; + background-color: #d0e9c6; +} +a.list-group-item-success.active, +button.list-group-item-success.active, +a.list-group-item-success.active:hover, +button.list-group-item-success.active:hover, +a.list-group-item-success.active:focus, +button.list-group-item-success.active:focus { + color: #fff; + background-color: #3c763d; + border-color: #3c763d; +} +.list-group-item-info { + color: #31708f; + background-color: #d9edf7; +} +a.list-group-item-info, +button.list-group-item-info { + color: #31708f; +} +a.list-group-item-info .list-group-item-heading, +button.list-group-item-info .list-group-item-heading { + color: inherit; +} +a.list-group-item-info:hover, +button.list-group-item-info:hover, +a.list-group-item-info:focus, +button.list-group-item-info:focus { + color: #31708f; + background-color: #c4e3f3; +} +a.list-group-item-info.active, +button.list-group-item-info.active, +a.list-group-item-info.active:hover, +button.list-group-item-info.active:hover, +a.list-group-item-info.active:focus, +button.list-group-item-info.active:focus { + color: #fff; + background-color: #31708f; + border-color: #31708f; +} +.list-group-item-warning { + color: #8a6d3b; + background-color: #fcf8e3; +} +a.list-group-item-warning, +button.list-group-item-warning { + color: #8a6d3b; +} +a.list-group-item-warning .list-group-item-heading, +button.list-group-item-warning .list-group-item-heading { + color: inherit; +} +a.list-group-item-warning:hover, +button.list-group-item-warning:hover, +a.list-group-item-warning:focus, +button.list-group-item-warning:focus { + color: #8a6d3b; + background-color: #faf2cc; +} +a.list-group-item-warning.active, +button.list-group-item-warning.active, +a.list-group-item-warning.active:hover, +button.list-group-item-warning.active:hover, +a.list-group-item-warning.active:focus, +button.list-group-item-warning.active:focus { + color: #fff; + background-color: #8a6d3b; + border-color: #8a6d3b; +} +.list-group-item-danger { + color: #a94442; + background-color: #f2dede; +} +a.list-group-item-danger, +button.list-group-item-danger { + color: #a94442; +} +a.list-group-item-danger .list-group-item-heading, +button.list-group-item-danger .list-group-item-heading { + color: inherit; +} +a.list-group-item-danger:hover, +button.list-group-item-danger:hover, +a.list-group-item-danger:focus, +button.list-group-item-danger:focus { + color: #a94442; + background-color: #ebcccc; +} +a.list-group-item-danger.active, +button.list-group-item-danger.active, +a.list-group-item-danger.active:hover, +button.list-group-item-danger.active:hover, +a.list-group-item-danger.active:focus, +button.list-group-item-danger.active:focus { + color: #fff; + background-color: #a94442; + border-color: #a94442; +} +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} +.panel { + margin-bottom: 20px; + background-color: #fff; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: 0 1px 1px rgba(0, 0, 0, .05); +} +.panel-body { + padding: 15px; +} +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel-heading > .dropdown .dropdown-toggle { + color: inherit; +} +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 16px; + color: inherit; +} +.panel-title > a, +.panel-title > small, +.panel-title > .small, +.panel-title > small > a, +.panel-title > .small > a { + color: inherit; +} +.panel-footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .list-group, +.panel > .panel-collapse > .list-group { + margin-bottom: 0; +} +.panel > .list-group .list-group-item, +.panel > .panel-collapse > .list-group .list-group-item { + border-width: 1px 0; + border-radius: 0; +} +.panel > .list-group:first-child .list-group-item:first-child, +.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { + border-top: 0; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .list-group:last-child .list-group-item:last-child, +.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { + border-bottom: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; +} +.list-group + .panel-footer { + border-top-width: 0; +} +.panel > .table, +.panel > .table-responsive > .table, +.panel > .panel-collapse > .table { + margin-bottom: 0; +} +.panel > .table caption, +.panel > .table-responsive > .table caption, +.panel > .panel-collapse > .table caption { + padding-right: 15px; + padding-left: 15px; +} +.panel > .table:first-child, +.panel > .table-responsive:first-child > .table:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { + border-top-left-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { + border-top-right-radius: 3px; +} +.panel > .table:last-child, +.panel > .table-responsive:last-child > .table:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { + border-bottom-right-radius: 3px; +} +.panel > .panel-body + .table, +.panel > .panel-body + .table-responsive, +.panel > .table + .panel-body, +.panel > .table-responsive + .panel-body { + border-top: 1px solid #ddd; +} +.panel > .table > tbody:first-child > tr:first-child th, +.panel > .table > tbody:first-child > tr:first-child td { + border-top: 0; +} +.panel > .table-bordered, +.panel > .table-responsive > .table-bordered { + border: 0; +} +.panel > .table-bordered > thead > tr > th:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, +.panel > .table-bordered > tbody > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, +.panel > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-bordered > thead > tr > td:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, +.panel > .table-bordered > tbody > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, +.panel > .table-bordered > tfoot > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; +} +.panel > .table-bordered > thead > tr > th:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, +.panel > .table-bordered > tbody > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, +.panel > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-bordered > thead > tr > td:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, +.panel > .table-bordered > tbody > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, +.panel > .table-bordered > tfoot > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; +} +.panel > .table-bordered > thead > tr:first-child > td, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, +.panel > .table-bordered > tbody > tr:first-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, +.panel > .table-bordered > thead > tr:first-child > th, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, +.panel > .table-bordered > tbody > tr:first-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { + border-bottom: 0; +} +.panel > .table-bordered > tbody > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, +.panel > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-bordered > tbody > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, +.panel > .table-bordered > tfoot > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { + border-bottom: 0; +} +.panel > .table-responsive { + margin-bottom: 0; + border: 0; +} +.panel-group { + margin-bottom: 20px; +} +.panel-group .panel { + margin-bottom: 0; + border-radius: 4px; +} +.panel-group .panel + .panel { + margin-top: 5px; +} +.panel-group .panel-heading { + border-bottom: 0; +} +.panel-group .panel-heading + .panel-collapse > .panel-body, +.panel-group .panel-heading + .panel-collapse > .list-group { + border-top: 1px solid #ddd; +} +.panel-group .panel-footer { + border-top: 0; +} +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #ddd; +} +.panel-default { + border-color: #ddd; +} +.panel-default > .panel-heading { + color: #333; + background-color: #f5f5f5; + border-color: #ddd; +} +.panel-default > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ddd; +} +.panel-default > .panel-heading .badge { + color: #f5f5f5; + background-color: #333; +} +.panel-default > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ddd; +} +.panel-primary { + border-color: #337ab7; +} +.panel-primary > .panel-heading { + color: #fff; + background-color: #337ab7; + border-color: #337ab7; +} +.panel-primary > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #337ab7; +} +.panel-primary > .panel-heading .badge { + color: #337ab7; + background-color: #fff; +} +.panel-primary > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #337ab7; +} +.panel-success { + border-color: #d6e9c6; +} +.panel-success > .panel-heading { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.panel-success > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d6e9c6; +} +.panel-success > .panel-heading .badge { + color: #dff0d8; + background-color: #3c763d; +} +.panel-success > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d6e9c6; +} +.panel-info { + border-color: #bce8f1; +} +.panel-info > .panel-heading { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.panel-info > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #bce8f1; +} +.panel-info > .panel-heading .badge { + color: #d9edf7; + background-color: #31708f; +} +.panel-info > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #bce8f1; +} +.panel-warning { + border-color: #faebcc; +} +.panel-warning > .panel-heading { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.panel-warning > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #faebcc; +} +.panel-warning > .panel-heading .badge { + color: #fcf8e3; + background-color: #8a6d3b; +} +.panel-warning > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #faebcc; +} +.panel-danger { + border-color: #ebccd1; +} +.panel-danger > .panel-heading { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.panel-danger > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ebccd1; +} +.panel-danger > .panel-heading .badge { + color: #f2dede; + background-color: #a94442; +} +.panel-danger > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ebccd1; +} +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden; +} +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; +} +.embed-responsive-16by9 { + padding-bottom: 56.25%; +} +.embed-responsive-4by3 { + padding-bottom: 75%; +} +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); +} +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, .15); +} +.well-lg { + padding: 24px; + border-radius: 6px; +} +.well-sm { + padding: 9px; + border-radius: 3px; +} +.close { + float: right; + font-size: 21px; + font-weight: bold; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + filter: alpha(opacity=20); + opacity: .2; +} +.close:hover, +.close:focus { + color: #000; + text-decoration: none; + cursor: pointer; + filter: alpha(opacity=50); + opacity: .5; +} +button.close { + -webkit-appearance: none; + padding: 0; + cursor: pointer; + background: transparent; + border: 0; +} +.modal-open { + overflow: hidden; +} +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + display: none; + overflow: hidden; + -webkit-overflow-scrolling: touch; + outline: 0; +} +.modal.fade .modal-dialog { + -webkit-transition: -webkit-transform .3s ease-out; + -o-transition: -o-transform .3s ease-out; + transition: transform .3s ease-out; + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + -o-transform: translate(0, -25%); + transform: translate(0, -25%); +} +.modal.in .modal-dialog { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); +} +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} +.modal-content { + position: relative; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: 6px; + outline: 0; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5); + box-shadow: 0 3px 9px rgba(0, 0, 0, .5); +} +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000; +} +.modal-backdrop.fade { + filter: alpha(opacity=0); + opacity: 0; +} +.modal-backdrop.in { + filter: alpha(opacity=50); + opacity: .5; +} +.modal-header { + padding: 15px; + border-bottom: 1px solid #e5e5e5; +} +.modal-header .close { + margin-top: -2px; +} +.modal-title { + margin: 0; + line-height: 1.42857143; +} +.modal-body { + position: relative; + padding: 15px; +} +.modal-footer { + padding: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} +.modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 5px; +} +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} +@media (min-width: 768px) { + .modal-dialog { + width: 600px; + margin: 30px auto; + } + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5); + box-shadow: 0 5px 15px rgba(0, 0, 0, .5); + } + .modal-sm { + width: 300px; + } +} +@media (min-width: 992px) { + .modal-lg { + width: 900px; + } +} +.tooltip { + position: absolute; + z-index: 1070; + display: block; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 12px; + font-style: normal; + font-weight: normal; + line-height: 1.42857143; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + white-space: normal; + filter: alpha(opacity=0); + opacity: 0; + + line-break: auto; +} +.tooltip.in { + filter: alpha(opacity=90); + opacity: .9; +} +.tooltip.top { + padding: 5px 0; + margin-top: -3px; +} +.tooltip.right { + padding: 0 5px; + margin-left: 3px; +} +.tooltip.bottom { + padding: 5px 0; + margin-top: 3px; +} +.tooltip.left { + padding: 0 5px; + margin-left: -3px; +} +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + background-color: #000; + border-radius: 4px; +} +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-left .tooltip-arrow { + right: 5px; + bottom: 0; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-right .tooltip-arrow { + bottom: 0; + left: 5px; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000; +} +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000; +} +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-left .tooltip-arrow { + top: 0; + right: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-right .tooltip-arrow { + top: 0; + left: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: none; + max-width: 276px; + padding: 1px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-style: normal; + font-weight: normal; + line-height: 1.42857143; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + white-space: normal; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2); + box-shadow: 0 5px 10px rgba(0, 0, 0, .2); + + line-break: auto; +} +.popover.top { + margin-top: -10px; +} +.popover.right { + margin-left: 10px; +} +.popover.bottom { + margin-top: 10px; +} +.popover.left { + margin-left: -10px; +} +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 14px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0; +} +.popover-content { + padding: 9px 14px; +} +.popover > .arrow, +.popover > .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.popover > .arrow { + border-width: 11px; +} +.popover > .arrow:after { + content: ""; + border-width: 10px; +} +.popover.top > .arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999; + border-top-color: rgba(0, 0, 0, .25); + border-bottom-width: 0; +} +.popover.top > .arrow:after { + bottom: 1px; + margin-left: -10px; + content: " "; + border-top-color: #fff; + border-bottom-width: 0; +} +.popover.right > .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-right-color: #999; + border-right-color: rgba(0, 0, 0, .25); + border-left-width: 0; +} +.popover.right > .arrow:after { + bottom: -10px; + left: 1px; + content: " "; + border-right-color: #fff; + border-left-width: 0; +} +.popover.bottom > .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999; + border-bottom-color: rgba(0, 0, 0, .25); +} +.popover.bottom > .arrow:after { + top: 1px; + margin-left: -10px; + content: " "; + border-top-width: 0; + border-bottom-color: #fff; +} +.popover.left > .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: #999; + border-left-color: rgba(0, 0, 0, .25); +} +.popover.left > .arrow:after { + right: 1px; + bottom: -10px; + content: " "; + border-right-width: 0; + border-left-color: #fff; +} +.carousel { + position: relative; +} +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} +.carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: .6s ease-in-out left; + -o-transition: .6s ease-in-out left; + transition: .6s ease-in-out left; +} +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + line-height: 1; +} +@media all and (transform-3d), (-webkit-transform-3d) { + .carousel-inner > .item { + -webkit-transition: -webkit-transform .6s ease-in-out; + -o-transition: -o-transform .6s ease-in-out; + transition: transform .6s ease-in-out; + + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + perspective: 1000px; + } + .carousel-inner > .item.next, + .carousel-inner > .item.active.right { + left: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + .carousel-inner > .item.prev, + .carousel-inner > .item.active.left { + left: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + .carousel-inner > .item.next.left, + .carousel-inner > .item.prev.right, + .carousel-inner > .item.active { + left: 0; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} +.carousel-inner > .active { + left: 0; +} +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} +.carousel-inner > .next { + left: 100%; +} +.carousel-inner > .prev { + left: -100%; +} +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} +.carousel-inner > .active.left { + left: -100%; +} +.carousel-inner > .active.right { + left: 100%; +} +.carousel-control { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 15%; + font-size: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); + background-color: rgba(0, 0, 0, 0); + filter: alpha(opacity=50); + opacity: .5; +} +.carousel-control.left { + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001))); + background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); + background-repeat: repeat-x; +} +.carousel-control.right { + right: 0; + left: auto; + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5))); + background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); + background-repeat: repeat-x; +} +.carousel-control:hover, +.carousel-control:focus { + color: #fff; + text-decoration: none; + filter: alpha(opacity=90); + outline: 0; + opacity: .9; +} +.carousel-control .icon-prev, +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-left, +.carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + z-index: 5; + display: inline-block; + margin-top: -10px; +} +.carousel-control .icon-prev, +.carousel-control .glyphicon-chevron-left { + left: 50%; + margin-left: -10px; +} +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-right { + right: 50%; + margin-right: -10px; +} +.carousel-control .icon-prev, +.carousel-control .icon-next { + width: 20px; + height: 20px; + font-family: serif; + line-height: 1; +} +.carousel-control .icon-prev:before { + content: '\2039'; +} +.carousel-control .icon-next:before { + content: '\203a'; +} +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + padding-left: 0; + margin-left: -30%; + text-align: center; + list-style: none; +} +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + cursor: pointer; + background-color: #000 \9; + background-color: rgba(0, 0, 0, 0); + border: 1px solid #fff; + border-radius: 10px; +} +.carousel-indicators .active { + width: 12px; + height: 12px; + margin: 0; + background-color: #fff; +} +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); +} +.carousel-caption .btn { + text-shadow: none; +} +@media screen and (min-width: 768px) { + .carousel-control .glyphicon-chevron-left, + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -10px; + font-size: 30px; + } + .carousel-control .glyphicon-chevron-left, + .carousel-control .icon-prev { + margin-left: -10px; + } + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-next { + margin-right: -10px; + } + .carousel-caption { + right: 20%; + left: 20%; + padding-bottom: 30px; + } + .carousel-indicators { + bottom: 20px; + } +} +.clearfix:before, +.clearfix:after, +.dl-horizontal dd:before, +.dl-horizontal dd:after, +.container:before, +.container:after, +.container-fluid:before, +.container-fluid:after, +.row:before, +.row:after, +.form-horizontal .form-group:before, +.form-horizontal .form-group:after, +.btn-toolbar:before, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after, +.nav:before, +.nav:after, +.navbar:before, +.navbar:after, +.navbar-header:before, +.navbar-header:after, +.navbar-collapse:before, +.navbar-collapse:after, +.pager:before, +.pager:after, +.panel-body:before, +.panel-body:after, +.modal-header:before, +.modal-header:after, +.modal-footer:before, +.modal-footer:after { + display: table; + content: " "; +} +.clearfix:after, +.dl-horizontal dd:after, +.container:after, +.container-fluid:after, +.row:after, +.form-horizontal .form-group:after, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:after, +.nav:after, +.navbar:after, +.navbar-header:after, +.navbar-collapse:after, +.pager:after, +.panel-body:after, +.modal-header:after, +.modal-footer:after { + clear: both; +} +.center-block { + display: block; + margin-right: auto; + margin-left: auto; +} +.pull-right { + float: right !important; +} +.pull-left { + float: left !important; +} +.hide { + display: none !important; +} +.show { + display: block !important; +} +.invisible { + visibility: hidden; +} +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} +.hidden { + display: none !important; +} +.affix { + position: fixed; +} +@-ms-viewport { + width: device-width; +} +.visible-xs, +.visible-sm, +.visible-md, +.visible-lg { + display: none !important; +} +.visible-xs-block, +.visible-xs-inline, +.visible-xs-inline-block, +.visible-sm-block, +.visible-sm-inline, +.visible-sm-inline-block, +.visible-md-block, +.visible-md-inline, +.visible-md-inline-block, +.visible-lg-block, +.visible-lg-inline, +.visible-lg-inline-block { + display: none !important; +} +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + table.visible-xs { + display: table !important; + } + tr.visible-xs { + display: table-row !important; + } + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } +} +@media (max-width: 767px) { + .visible-xs-block { + display: block !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline { + display: inline !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline-block { + display: inline-block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + table.visible-sm { + display: table !important; + } + tr.visible-sm { + display: table-row !important; + } + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-block { + display: block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline { + display: inline !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline-block { + display: inline-block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + table.visible-md { + display: table !important; + } + tr.visible-md { + display: table-row !important; + } + th.visible-md, + td.visible-md { + display: table-cell !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-block { + display: block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline { + display: inline !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline-block { + display: inline-block !important; + } +} +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + table.visible-lg { + display: table !important; + } + tr.visible-lg { + display: table-row !important; + } + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } +} +@media (min-width: 1200px) { + .visible-lg-block { + display: block !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline { + display: inline !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline-block { + display: inline-block !important; + } +} +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } +} +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } +} +.visible-print { + display: none !important; +} +@media print { + .visible-print { + display: block !important; + } + table.visible-print { + display: table !important; + } + tr.visible-print { + display: table-row !important; + } + th.visible-print, + td.visible-print { + display: table-cell !important; + } +} +.visible-print-block { + display: none !important; +} +@media print { + .visible-print-block { + display: block !important; + } +} +.visible-print-inline { + display: none !important; +} +@media print { + .visible-print-inline { + display: inline !important; + } +} +.visible-print-inline-block { + display: none !important; +} +@media print { + .visible-print-inline-block { + display: inline-block !important; + } +} +@media print { + .hidden-print { + display: none !important; + } +} +/*# sourceMappingURL=bootstrap.css.map */ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/bootstrap.css.map b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/bootstrap.css.map new file mode 100644 index 000000000..f010c82d1 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/bootstrap.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["bootstrap.css","less/normalize.less","less/print.less","less/glyphicons.less","less/scaffolding.less","less/mixins/vendor-prefixes.less","less/mixins/tab-focus.less","less/mixins/image.less","less/type.less","less/mixins/text-emphasis.less","less/mixins/background-variant.less","less/mixins/text-overflow.less","less/code.less","less/grid.less","less/mixins/grid.less","less/mixins/grid-framework.less","less/tables.less","less/mixins/table-row.less","less/forms.less","less/mixins/forms.less","less/buttons.less","less/mixins/buttons.less","less/mixins/opacity.less","less/component-animations.less","less/dropdowns.less","less/mixins/nav-divider.less","less/mixins/reset-filter.less","less/button-groups.less","less/mixins/border-radius.less","less/input-groups.less","less/navs.less","less/navbar.less","less/mixins/nav-vertical-align.less","less/utilities.less","less/breadcrumbs.less","less/pagination.less","less/mixins/pagination.less","less/pager.less","less/labels.less","less/mixins/labels.less","less/badges.less","less/jumbotron.less","less/thumbnails.less","less/alerts.less","less/mixins/alerts.less","less/progress-bars.less","less/mixins/gradients.less","less/mixins/progress-bar.less","less/media.less","less/list-group.less","less/mixins/list-group.less","less/panels.less","less/mixins/panels.less","less/responsive-embed.less","less/wells.less","less/close.less","less/modals.less","less/tooltip.less","less/mixins/reset-text.less","less/popovers.less","less/carousel.less","less/mixins/clearfix.less","less/mixins/center-block.less","less/mixins/hide-text.less","less/responsive-utilities.less","less/mixins/responsive-visibility.less"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,4EAA4E;ACG5E;EACE,wBAAA;EACA,2BAAA;EACA,+BAAA;CDDD;ACQD;EACE,UAAA;CDND;ACmBD;;;;;;;;;;;;;EAaE,eAAA;CDjBD;ACyBD;;;;EAIE,sBAAA;EACA,yBAAA;CDvBD;AC+BD;EACE,cAAA;EACA,UAAA;CD7BD;ACqCD;;EAEE,cAAA;CDnCD;AC6CD;EACE,8BAAA;CD3CD;ACmDD;;EAEE,WAAA;CDjDD;AC2DD;EACE,0BAAA;CDzDD;ACgED;;EAEE,kBAAA;CD9DD;ACqED;EACE,mBAAA;CDnED;AC2ED;EACE,eAAA;EACA,iBAAA;CDzED;ACgFD;EACE,iBAAA;EACA,YAAA;CD9ED;ACqFD;EACE,eAAA;CDnFD;AC0FD;;EAEE,eAAA;EACA,eAAA;EACA,mBAAA;EACA,yBAAA;CDxFD;AC2FD;EACE,YAAA;CDzFD;AC4FD;EACE,gBAAA;CD1FD;ACoGD;EACE,UAAA;CDlGD;ACyGD;EACE,iBAAA;CDvGD;ACiHD;EACE,iBAAA;CD/GD;ACsHD;EACE,gCAAA;KAAA,6BAAA;UAAA,wBAAA;EACA,UAAA;CDpHD;AC2HD;EACE,eAAA;CDzHD;ACgID;;;;EAIE,kCAAA;EACA,eAAA;CD9HD;ACgJD;;;;;EAKE,eAAA;EACA,cAAA;EACA,UAAA;CD9ID;ACqJD;EACE,kBAAA;CDnJD;AC6JD;;EAEE,qBAAA;CD3JD;ACsKD;;;;EAIE,2BAAA;EACA,gBAAA;CDpKD;AC2KD;;EAEE,gBAAA;CDzKD;ACgLD;;EAEE,UAAA;EACA,WAAA;CD9KD;ACsLD;EACE,oBAAA;CDpLD;AC+LD;;EAEE,+BAAA;KAAA,4BAAA;UAAA,uBAAA;EACA,WAAA;CD7LD;ACsMD;;EAEE,aAAA;CDpMD;AC4MD;EACE,8BAAA;EACA,gCAAA;KAAA,6BAAA;UAAA,wBAAA;CD1MD;ACmND;;EAEE,yBAAA;CDjND;ACwND;EACE,0BAAA;EACA,cAAA;EACA,+BAAA;CDtND;AC8ND;EACE,UAAA;EACA,WAAA;CD5ND;ACmOD;EACE,eAAA;CDjOD;ACyOD;EACE,kBAAA;CDvOD;ACiPD;EACE,0BAAA;EACA,kBAAA;CD/OD;ACkPD;;EAEE,WAAA;CDhPD;AACD,qFAAqF;AElFrF;EA7FI;;;IAGI,mCAAA;IACA,uBAAA;IACA,oCAAA;YAAA,4BAAA;IACA,6BAAA;GFkLL;EE/KC;;IAEI,2BAAA;GFiLL;EE9KC;IACI,6BAAA;GFgLL;EE7KC;IACI,8BAAA;GF+KL;EE1KC;;IAEI,YAAA;GF4KL;EEzKC;;IAEI,uBAAA;IACA,yBAAA;GF2KL;EExKC;IACI,4BAAA;GF0KL;EEvKC;;IAEI,yBAAA;GFyKL;EEtKC;IACI,2BAAA;GFwKL;EErKC;;;IAGI,WAAA;IACA,UAAA;GFuKL;EEpKC;;IAEI,wBAAA;GFsKL;EEhKC;IACI,cAAA;GFkKL;EEhKC;;IAGQ,kCAAA;GFiKT;EE9JC;IACI,uBAAA;GFgKL;EE7JC;IACI,qCAAA;GF+JL;EEhKC;;IAKQ,kCAAA;GF+JT;EE5JC;;IAGQ,kCAAA;GF6JT;CACF;AGnPD;EACE,oCAAA;EACA,sDAAA;EACA,gYAAA;CHqPD;AG7OD;EACE,mBAAA;EACA,SAAA;EACA,sBAAA;EACA,oCAAA;EACA,mBAAA;EACA,oBAAA;EACA,eAAA;EACA,oCAAA;EACA,mCAAA;CH+OD;AG3OmC;EAAW,iBAAA;CH8O9C;AG7OmC;EAAW,iBAAA;CHgP9C;AG9OmC;;EAAW,iBAAA;CHkP9C;AGjPmC;EAAW,iBAAA;CHoP9C;AGnPmC;EAAW,iBAAA;CHsP9C;AGrPmC;EAAW,iBAAA;CHwP9C;AGvPmC;EAAW,iBAAA;CH0P9C;AGzPmC;EAAW,iBAAA;CH4P9C;AG3PmC;EAAW,iBAAA;CH8P9C;AG7PmC;EAAW,iBAAA;CHgQ9C;AG/PmC;EAAW,iBAAA;CHkQ9C;AGjQmC;EAAW,iBAAA;CHoQ9C;AGnQmC;EAAW,iBAAA;CHsQ9C;AGrQmC;EAAW,iBAAA;CHwQ9C;AGvQmC;EAAW,iBAAA;CH0Q9C;AGzQmC;EAAW,iBAAA;CH4Q9C;AG3QmC;EAAW,iBAAA;CH8Q9C;AG7QmC;EAAW,iBAAA;CHgR9C;AG/QmC;EAAW,iBAAA;CHkR9C;AGjRmC;EAAW,iBAAA;CHoR9C;AGnRmC;EAAW,iBAAA;CHsR9C;AGrRmC;EAAW,iBAAA;CHwR9C;AGvRmC;EAAW,iBAAA;CH0R9C;AGzRmC;EAAW,iBAAA;CH4R9C;AG3RmC;EAAW,iBAAA;CH8R9C;AG7RmC;EAAW,iBAAA;CHgS9C;AG/RmC;EAAW,iBAAA;CHkS9C;AGjSmC;EAAW,iBAAA;CHoS9C;AGnSmC;EAAW,iBAAA;CHsS9C;AGrSmC;EAAW,iBAAA;CHwS9C;AGvSmC;EAAW,iBAAA;CH0S9C;AGzSmC;EAAW,iBAAA;CH4S9C;AG3SmC;EAAW,iBAAA;CH8S9C;AG7SmC;EAAW,iBAAA;CHgT9C;AG/SmC;EAAW,iBAAA;CHkT9C;AGjTmC;EAAW,iBAAA;CHoT9C;AGnTmC;EAAW,iBAAA;CHsT9C;AGrTmC;EAAW,iBAAA;CHwT9C;AGvTmC;EAAW,iBAAA;CH0T9C;AGzTmC;EAAW,iBAAA;CH4T9C;AG3TmC;EAAW,iBAAA;CH8T9C;AG7TmC;EAAW,iBAAA;CHgU9C;AG/TmC;EAAW,iBAAA;CHkU9C;AGjUmC;EAAW,iBAAA;CHoU9C;AGnUmC;EAAW,iBAAA;CHsU9C;AGrUmC;EAAW,iBAAA;CHwU9C;AGvUmC;EAAW,iBAAA;CH0U9C;AGzUmC;EAAW,iBAAA;CH4U9C;AG3UmC;EAAW,iBAAA;CH8U9C;AG7UmC;EAAW,iBAAA;CHgV9C;AG/UmC;EAAW,iBAAA;CHkV9C;AGjVmC;EAAW,iBAAA;CHoV9C;AGnVmC;EAAW,iBAAA;CHsV9C;AGrVmC;EAAW,iBAAA;CHwV9C;AGvVmC;EAAW,iBAAA;CH0V9C;AGzVmC;EAAW,iBAAA;CH4V9C;AG3VmC;EAAW,iBAAA;CH8V9C;AG7VmC;EAAW,iBAAA;CHgW9C;AG/VmC;EAAW,iBAAA;CHkW9C;AGjWmC;EAAW,iBAAA;CHoW9C;AGnWmC;EAAW,iBAAA;CHsW9C;AGrWmC;EAAW,iBAAA;CHwW9C;AGvWmC;EAAW,iBAAA;CH0W9C;AGzWmC;EAAW,iBAAA;CH4W9C;AG3WmC;EAAW,iBAAA;CH8W9C;AG7WmC;EAAW,iBAAA;CHgX9C;AG/WmC;EAAW,iBAAA;CHkX9C;AGjXmC;EAAW,iBAAA;CHoX9C;AGnXmC;EAAW,iBAAA;CHsX9C;AGrXmC;EAAW,iBAAA;CHwX9C;AGvXmC;EAAW,iBAAA;CH0X9C;AGzXmC;EAAW,iBAAA;CH4X9C;AG3XmC;EAAW,iBAAA;CH8X9C;AG7XmC;EAAW,iBAAA;CHgY9C;AG/XmC;EAAW,iBAAA;CHkY9C;AGjYmC;EAAW,iBAAA;CHoY9C;AGnYmC;EAAW,iBAAA;CHsY9C;AGrYmC;EAAW,iBAAA;CHwY9C;AGvYmC;EAAW,iBAAA;CH0Y9C;AGzYmC;EAAW,iBAAA;CH4Y9C;AG3YmC;EAAW,iBAAA;CH8Y9C;AG7YmC;EAAW,iBAAA;CHgZ9C;AG/YmC;EAAW,iBAAA;CHkZ9C;AGjZmC;EAAW,iBAAA;CHoZ9C;AGnZmC;EAAW,iBAAA;CHsZ9C;AGrZmC;EAAW,iBAAA;CHwZ9C;AGvZmC;EAAW,iBAAA;CH0Z9C;AGzZmC;EAAW,iBAAA;CH4Z9C;AG3ZmC;EAAW,iBAAA;CH8Z9C;AG7ZmC;EAAW,iBAAA;CHga9C;AG/ZmC;EAAW,iBAAA;CHka9C;AGjamC;EAAW,iBAAA;CHoa9C;AGnamC;EAAW,iBAAA;CHsa9C;AGramC;EAAW,iBAAA;CHwa9C;AGvamC;EAAW,iBAAA;CH0a9C;AGzamC;EAAW,iBAAA;CH4a9C;AG3amC;EAAW,iBAAA;CH8a9C;AG7amC;EAAW,iBAAA;CHgb9C;AG/amC;EAAW,iBAAA;CHkb9C;AGjbmC;EAAW,iBAAA;CHob9C;AGnbmC;EAAW,iBAAA;CHsb9C;AGrbmC;EAAW,iBAAA;CHwb9C;AGvbmC;EAAW,iBAAA;CH0b9C;AGzbmC;EAAW,iBAAA;CH4b9C;AG3bmC;EAAW,iBAAA;CH8b9C;AG7bmC;EAAW,iBAAA;CHgc9C;AG/bmC;EAAW,iBAAA;CHkc9C;AGjcmC;EAAW,iBAAA;CHoc9C;AGncmC;EAAW,iBAAA;CHsc9C;AGrcmC;EAAW,iBAAA;CHwc9C;AGvcmC;EAAW,iBAAA;CH0c9C;AGzcmC;EAAW,iBAAA;CH4c9C;AG3cmC;EAAW,iBAAA;CH8c9C;AG7cmC;EAAW,iBAAA;CHgd9C;AG/cmC;EAAW,iBAAA;CHkd9C;AGjdmC;EAAW,iBAAA;CHod9C;AGndmC;EAAW,iBAAA;CHsd9C;AGrdmC;EAAW,iBAAA;CHwd9C;AGvdmC;EAAW,iBAAA;CH0d9C;AGzdmC;EAAW,iBAAA;CH4d9C;AG3dmC;EAAW,iBAAA;CH8d9C;AG7dmC;EAAW,iBAAA;CHge9C;AG/dmC;EAAW,iBAAA;CHke9C;AGjemC;EAAW,iBAAA;CHoe9C;AGnemC;EAAW,iBAAA;CHse9C;AGremC;EAAW,iBAAA;CHwe9C;AGvemC;EAAW,iBAAA;CH0e9C;AGzemC;EAAW,iBAAA;CH4e9C;AG3emC;EAAW,iBAAA;CH8e9C;AG7emC;EAAW,iBAAA;CHgf9C;AG/emC;EAAW,iBAAA;CHkf9C;AGjfmC;EAAW,iBAAA;CHof9C;AGnfmC;EAAW,iBAAA;CHsf9C;AGrfmC;EAAW,iBAAA;CHwf9C;AGvfmC;EAAW,iBAAA;CH0f9C;AGzfmC;EAAW,iBAAA;CH4f9C;AG3fmC;EAAW,iBAAA;CH8f9C;AG7fmC;EAAW,iBAAA;CHggB9C;AG/fmC;EAAW,iBAAA;CHkgB9C;AGjgBmC;EAAW,iBAAA;CHogB9C;AGngBmC;EAAW,iBAAA;CHsgB9C;AGrgBmC;EAAW,iBAAA;CHwgB9C;AGvgBmC;EAAW,iBAAA;CH0gB9C;AGzgBmC;EAAW,iBAAA;CH4gB9C;AG3gBmC;EAAW,iBAAA;CH8gB9C;AG7gBmC;EAAW,iBAAA;CHghB9C;AG/gBmC;EAAW,iBAAA;CHkhB9C;AGjhBmC;EAAW,iBAAA;CHohB9C;AGnhBmC;EAAW,iBAAA;CHshB9C;AGrhBmC;EAAW,iBAAA;CHwhB9C;AGvhBmC;EAAW,iBAAA;CH0hB9C;AGzhBmC;EAAW,iBAAA;CH4hB9C;AG3hBmC;EAAW,iBAAA;CH8hB9C;AG7hBmC;EAAW,iBAAA;CHgiB9C;AG/hBmC;EAAW,iBAAA;CHkiB9C;AGjiBmC;EAAW,iBAAA;CHoiB9C;AGniBmC;EAAW,iBAAA;CHsiB9C;AGriBmC;EAAW,iBAAA;CHwiB9C;AGviBmC;EAAW,iBAAA;CH0iB9C;AGziBmC;EAAW,iBAAA;CH4iB9C;AG3iBmC;EAAW,iBAAA;CH8iB9C;AG7iBmC;EAAW,iBAAA;CHgjB9C;AG/iBmC;EAAW,iBAAA;CHkjB9C;AGjjBmC;EAAW,iBAAA;CHojB9C;AGnjBmC;EAAW,iBAAA;CHsjB9C;AGrjBmC;EAAW,iBAAA;CHwjB9C;AGvjBmC;EAAW,iBAAA;CH0jB9C;AGzjBmC;EAAW,iBAAA;CH4jB9C;AG3jBmC;EAAW,iBAAA;CH8jB9C;AG7jBmC;EAAW,iBAAA;CHgkB9C;AG/jBmC;EAAW,iBAAA;CHkkB9C;AGjkBmC;EAAW,iBAAA;CHokB9C;AGnkBmC;EAAW,iBAAA;CHskB9C;AGrkBmC;EAAW,iBAAA;CHwkB9C;AGvkBmC;EAAW,iBAAA;CH0kB9C;AGzkBmC;EAAW,iBAAA;CH4kB9C;AG3kBmC;EAAW,iBAAA;CH8kB9C;AG7kBmC;EAAW,iBAAA;CHglB9C;AG/kBmC;EAAW,iBAAA;CHklB9C;AGjlBmC;EAAW,iBAAA;CHolB9C;AGnlBmC;EAAW,iBAAA;CHslB9C;AGrlBmC;EAAW,iBAAA;CHwlB9C;AGvlBmC;EAAW,iBAAA;CH0lB9C;AGzlBmC;EAAW,iBAAA;CH4lB9C;AG3lBmC;EAAW,iBAAA;CH8lB9C;AG7lBmC;EAAW,iBAAA;CHgmB9C;AG/lBmC;EAAW,iBAAA;CHkmB9C;AGjmBmC;EAAW,iBAAA;CHomB9C;AGnmBmC;EAAW,iBAAA;CHsmB9C;AGrmBmC;EAAW,iBAAA;CHwmB9C;AGvmBmC;EAAW,iBAAA;CH0mB9C;AGzmBmC;EAAW,iBAAA;CH4mB9C;AG3mBmC;EAAW,iBAAA;CH8mB9C;AG7mBmC;EAAW,iBAAA;CHgnB9C;AG/mBmC;EAAW,iBAAA;CHknB9C;AGjnBmC;EAAW,iBAAA;CHonB9C;AGnnBmC;EAAW,iBAAA;CHsnB9C;AGrnBmC;EAAW,iBAAA;CHwnB9C;AGvnBmC;EAAW,iBAAA;CH0nB9C;AGznBmC;EAAW,iBAAA;CH4nB9C;AG3nBmC;EAAW,iBAAA;CH8nB9C;AG7nBmC;EAAW,iBAAA;CHgoB9C;AG/nBmC;EAAW,iBAAA;CHkoB9C;AGjoBmC;EAAW,iBAAA;CHooB9C;AGnoBmC;EAAW,iBAAA;CHsoB9C;AGroBmC;EAAW,iBAAA;CHwoB9C;AG/nBmC;EAAW,iBAAA;CHkoB9C;AGjoBmC;EAAW,iBAAA;CHooB9C;AGnoBmC;EAAW,iBAAA;CHsoB9C;AGroBmC;EAAW,iBAAA;CHwoB9C;AGvoBmC;EAAW,iBAAA;CH0oB9C;AGzoBmC;EAAW,iBAAA;CH4oB9C;AG3oBmC;EAAW,iBAAA;CH8oB9C;AG7oBmC;EAAW,iBAAA;CHgpB9C;AG/oBmC;EAAW,iBAAA;CHkpB9C;AGjpBmC;EAAW,iBAAA;CHopB9C;AGnpBmC;EAAW,iBAAA;CHspB9C;AGrpBmC;EAAW,iBAAA;CHwpB9C;AGvpBmC;EAAW,iBAAA;CH0pB9C;AGzpBmC;EAAW,iBAAA;CH4pB9C;AG3pBmC;EAAW,iBAAA;CH8pB9C;AG7pBmC;EAAW,iBAAA;CHgqB9C;AG/pBmC;EAAW,iBAAA;CHkqB9C;AGjqBmC;EAAW,iBAAA;CHoqB9C;AGnqBmC;EAAW,iBAAA;CHsqB9C;AGrqBmC;EAAW,iBAAA;CHwqB9C;AGvqBmC;EAAW,iBAAA;CH0qB9C;AGzqBmC;EAAW,iBAAA;CH4qB9C;AG3qBmC;EAAW,iBAAA;CH8qB9C;AG7qBmC;EAAW,iBAAA;CHgrB9C;AG/qBmC;EAAW,iBAAA;CHkrB9C;AGjrBmC;EAAW,iBAAA;CHorB9C;AGnrBmC;EAAW,iBAAA;CHsrB9C;AGrrBmC;EAAW,iBAAA;CHwrB9C;AGvrBmC;EAAW,iBAAA;CH0rB9C;AGzrBmC;EAAW,iBAAA;CH4rB9C;AG3rBmC;EAAW,iBAAA;CH8rB9C;AG7rBmC;EAAW,iBAAA;CHgsB9C;AG/rBmC;EAAW,iBAAA;CHksB9C;AGjsBmC;EAAW,iBAAA;CHosB9C;AGnsBmC;EAAW,iBAAA;CHssB9C;AGrsBmC;EAAW,iBAAA;CHwsB9C;AGvsBmC;EAAW,iBAAA;CH0sB9C;AGzsBmC;EAAW,iBAAA;CH4sB9C;AG3sBmC;EAAW,iBAAA;CH8sB9C;AG7sBmC;EAAW,iBAAA;CHgtB9C;AG/sBmC;EAAW,iBAAA;CHktB9C;AGjtBmC;EAAW,iBAAA;CHotB9C;AGntBmC;EAAW,iBAAA;CHstB9C;AGrtBmC;EAAW,iBAAA;CHwtB9C;AGvtBmC;EAAW,iBAAA;CH0tB9C;AGztBmC;EAAW,iBAAA;CH4tB9C;AG3tBmC;EAAW,iBAAA;CH8tB9C;AG7tBmC;EAAW,iBAAA;CHguB9C;AG/tBmC;EAAW,iBAAA;CHkuB9C;AGjuBmC;EAAW,iBAAA;CHouB9C;AGnuBmC;EAAW,iBAAA;CHsuB9C;AGruBmC;EAAW,iBAAA;CHwuB9C;AGvuBmC;EAAW,iBAAA;CH0uB9C;AGzuBmC;EAAW,iBAAA;CH4uB9C;AG3uBmC;EAAW,iBAAA;CH8uB9C;AG7uBmC;EAAW,iBAAA;CHgvB9C;AIthCD;ECgEE,+BAAA;EACG,4BAAA;EACK,uBAAA;CLy9BT;AIxhCD;;EC6DE,+BAAA;EACG,4BAAA;EACK,uBAAA;CL+9BT;AIthCD;EACE,gBAAA;EACA,8CAAA;CJwhCD;AIrhCD;EACE,4DAAA;EACA,gBAAA;EACA,wBAAA;EACA,eAAA;EACA,uBAAA;CJuhCD;AInhCD;;;;EAIE,qBAAA;EACA,mBAAA;EACA,qBAAA;CJqhCD;AI/gCD;EACE,eAAA;EACA,sBAAA;CJihCD;AI/gCC;;EAEE,eAAA;EACA,2BAAA;CJihCH;AI9gCC;EEnDA,2CAAA;EACA,qBAAA;CNokCD;AIvgCD;EACE,UAAA;CJygCD;AIngCD;EACE,uBAAA;CJqgCD;AIjgCD;;;;;EGvEE,eAAA;EACA,gBAAA;EACA,aAAA;CP+kCD;AIrgCD;EACE,mBAAA;CJugCD;AIjgCD;EACE,aAAA;EACA,wBAAA;EACA,uBAAA;EACA,uBAAA;EACA,mBAAA;EC6FA,yCAAA;EACK,oCAAA;EACG,iCAAA;EEvLR,sBAAA;EACA,gBAAA;EACA,aAAA;CP+lCD;AIjgCD;EACE,mBAAA;CJmgCD;AI7/BD;EACE,iBAAA;EACA,oBAAA;EACA,UAAA;EACA,8BAAA;CJ+/BD;AIv/BD;EACE,mBAAA;EACA,WAAA;EACA,YAAA;EACA,aAAA;EACA,WAAA;EACA,iBAAA;EACA,uBAAA;EACA,UAAA;CJy/BD;AIj/BC;;EAEE,iBAAA;EACA,YAAA;EACA,aAAA;EACA,UAAA;EACA,kBAAA;EACA,WAAA;CJm/BH;AIx+BD;EACE,gBAAA;CJ0+BD;AQjoCD;;;;;;;;;;;;EAEE,qBAAA;EACA,iBAAA;EACA,iBAAA;EACA,eAAA;CR6oCD;AQlpCD;;;;;;;;;;;;;;;;;;;;;;;;EASI,oBAAA;EACA,eAAA;EACA,eAAA;CRmqCH;AQ/pCD;;;;;;EAGE,iBAAA;EACA,oBAAA;CRoqCD;AQxqCD;;;;;;;;;;;;EAQI,eAAA;CR8qCH;AQ3qCD;;;;;;EAGE,iBAAA;EACA,oBAAA;CRgrCD;AQprCD;;;;;;;;;;;;EAQI,eAAA;CR0rCH;AQtrCD;;EAAU,gBAAA;CR0rCT;AQzrCD;;EAAU,gBAAA;CR6rCT;AQ5rCD;;EAAU,gBAAA;CRgsCT;AQ/rCD;;EAAU,gBAAA;CRmsCT;AQlsCD;;EAAU,gBAAA;CRssCT;AQrsCD;;EAAU,gBAAA;CRysCT;AQnsCD;EACE,iBAAA;CRqsCD;AQlsCD;EACE,oBAAA;EACA,gBAAA;EACA,iBAAA;EACA,iBAAA;CRosCD;AQ/rCD;EAwOA;IA1OI,gBAAA;GRqsCD;CACF;AQ7rCD;;EAEE,eAAA;CR+rCD;AQ5rCD;;EAEE,0BAAA;EACA,cAAA;CR8rCD;AQ1rCD;EAAuB,iBAAA;CR6rCtB;AQ5rCD;EAAuB,kBAAA;CR+rCtB;AQ9rCD;EAAuB,mBAAA;CRisCtB;AQhsCD;EAAuB,oBAAA;CRmsCtB;AQlsCD;EAAuB,oBAAA;CRqsCtB;AQlsCD;EAAuB,0BAAA;CRqsCtB;AQpsCD;EAAuB,0BAAA;CRusCtB;AQtsCD;EAAuB,2BAAA;CRysCtB;AQtsCD;EACE,eAAA;CRwsCD;AQtsCD;ECrGE,eAAA;CT8yCD;AS7yCC;;EAEE,eAAA;CT+yCH;AQ1sCD;ECxGE,eAAA;CTqzCD;ASpzCC;;EAEE,eAAA;CTszCH;AQ9sCD;EC3GE,eAAA;CT4zCD;AS3zCC;;EAEE,eAAA;CT6zCH;AQltCD;EC9GE,eAAA;CTm0CD;ASl0CC;;EAEE,eAAA;CTo0CH;AQttCD;ECjHE,eAAA;CT00CD;ASz0CC;;EAEE,eAAA;CT20CH;AQttCD;EAGE,YAAA;EE3HA,0BAAA;CVk1CD;AUj1CC;;EAEE,0BAAA;CVm1CH;AQxtCD;EE9HE,0BAAA;CVy1CD;AUx1CC;;EAEE,0BAAA;CV01CH;AQ5tCD;EEjIE,0BAAA;CVg2CD;AU/1CC;;EAEE,0BAAA;CVi2CH;AQhuCD;EEpIE,0BAAA;CVu2CD;AUt2CC;;EAEE,0BAAA;CVw2CH;AQpuCD;EEvIE,0BAAA;CV82CD;AU72CC;;EAEE,0BAAA;CV+2CH;AQnuCD;EACE,oBAAA;EACA,oBAAA;EACA,iCAAA;CRquCD;AQ7tCD;;EAEE,cAAA;EACA,oBAAA;CR+tCD;AQluCD;;;;EAMI,iBAAA;CRkuCH;AQ3tCD;EACE,gBAAA;EACA,iBAAA;CR6tCD;AQztCD;EALE,gBAAA;EACA,iBAAA;EAMA,kBAAA;CR4tCD;AQ9tCD;EAKI,sBAAA;EACA,kBAAA;EACA,mBAAA;CR4tCH;AQvtCD;EACE,cAAA;EACA,oBAAA;CRytCD;AQvtCD;;EAEE,wBAAA;CRytCD;AQvtCD;EACE,kBAAA;CRytCD;AQvtCD;EACE,eAAA;CRytCD;AQhsCD;EA6EA;IAvFM,YAAA;IACA,aAAA;IACA,YAAA;IACA,kBAAA;IGtNJ,iBAAA;IACA,wBAAA;IACA,oBAAA;GXq6CC;EQ7nCH;IAhFM,mBAAA;GRgtCH;CACF;AQvsCD;;EAGE,aAAA;EACA,kCAAA;CRwsCD;AQtsCD;EACE,eAAA;EA9IqB,0BAAA;CRu1CtB;AQpsCD;EACE,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,+BAAA;CRssCD;AQjsCG;;;EACE,iBAAA;CRqsCL;AQ/sCD;;;EAmBI,eAAA;EACA,eAAA;EACA,wBAAA;EACA,eAAA;CRisCH;AQ/rCG;;;EACE,uBAAA;CRmsCL;AQ3rCD;;EAEE,oBAAA;EACA,gBAAA;EACA,gCAAA;EACA,eAAA;EACA,kBAAA;CR6rCD;AQvrCG;;;;;;EAAW,YAAA;CR+rCd;AQ9rCG;;;;;;EACE,uBAAA;CRqsCL;AQ/rCD;EACE,oBAAA;EACA,mBAAA;EACA,wBAAA;CRisCD;AYv+CD;;;;EAIE,+DAAA;CZy+CD;AYr+CD;EACE,iBAAA;EACA,eAAA;EACA,eAAA;EACA,0BAAA;EACA,mBAAA;CZu+CD;AYn+CD;EACE,iBAAA;EACA,eAAA;EACA,YAAA;EACA,uBAAA;EACA,mBAAA;EACA,uDAAA;UAAA,+CAAA;CZq+CD;AY3+CD;EASI,WAAA;EACA,gBAAA;EACA,kBAAA;EACA,yBAAA;UAAA,iBAAA;CZq+CH;AYh+CD;EACE,eAAA;EACA,eAAA;EACA,iBAAA;EACA,gBAAA;EACA,wBAAA;EACA,sBAAA;EACA,sBAAA;EACA,eAAA;EACA,0BAAA;EACA,uBAAA;EACA,mBAAA;CZk+CD;AY7+CD;EAeI,WAAA;EACA,mBAAA;EACA,eAAA;EACA,sBAAA;EACA,8BAAA;EACA,iBAAA;CZi+CH;AY59CD;EACE,kBAAA;EACA,mBAAA;CZ89CD;AaxhDD;ECHE,mBAAA;EACA,kBAAA;EACA,mBAAA;EACA,oBAAA;Cd8hDD;AaxhDC;EAqEF;IAvEI,aAAA;Gb8hDD;CACF;Aa1hDC;EAkEF;IApEI,aAAA;GbgiDD;CACF;Aa5hDD;EA+DA;IAjEI,cAAA;GbkiDD;CACF;AazhDD;ECvBE,mBAAA;EACA,kBAAA;EACA,mBAAA;EACA,oBAAA;CdmjDD;AathDD;ECvBE,mBAAA;EACA,oBAAA;CdgjDD;AehjDG;EACE,mBAAA;EAEA,gBAAA;EAEA,mBAAA;EACA,oBAAA;CfgjDL;AehiDG;EACE,YAAA;CfkiDL;Ae3hDC;EACE,YAAA;Cf6hDH;Ae9hDC;EACE,oBAAA;CfgiDH;AejiDC;EACE,oBAAA;CfmiDH;AepiDC;EACE,WAAA;CfsiDH;AeviDC;EACE,oBAAA;CfyiDH;Ae1iDC;EACE,oBAAA;Cf4iDH;Ae7iDC;EACE,WAAA;Cf+iDH;AehjDC;EACE,oBAAA;CfkjDH;AenjDC;EACE,oBAAA;CfqjDH;AetjDC;EACE,WAAA;CfwjDH;AezjDC;EACE,oBAAA;Cf2jDH;Ae5jDC;EACE,mBAAA;Cf8jDH;AehjDC;EACE,YAAA;CfkjDH;AenjDC;EACE,oBAAA;CfqjDH;AetjDC;EACE,oBAAA;CfwjDH;AezjDC;EACE,WAAA;Cf2jDH;Ae5jDC;EACE,oBAAA;Cf8jDH;Ae/jDC;EACE,oBAAA;CfikDH;AelkDC;EACE,WAAA;CfokDH;AerkDC;EACE,oBAAA;CfukDH;AexkDC;EACE,oBAAA;Cf0kDH;Ae3kDC;EACE,WAAA;Cf6kDH;Ae9kDC;EACE,oBAAA;CfglDH;AejlDC;EACE,mBAAA;CfmlDH;Ae/kDC;EACE,YAAA;CfilDH;AejmDC;EACE,WAAA;CfmmDH;AepmDC;EACE,mBAAA;CfsmDH;AevmDC;EACE,mBAAA;CfymDH;Ae1mDC;EACE,UAAA;Cf4mDH;Ae7mDC;EACE,mBAAA;Cf+mDH;AehnDC;EACE,mBAAA;CfknDH;AennDC;EACE,UAAA;CfqnDH;AetnDC;EACE,mBAAA;CfwnDH;AeznDC;EACE,mBAAA;Cf2nDH;Ae5nDC;EACE,UAAA;Cf8nDH;Ae/nDC;EACE,mBAAA;CfioDH;AeloDC;EACE,kBAAA;CfooDH;AehoDC;EACE,WAAA;CfkoDH;AepnDC;EACE,kBAAA;CfsnDH;AevnDC;EACE,0BAAA;CfynDH;Ae1nDC;EACE,0BAAA;Cf4nDH;Ae7nDC;EACE,iBAAA;Cf+nDH;AehoDC;EACE,0BAAA;CfkoDH;AenoDC;EACE,0BAAA;CfqoDH;AetoDC;EACE,iBAAA;CfwoDH;AezoDC;EACE,0BAAA;Cf2oDH;Ae5oDC;EACE,0BAAA;Cf8oDH;Ae/oDC;EACE,iBAAA;CfipDH;AelpDC;EACE,0BAAA;CfopDH;AerpDC;EACE,yBAAA;CfupDH;AexpDC;EACE,gBAAA;Cf0pDH;Aa1pDD;EElCI;IACE,YAAA;Gf+rDH;EexrDD;IACE,YAAA;Gf0rDD;Ee3rDD;IACE,oBAAA;Gf6rDD;Ee9rDD;IACE,oBAAA;GfgsDD;EejsDD;IACE,WAAA;GfmsDD;EepsDD;IACE,oBAAA;GfssDD;EevsDD;IACE,oBAAA;GfysDD;Ee1sDD;IACE,WAAA;Gf4sDD;Ee7sDD;IACE,oBAAA;Gf+sDD;EehtDD;IACE,oBAAA;GfktDD;EentDD;IACE,WAAA;GfqtDD;EettDD;IACE,oBAAA;GfwtDD;EeztDD;IACE,mBAAA;Gf2tDD;Ee7sDD;IACE,YAAA;Gf+sDD;EehtDD;IACE,oBAAA;GfktDD;EentDD;IACE,oBAAA;GfqtDD;EettDD;IACE,WAAA;GfwtDD;EeztDD;IACE,oBAAA;Gf2tDD;Ee5tDD;IACE,oBAAA;Gf8tDD;Ee/tDD;IACE,WAAA;GfiuDD;EeluDD;IACE,oBAAA;GfouDD;EeruDD;IACE,oBAAA;GfuuDD;EexuDD;IACE,WAAA;Gf0uDD;Ee3uDD;IACE,oBAAA;Gf6uDD;Ee9uDD;IACE,mBAAA;GfgvDD;Ee5uDD;IACE,YAAA;Gf8uDD;Ee9vDD;IACE,WAAA;GfgwDD;EejwDD;IACE,mBAAA;GfmwDD;EepwDD;IACE,mBAAA;GfswDD;EevwDD;IACE,UAAA;GfywDD;Ee1wDD;IACE,mBAAA;Gf4wDD;Ee7wDD;IACE,mBAAA;Gf+wDD;EehxDD;IACE,UAAA;GfkxDD;EenxDD;IACE,mBAAA;GfqxDD;EetxDD;IACE,mBAAA;GfwxDD;EezxDD;IACE,UAAA;Gf2xDD;Ee5xDD;IACE,mBAAA;Gf8xDD;Ee/xDD;IACE,kBAAA;GfiyDD;Ee7xDD;IACE,WAAA;Gf+xDD;EejxDD;IACE,kBAAA;GfmxDD;EepxDD;IACE,0BAAA;GfsxDD;EevxDD;IACE,0BAAA;GfyxDD;Ee1xDD;IACE,iBAAA;Gf4xDD;Ee7xDD;IACE,0BAAA;Gf+xDD;EehyDD;IACE,0BAAA;GfkyDD;EenyDD;IACE,iBAAA;GfqyDD;EetyDD;IACE,0BAAA;GfwyDD;EezyDD;IACE,0BAAA;Gf2yDD;Ee5yDD;IACE,iBAAA;Gf8yDD;Ee/yDD;IACE,0BAAA;GfizDD;EelzDD;IACE,yBAAA;GfozDD;EerzDD;IACE,gBAAA;GfuzDD;CACF;Aa/yDD;EE3CI;IACE,YAAA;Gf61DH;Eet1DD;IACE,YAAA;Gfw1DD;Eez1DD;IACE,oBAAA;Gf21DD;Ee51DD;IACE,oBAAA;Gf81DD;Ee/1DD;IACE,WAAA;Gfi2DD;Eel2DD;IACE,oBAAA;Gfo2DD;Eer2DD;IACE,oBAAA;Gfu2DD;Eex2DD;IACE,WAAA;Gf02DD;Ee32DD;IACE,oBAAA;Gf62DD;Ee92DD;IACE,oBAAA;Gfg3DD;Eej3DD;IACE,WAAA;Gfm3DD;Eep3DD;IACE,oBAAA;Gfs3DD;Eev3DD;IACE,mBAAA;Gfy3DD;Ee32DD;IACE,YAAA;Gf62DD;Ee92DD;IACE,oBAAA;Gfg3DD;Eej3DD;IACE,oBAAA;Gfm3DD;Eep3DD;IACE,WAAA;Gfs3DD;Eev3DD;IACE,oBAAA;Gfy3DD;Ee13DD;IACE,oBAAA;Gf43DD;Ee73DD;IACE,WAAA;Gf+3DD;Eeh4DD;IACE,oBAAA;Gfk4DD;Een4DD;IACE,oBAAA;Gfq4DD;Eet4DD;IACE,WAAA;Gfw4DD;Eez4DD;IACE,oBAAA;Gf24DD;Ee54DD;IACE,mBAAA;Gf84DD;Ee14DD;IACE,YAAA;Gf44DD;Ee55DD;IACE,WAAA;Gf85DD;Ee/5DD;IACE,mBAAA;Gfi6DD;Eel6DD;IACE,mBAAA;Gfo6DD;Eer6DD;IACE,UAAA;Gfu6DD;Eex6DD;IACE,mBAAA;Gf06DD;Ee36DD;IACE,mBAAA;Gf66DD;Ee96DD;IACE,UAAA;Gfg7DD;Eej7DD;IACE,mBAAA;Gfm7DD;Eep7DD;IACE,mBAAA;Gfs7DD;Eev7DD;IACE,UAAA;Gfy7DD;Ee17DD;IACE,mBAAA;Gf47DD;Ee77DD;IACE,kBAAA;Gf+7DD;Ee37DD;IACE,WAAA;Gf67DD;Ee/6DD;IACE,kBAAA;Gfi7DD;Eel7DD;IACE,0BAAA;Gfo7DD;Eer7DD;IACE,0BAAA;Gfu7DD;Eex7DD;IACE,iBAAA;Gf07DD;Ee37DD;IACE,0BAAA;Gf67DD;Ee97DD;IACE,0BAAA;Gfg8DD;Eej8DD;IACE,iBAAA;Gfm8DD;Eep8DD;IACE,0BAAA;Gfs8DD;Eev8DD;IACE,0BAAA;Gfy8DD;Ee18DD;IACE,iBAAA;Gf48DD;Ee78DD;IACE,0BAAA;Gf+8DD;Eeh9DD;IACE,yBAAA;Gfk9DD;Een9DD;IACE,gBAAA;Gfq9DD;CACF;Aa18DD;EE9CI;IACE,YAAA;Gf2/DH;Eep/DD;IACE,YAAA;Gfs/DD;Eev/DD;IACE,oBAAA;Gfy/DD;Ee1/DD;IACE,oBAAA;Gf4/DD;Ee7/DD;IACE,WAAA;Gf+/DD;EehgED;IACE,oBAAA;GfkgED;EengED;IACE,oBAAA;GfqgED;EetgED;IACE,WAAA;GfwgED;EezgED;IACE,oBAAA;Gf2gED;Ee5gED;IACE,oBAAA;Gf8gED;Ee/gED;IACE,WAAA;GfihED;EelhED;IACE,oBAAA;GfohED;EerhED;IACE,mBAAA;GfuhED;EezgED;IACE,YAAA;Gf2gED;Ee5gED;IACE,oBAAA;Gf8gED;Ee/gED;IACE,oBAAA;GfihED;EelhED;IACE,WAAA;GfohED;EerhED;IACE,oBAAA;GfuhED;EexhED;IACE,oBAAA;Gf0hED;Ee3hED;IACE,WAAA;Gf6hED;Ee9hED;IACE,oBAAA;GfgiED;EejiED;IACE,oBAAA;GfmiED;EepiED;IACE,WAAA;GfsiED;EeviED;IACE,oBAAA;GfyiED;Ee1iED;IACE,mBAAA;Gf4iED;EexiED;IACE,YAAA;Gf0iED;Ee1jED;IACE,WAAA;Gf4jED;Ee7jED;IACE,mBAAA;Gf+jED;EehkED;IACE,mBAAA;GfkkED;EenkED;IACE,UAAA;GfqkED;EetkED;IACE,mBAAA;GfwkED;EezkED;IACE,mBAAA;Gf2kED;Ee5kED;IACE,UAAA;Gf8kED;Ee/kED;IACE,mBAAA;GfilED;EellED;IACE,mBAAA;GfolED;EerlED;IACE,UAAA;GfulED;EexlED;IACE,mBAAA;Gf0lED;Ee3lED;IACE,kBAAA;Gf6lED;EezlED;IACE,WAAA;Gf2lED;Ee7kED;IACE,kBAAA;Gf+kED;EehlED;IACE,0BAAA;GfklED;EenlED;IACE,0BAAA;GfqlED;EetlED;IACE,iBAAA;GfwlED;EezlED;IACE,0BAAA;Gf2lED;Ee5lED;IACE,0BAAA;Gf8lED;Ee/lED;IACE,iBAAA;GfimED;EelmED;IACE,0BAAA;GfomED;EermED;IACE,0BAAA;GfumED;EexmED;IACE,iBAAA;Gf0mED;Ee3mED;IACE,0BAAA;Gf6mED;Ee9mED;IACE,yBAAA;GfgnED;EejnED;IACE,gBAAA;GfmnED;CACF;AgBvrED;EACE,8BAAA;ChByrED;AgBvrED;EACE,iBAAA;EACA,oBAAA;EACA,eAAA;EACA,iBAAA;ChByrED;AgBvrED;EACE,iBAAA;ChByrED;AgBnrED;EACE,YAAA;EACA,gBAAA;EACA,oBAAA;ChBqrED;AgBxrED;;;;;;EAWQ,aAAA;EACA,wBAAA;EACA,oBAAA;EACA,2BAAA;ChBqrEP;AgBnsED;EAoBI,uBAAA;EACA,8BAAA;ChBkrEH;AgBvsED;;;;;;EA8BQ,cAAA;ChBirEP;AgB/sED;EAoCI,2BAAA;ChB8qEH;AgBltED;EAyCI,uBAAA;ChB4qEH;AgBrqED;;;;;;EAOQ,aAAA;ChBsqEP;AgB3pED;EACE,uBAAA;ChB6pED;AgB9pED;;;;;;EAQQ,uBAAA;ChB8pEP;AgBtqED;;EAeM,yBAAA;ChB2pEL;AgBjpED;EAEI,0BAAA;ChBkpEH;AgBzoED;EAEI,0BAAA;ChB0oEH;AgBjoED;EACE,iBAAA;EACA,YAAA;EACA,sBAAA;ChBmoED;AgB9nEG;;EACE,iBAAA;EACA,YAAA;EACA,oBAAA;ChBioEL;AiB7wEC;;;;;;;;;;;;EAOI,0BAAA;CjBoxEL;AiB9wEC;;;;;EAMI,0BAAA;CjB+wEL;AiBlyEC;;;;;;;;;;;;EAOI,0BAAA;CjByyEL;AiBnyEC;;;;;EAMI,0BAAA;CjBoyEL;AiBvzEC;;;;;;;;;;;;EAOI,0BAAA;CjB8zEL;AiBxzEC;;;;;EAMI,0BAAA;CjByzEL;AiB50EC;;;;;;;;;;;;EAOI,0BAAA;CjBm1EL;AiB70EC;;;;;EAMI,0BAAA;CjB80EL;AiBj2EC;;;;;;;;;;;;EAOI,0BAAA;CjBw2EL;AiBl2EC;;;;;EAMI,0BAAA;CjBm2EL;AgBjtED;EACE,iBAAA;EACA,kBAAA;ChBmtED;AgBtpED;EACA;IA3DI,YAAA;IACA,oBAAA;IACA,mBAAA;IACA,6CAAA;IACA,uBAAA;GhBotED;EgB7pEH;IAnDM,iBAAA;GhBmtEH;EgBhqEH;;;;;;IA1CY,oBAAA;GhBktET;EgBxqEH;IAlCM,UAAA;GhB6sEH;EgB3qEH;;;;;;IAzBY,eAAA;GhB4sET;EgBnrEH;;;;;;IArBY,gBAAA;GhBgtET;EgB3rEH;;;;IARY,iBAAA;GhBysET;CACF;AkBn6ED;EACE,WAAA;EACA,UAAA;EACA,UAAA;EAIA,aAAA;ClBk6ED;AkB/5ED;EACE,eAAA;EACA,YAAA;EACA,WAAA;EACA,oBAAA;EACA,gBAAA;EACA,qBAAA;EACA,eAAA;EACA,UAAA;EACA,iCAAA;ClBi6ED;AkB95ED;EACE,sBAAA;EACA,gBAAA;EACA,mBAAA;EACA,kBAAA;ClBg6ED;AkBr5ED;Eb4BE,+BAAA;EACG,4BAAA;EACK,uBAAA;CL43ET;AkBr5ED;;EAEE,gBAAA;EACA,mBAAA;EACA,oBAAA;ClBu5ED;AkBp5ED;EACE,eAAA;ClBs5ED;AkBl5ED;EACE,eAAA;EACA,YAAA;ClBo5ED;AkBh5ED;;EAEE,aAAA;ClBk5ED;AkB94ED;;;EZrEE,2CAAA;EACA,qBAAA;CNw9ED;AkB74ED;EACE,eAAA;EACA,iBAAA;EACA,gBAAA;EACA,wBAAA;EACA,eAAA;ClB+4ED;AkBr3ED;EACE,eAAA;EACA,YAAA;EACA,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,wBAAA;EACA,eAAA;EACA,uBAAA;EACA,uBAAA;EACA,uBAAA;EACA,mBAAA;EbxDA,yDAAA;EACQ,iDAAA;EAyHR,uFAAA;EACK,0EAAA;EACG,uEAAA;CLwzET;AmBh8EC;EACE,sBAAA;EACA,WAAA;EdUF,uFAAA;EACQ,+EAAA;CLy7ET;AKx5EC;EACE,YAAA;EACA,WAAA;CL05EH;AKx5EC;EAA0B,YAAA;CL25E3B;AK15EC;EAAgC,YAAA;CL65EjC;AkBj4EC;EACE,UAAA;EACA,8BAAA;ClBm4EH;AkB33EC;;;EAGE,0BAAA;EACA,WAAA;ClB63EH;AkB13EC;;EAEE,oBAAA;ClB43EH;AkBx3EC;EACE,aAAA;ClB03EH;AkB92ED;EACE,yBAAA;ClBg3ED;AkBx0ED;EAtBI;;;;IACE,kBAAA;GlBo2EH;EkBj2EC;;;;;;;;IAEE,kBAAA;GlBy2EH;EkBt2EC;;;;;;;;IAEE,kBAAA;GlB82EH;CACF;AkBp2ED;EACE,oBAAA;ClBs2ED;AkB91ED;;EAEE,mBAAA;EACA,eAAA;EACA,iBAAA;EACA,oBAAA;ClBg2ED;AkBr2ED;;EAQI,iBAAA;EACA,mBAAA;EACA,iBAAA;EACA,oBAAA;EACA,gBAAA;ClBi2EH;AkB91ED;;;;EAIE,mBAAA;EACA,mBAAA;EACA,mBAAA;ClBg2ED;AkB71ED;;EAEE,iBAAA;ClB+1ED;AkB31ED;;EAEE,mBAAA;EACA,sBAAA;EACA,mBAAA;EACA,iBAAA;EACA,uBAAA;EACA,oBAAA;EACA,gBAAA;ClB61ED;AkB31ED;;EAEE,cAAA;EACA,kBAAA;ClB61ED;AkBp1EC;;;;;;EAGE,oBAAA;ClBy1EH;AkBn1EC;;;;EAEE,oBAAA;ClBu1EH;AkBj1EC;;;;EAGI,oBAAA;ClBo1EL;AkBz0ED;EAEE,iBAAA;EACA,oBAAA;EAEA,iBAAA;EACA,iBAAA;ClBy0ED;AkBv0EC;;EAEE,gBAAA;EACA,iBAAA;ClBy0EH;AkB5zED;ECnQE,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;CnBkkFD;AmBhkFC;EACE,aAAA;EACA,kBAAA;CnBkkFH;AmB/jFC;;EAEE,aAAA;CnBikFH;AkBx0ED;EAEI,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;ClBy0EH;AkB/0ED;EASI,aAAA;EACA,kBAAA;ClBy0EH;AkBn1ED;;EAcI,aAAA;ClBy0EH;AkBv1ED;EAiBI,aAAA;EACA,iBAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;ClBy0EH;AkBr0ED;EC/RE,aAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,mBAAA;CnBumFD;AmBrmFC;EACE,aAAA;EACA,kBAAA;CnBumFH;AmBpmFC;;EAEE,aAAA;CnBsmFH;AkBj1ED;EAEI,aAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,mBAAA;ClBk1EH;AkBx1ED;EASI,aAAA;EACA,kBAAA;ClBk1EH;AkB51ED;;EAcI,aAAA;ClBk1EH;AkBh2ED;EAiBI,aAAA;EACA,iBAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;ClBk1EH;AkBz0ED;EAEE,mBAAA;ClB00ED;AkB50ED;EAMI,sBAAA;ClBy0EH;AkBr0ED;EACE,mBAAA;EACA,OAAA;EACA,SAAA;EACA,WAAA;EACA,eAAA;EACA,YAAA;EACA,aAAA;EACA,kBAAA;EACA,mBAAA;EACA,qBAAA;ClBu0ED;AkBr0ED;;;EAGE,YAAA;EACA,aAAA;EACA,kBAAA;ClBu0ED;AkBr0ED;;;EAGE,YAAA;EACA,aAAA;EACA,kBAAA;ClBu0ED;AkBn0ED;;;;;;;;;;EC1ZI,eAAA;CnByuFH;AkB/0ED;ECtZI,sBAAA;Ed+CF,yDAAA;EACQ,iDAAA;CL0rFT;AmBxuFG;EACE,sBAAA;Ed4CJ,0EAAA;EACQ,kEAAA;CL+rFT;AkBz1ED;EC5YI,eAAA;EACA,sBAAA;EACA,0BAAA;CnBwuFH;AkB91ED;ECtYI,eAAA;CnBuuFH;AkB91ED;;;;;;;;;;EC7ZI,eAAA;CnBuwFH;AkB12ED;ECzZI,sBAAA;Ed+CF,yDAAA;EACQ,iDAAA;CLwtFT;AmBtwFG;EACE,sBAAA;Ed4CJ,0EAAA;EACQ,kEAAA;CL6tFT;AkBp3ED;EC/YI,eAAA;EACA,sBAAA;EACA,0BAAA;CnBswFH;AkBz3ED;ECzYI,eAAA;CnBqwFH;AkBz3ED;;;;;;;;;;EChaI,eAAA;CnBqyFH;AkBr4ED;EC5ZI,sBAAA;Ed+CF,yDAAA;EACQ,iDAAA;CLsvFT;AmBpyFG;EACE,sBAAA;Ed4CJ,0EAAA;EACQ,kEAAA;CL2vFT;AkB/4ED;EClZI,eAAA;EACA,sBAAA;EACA,0BAAA;CnBoyFH;AkBp5ED;EC5YI,eAAA;CnBmyFH;AkBh5EC;EACE,UAAA;ClBk5EH;AkBh5EC;EACE,OAAA;ClBk5EH;AkBx4ED;EACE,eAAA;EACA,gBAAA;EACA,oBAAA;EACA,eAAA;ClB04ED;AkBvzED;EAwEA;IAtIM,sBAAA;IACA,iBAAA;IACA,uBAAA;GlBy3EH;EkBrvEH;IA/HM,sBAAA;IACA,YAAA;IACA,uBAAA;GlBu3EH;EkB1vEH;IAxHM,sBAAA;GlBq3EH;EkB7vEH;IApHM,sBAAA;IACA,uBAAA;GlBo3EH;EkBjwEH;;;IA9GQ,YAAA;GlBo3EL;EkBtwEH;IAxGM,YAAA;GlBi3EH;EkBzwEH;IApGM,iBAAA;IACA,uBAAA;GlBg3EH;EkB7wEH;;IA5FM,sBAAA;IACA,cAAA;IACA,iBAAA;IACA,uBAAA;GlB62EH;EkBpxEH;;IAtFQ,gBAAA;GlB82EL;EkBxxEH;;IAjFM,mBAAA;IACA,eAAA;GlB62EH;EkB7xEH;IA3EM,OAAA;GlB22EH;CACF;AkBj2ED;;;;EASI,cAAA;EACA,iBAAA;EACA,iBAAA;ClB81EH;AkBz2ED;;EAiBI,iBAAA;ClB41EH;AkB72ED;EJthBE,mBAAA;EACA,oBAAA;Cds4FD;AkB10EC;EAyBF;IAnCM,kBAAA;IACA,iBAAA;IACA,iBAAA;GlBw1EH;CACF;AkBx3ED;EAwCI,YAAA;ClBm1EH;AkBr0EC;EAUF;IAdQ,kBAAA;IACA,gBAAA;GlB60EL;CACF;AkBn0EC;EAEF;IANQ,iBAAA;IACA,gBAAA;GlB20EL;CACF;AoBp6FD;EACE,sBAAA;EACA,iBAAA;EACA,oBAAA;EACA,mBAAA;EACA,uBAAA;EACA,+BAAA;MAAA,2BAAA;EACA,gBAAA;EACA,uBAAA;EACA,8BAAA;EACA,oBAAA;EC0CA,kBAAA;EACA,gBAAA;EACA,wBAAA;EACA,mBAAA;EhB+JA,0BAAA;EACG,uBAAA;EACC,sBAAA;EACI,kBAAA;CL+tFT;AoBv6FG;;;;;;EdnBF,2CAAA;EACA,qBAAA;CNk8FD;AoB16FC;;;EAGE,YAAA;EACA,sBAAA;CpB46FH;AoBz6FC;;EAEE,WAAA;EACA,uBAAA;Ef2BF,yDAAA;EACQ,iDAAA;CLi5FT;AoBz6FC;;;EAGE,oBAAA;EE7CF,cAAA;EAGA,0BAAA;EjB8DA,yBAAA;EACQ,iBAAA;CL05FT;AoBz6FG;;EAEE,qBAAA;CpB26FL;AoBl6FD;EC3DE,YAAA;EACA,uBAAA;EACA,mBAAA;CrBg+FD;AqB99FC;;EAEE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBg+FP;AqB99FC;EACE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBg+FP;AqB99FC;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBg+FP;AqB99FG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBs+FT;AqBn+FC;;;EAGE,uBAAA;CrBq+FH;AqBh+FG;;;;;;;;;EAGE,uBAAA;EACI,mBAAA;CrBw+FT;AoBv9FD;ECZI,YAAA;EACA,uBAAA;CrBs+FH;AoBx9FD;EC9DE,YAAA;EACA,0BAAA;EACA,sBAAA;CrByhGD;AqBvhGC;;EAEE,YAAA;EACA,0BAAA;EACI,sBAAA;CrByhGP;AqBvhGC;EACE,YAAA;EACA,0BAAA;EACI,sBAAA;CrByhGP;AqBvhGC;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrByhGP;AqBvhGG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB+hGT;AqB5hGC;;;EAGE,uBAAA;CrB8hGH;AqBzhGG;;;;;;;;;EAGE,0BAAA;EACI,sBAAA;CrBiiGT;AoB7gGD;ECfI,eAAA;EACA,uBAAA;CrB+hGH;AoB7gGD;EClEE,YAAA;EACA,0BAAA;EACA,sBAAA;CrBklGD;AqBhlGC;;EAEE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBklGP;AqBhlGC;EACE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBklGP;AqBhlGC;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBklGP;AqBhlGG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBwlGT;AqBrlGC;;;EAGE,uBAAA;CrBulGH;AqBllGG;;;;;;;;;EAGE,0BAAA;EACI,sBAAA;CrB0lGT;AoBlkGD;ECnBI,eAAA;EACA,uBAAA;CrBwlGH;AoBlkGD;ECtEE,YAAA;EACA,0BAAA;EACA,sBAAA;CrB2oGD;AqBzoGC;;EAEE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB2oGP;AqBzoGC;EACE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB2oGP;AqBzoGC;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB2oGP;AqBzoGG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBipGT;AqB9oGC;;;EAGE,uBAAA;CrBgpGH;AqB3oGG;;;;;;;;;EAGE,0BAAA;EACI,sBAAA;CrBmpGT;AoBvnGD;ECvBI,eAAA;EACA,uBAAA;CrBipGH;AoBvnGD;EC1EE,YAAA;EACA,0BAAA;EACA,sBAAA;CrBosGD;AqBlsGC;;EAEE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBosGP;AqBlsGC;EACE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBosGP;AqBlsGC;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBosGP;AqBlsGG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB0sGT;AqBvsGC;;;EAGE,uBAAA;CrBysGH;AqBpsGG;;;;;;;;;EAGE,0BAAA;EACI,sBAAA;CrB4sGT;AoB5qGD;EC3BI,eAAA;EACA,uBAAA;CrB0sGH;AoB5qGD;EC9EE,YAAA;EACA,0BAAA;EACA,sBAAA;CrB6vGD;AqB3vGC;;EAEE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB6vGP;AqB3vGC;EACE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB6vGP;AqB3vGC;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB6vGP;AqB3vGG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBmwGT;AqBhwGC;;;EAGE,uBAAA;CrBkwGH;AqB7vGG;;;;;;;;;EAGE,0BAAA;EACI,sBAAA;CrBqwGT;AoBjuGD;EC/BI,eAAA;EACA,uBAAA;CrBmwGH;AoB5tGD;EACE,eAAA;EACA,oBAAA;EACA,iBAAA;CpB8tGD;AoB5tGC;;;;;EAKE,8BAAA;EfnCF,yBAAA;EACQ,iBAAA;CLkwGT;AoB7tGC;;;;EAIE,0BAAA;CpB+tGH;AoB7tGC;;EAEE,eAAA;EACA,2BAAA;EACA,8BAAA;CpB+tGH;AoB3tGG;;;;EAEE,eAAA;EACA,sBAAA;CpB+tGL;AoBttGD;;ECxEE,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,mBAAA;CrBkyGD;AoBztGD;;EC5EE,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;CrByyGD;AoB5tGD;;EChFE,iBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;CrBgzGD;AoB3tGD;EACE,eAAA;EACA,YAAA;CpB6tGD;AoBztGD;EACE,gBAAA;CpB2tGD;AoBptGC;;;EACE,YAAA;CpBwtGH;AuBl3GD;EACE,WAAA;ElBoLA,yCAAA;EACK,oCAAA;EACG,iCAAA;CLisGT;AuBr3GC;EACE,WAAA;CvBu3GH;AuBn3GD;EACE,cAAA;CvBq3GD;AuBn3GC;EAAY,eAAA;CvBs3Gb;AuBr3GC;EAAY,mBAAA;CvBw3Gb;AuBv3GC;EAAY,yBAAA;CvB03Gb;AuBv3GD;EACE,mBAAA;EACA,UAAA;EACA,iBAAA;ElBuKA,gDAAA;EACQ,2CAAA;KAAA,wCAAA;EAOR,mCAAA;EACQ,8BAAA;KAAA,2BAAA;EAGR,yCAAA;EACQ,oCAAA;KAAA,iCAAA;CL2sGT;AwBr5GD;EACE,sBAAA;EACA,SAAA;EACA,UAAA;EACA,iBAAA;EACA,uBAAA;EACA,uBAAA;EACA,yBAAA;EACA,oCAAA;EACA,mCAAA;CxBu5GD;AwBn5GD;;EAEE,mBAAA;CxBq5GD;AwBj5GD;EACE,WAAA;CxBm5GD;AwB/4GD;EACE,mBAAA;EACA,UAAA;EACA,QAAA;EACA,cAAA;EACA,cAAA;EACA,YAAA;EACA,iBAAA;EACA,eAAA;EACA,gBAAA;EACA,iBAAA;EACA,gBAAA;EACA,iBAAA;EACA,uBAAA;EACA,uBAAA;EACA,sCAAA;EACA,mBAAA;EnBsBA,oDAAA;EACQ,4CAAA;EmBrBR,qCAAA;UAAA,6BAAA;CxBk5GD;AwB74GC;EACE,SAAA;EACA,WAAA;CxB+4GH;AwBx6GD;ECzBE,YAAA;EACA,cAAA;EACA,iBAAA;EACA,0BAAA;CzBo8GD;AwB96GD;EAmCI,eAAA;EACA,kBAAA;EACA,YAAA;EACA,oBAAA;EACA,wBAAA;EACA,eAAA;EACA,oBAAA;CxB84GH;AwBx4GC;;EAEE,sBAAA;EACA,eAAA;EACA,0BAAA;CxB04GH;AwBp4GC;;;EAGE,YAAA;EACA,sBAAA;EACA,WAAA;EACA,0BAAA;CxBs4GH;AwB73GC;;;EAGE,eAAA;CxB+3GH;AwB33GC;;EAEE,sBAAA;EACA,8BAAA;EACA,uBAAA;EE3GF,oEAAA;EF6GE,oBAAA;CxB63GH;AwBx3GD;EAGI,eAAA;CxBw3GH;AwB33GD;EAQI,WAAA;CxBs3GH;AwB92GD;EACE,WAAA;EACA,SAAA;CxBg3GD;AwBx2GD;EACE,QAAA;EACA,YAAA;CxB02GD;AwBt2GD;EACE,eAAA;EACA,kBAAA;EACA,gBAAA;EACA,wBAAA;EACA,eAAA;EACA,oBAAA;CxBw2GD;AwBp2GD;EACE,gBAAA;EACA,QAAA;EACA,SAAA;EACA,UAAA;EACA,OAAA;EACA,aAAA;CxBs2GD;AwBl2GD;EACE,SAAA;EACA,WAAA;CxBo2GD;AwB51GD;;EAII,cAAA;EACA,0BAAA;EACA,4BAAA;EACA,YAAA;CxB41GH;AwBn2GD;;EAWI,UAAA;EACA,aAAA;EACA,mBAAA;CxB41GH;AwBv0GD;EAXE;IApEA,WAAA;IACA,SAAA;GxB05GC;EwBv1GD;IA1DA,QAAA;IACA,YAAA;GxBo5GC;CACF;A2BpiHD;;EAEE,mBAAA;EACA,sBAAA;EACA,uBAAA;C3BsiHD;A2B1iHD;;EAMI,mBAAA;EACA,YAAA;C3BwiHH;A2BtiHG;;;;;;;;EAIE,WAAA;C3B4iHL;A2BtiHD;;;;EAKI,kBAAA;C3BuiHH;A2BliHD;EACE,kBAAA;C3BoiHD;A2BriHD;;;EAOI,YAAA;C3BmiHH;A2B1iHD;;;EAYI,iBAAA;C3BmiHH;A2B/hHD;EACE,iBAAA;C3BiiHD;A2B7hHD;EACE,eAAA;C3B+hHD;A2B9hHC;EClDA,8BAAA;EACG,2BAAA;C5BmlHJ;A2B7hHD;;EC/CE,6BAAA;EACG,0BAAA;C5BglHJ;A2B5hHD;EACE,YAAA;C3B8hHD;A2B5hHD;EACE,iBAAA;C3B8hHD;A2B5hHD;;ECnEE,8BAAA;EACG,2BAAA;C5BmmHJ;A2B3hHD;ECjEE,6BAAA;EACG,0BAAA;C5B+lHJ;A2B1hHD;;EAEE,WAAA;C3B4hHD;A2B3gHD;EACE,kBAAA;EACA,mBAAA;C3B6gHD;A2B3gHD;EACE,mBAAA;EACA,oBAAA;C3B6gHD;A2BxgHD;EtB/CE,yDAAA;EACQ,iDAAA;CL0jHT;A2BxgHC;EtBnDA,yBAAA;EACQ,iBAAA;CL8jHT;A2BrgHD;EACE,eAAA;C3BugHD;A2BpgHD;EACE,wBAAA;EACA,uBAAA;C3BsgHD;A2BngHD;EACE,wBAAA;C3BqgHD;A2B9/GD;;;EAII,eAAA;EACA,YAAA;EACA,YAAA;EACA,gBAAA;C3B+/GH;A2BtgHD;EAcM,YAAA;C3B2/GL;A2BzgHD;;;;EAsBI,iBAAA;EACA,eAAA;C3By/GH;A2Bp/GC;EACE,iBAAA;C3Bs/GH;A2Bp/GC;EC3KA,6BAAA;EACC,4BAAA;EAOD,8BAAA;EACC,6BAAA;C5B4pHF;A2Bt/GC;EC/KA,2BAAA;EACC,0BAAA;EAOD,gCAAA;EACC,+BAAA;C5BkqHF;A2Bv/GD;EACE,iBAAA;C3By/GD;A2Bv/GD;;EC/KE,8BAAA;EACC,6BAAA;C5B0qHF;A2Bt/GD;EC7LE,2BAAA;EACC,0BAAA;C5BsrHF;A2Bl/GD;EACE,eAAA;EACA,YAAA;EACA,oBAAA;EACA,0BAAA;C3Bo/GD;A2Bx/GD;;EAOI,YAAA;EACA,oBAAA;EACA,UAAA;C3Bq/GH;A2B9/GD;EAYI,YAAA;C3Bq/GH;A2BjgHD;EAgBI,WAAA;C3Bo/GH;A2Bn+GD;;;;EAKM,mBAAA;EACA,uBAAA;EACA,qBAAA;C3Bo+GL;A6B9sHD;EACE,mBAAA;EACA,eAAA;EACA,0BAAA;C7BgtHD;A6B7sHC;EACE,YAAA;EACA,gBAAA;EACA,iBAAA;C7B+sHH;A6BxtHD;EAeI,mBAAA;EACA,WAAA;EAKA,YAAA;EAEA,YAAA;EACA,iBAAA;C7BusHH;A6BrsHG;EACE,WAAA;C7BusHL;A6B7rHD;;;EV0BE,aAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,mBAAA;CnBwqHD;AmBtqHC;;;EACE,aAAA;EACA,kBAAA;CnB0qHH;AmBvqHC;;;;;;EAEE,aAAA;CnB6qHH;A6B/sHD;;;EVqBE,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;CnB+rHD;AmB7rHC;;;EACE,aAAA;EACA,kBAAA;CnBisHH;AmB9rHC;;;;;;EAEE,aAAA;CnBosHH;A6B7tHD;;;EAGE,oBAAA;C7B+tHD;A6B7tHC;;;EACE,iBAAA;C7BiuHH;A6B7tHD;;EAEE,UAAA;EACA,oBAAA;EACA,uBAAA;C7B+tHD;A6B1tHD;EACE,kBAAA;EACA,gBAAA;EACA,oBAAA;EACA,eAAA;EACA,eAAA;EACA,mBAAA;EACA,0BAAA;EACA,uBAAA;EACA,mBAAA;C7B4tHD;A6BztHC;EACE,kBAAA;EACA,gBAAA;EACA,mBAAA;C7B2tHH;A6BztHC;EACE,mBAAA;EACA,gBAAA;EACA,mBAAA;C7B2tHH;A6B/uHD;;EA0BI,cAAA;C7BytHH;A6BptHD;;;;;;;EDpGE,8BAAA;EACG,2BAAA;C5Bi0HJ;A6BrtHD;EACE,gBAAA;C7ButHD;A6BrtHD;;;;;;;EDxGE,6BAAA;EACG,0BAAA;C5Bs0HJ;A6BttHD;EACE,eAAA;C7BwtHD;A6BntHD;EACE,mBAAA;EAGA,aAAA;EACA,oBAAA;C7BmtHD;A6BxtHD;EAUI,mBAAA;C7BitHH;A6B3tHD;EAYM,kBAAA;C7BktHL;A6B/sHG;;;EAGE,WAAA;C7BitHL;A6B5sHC;;EAGI,mBAAA;C7B6sHL;A6B1sHC;;EAGI,WAAA;EACA,kBAAA;C7B2sHL;A8B12HD;EACE,iBAAA;EACA,gBAAA;EACA,iBAAA;C9B42HD;A8B/2HD;EAOI,mBAAA;EACA,eAAA;C9B22HH;A8Bn3HD;EAWM,mBAAA;EACA,eAAA;EACA,mBAAA;C9B22HL;A8B12HK;;EAEE,sBAAA;EACA,0BAAA;C9B42HP;A8Bv2HG;EACE,eAAA;C9By2HL;A8Bv2HK;;EAEE,eAAA;EACA,sBAAA;EACA,8BAAA;EACA,oBAAA;C9By2HP;A8Bl2HG;;;EAGE,0BAAA;EACA,sBAAA;C9Bo2HL;A8B74HD;ELHE,YAAA;EACA,cAAA;EACA,iBAAA;EACA,0BAAA;CzBm5HD;A8Bn5HD;EA0DI,gBAAA;C9B41HH;A8Bn1HD;EACE,8BAAA;C9Bq1HD;A8Bt1HD;EAGI,YAAA;EAEA,oBAAA;C9Bq1HH;A8B11HD;EASM,kBAAA;EACA,wBAAA;EACA,8BAAA;EACA,2BAAA;C9Bo1HL;A8Bn1HK;EACE,mCAAA;C9Bq1HP;A8B/0HK;;;EAGE,eAAA;EACA,uBAAA;EACA,uBAAA;EACA,iCAAA;EACA,gBAAA;C9Bi1HP;A8B50HC;EAqDA,YAAA;EA8BA,iBAAA;C9B6vHD;A8Bh1HC;EAwDE,YAAA;C9B2xHH;A8Bn1HC;EA0DI,mBAAA;EACA,mBAAA;C9B4xHL;A8Bv1HC;EAgEE,UAAA;EACA,WAAA;C9B0xHH;A8B9wHD;EA0DA;IAjEM,oBAAA;IACA,UAAA;G9ByxHH;E8BztHH;IA9DQ,iBAAA;G9B0xHL;CACF;A8Bp2HC;EAuFE,gBAAA;EACA,mBAAA;C9BgxHH;A8Bx2HC;;;EA8FE,uBAAA;C9B+wHH;A8BjwHD;EA2BA;IApCM,8BAAA;IACA,2BAAA;G9B8wHH;E8B3uHH;;;IA9BM,0BAAA;G9B8wHH;CACF;A8B/2HD;EAEI,YAAA;C9Bg3HH;A8Bl3HD;EAMM,mBAAA;C9B+2HL;A8Br3HD;EASM,iBAAA;C9B+2HL;A8B12HK;;;EAGE,YAAA;EACA,0BAAA;C9B42HP;A8Bp2HD;EAEI,YAAA;C9Bq2HH;A8Bv2HD;EAIM,gBAAA;EACA,eAAA;C9Bs2HL;A8B11HD;EACE,YAAA;C9B41HD;A8B71HD;EAII,YAAA;C9B41HH;A8Bh2HD;EAMM,mBAAA;EACA,mBAAA;C9B61HL;A8Bp2HD;EAYI,UAAA;EACA,WAAA;C9B21HH;A8B/0HD;EA0DA;IAjEM,oBAAA;IACA,UAAA;G9B01HH;E8B1xHH;IA9DQ,iBAAA;G9B21HL;CACF;A8Bn1HD;EACE,iBAAA;C9Bq1HD;A8Bt1HD;EAKI,gBAAA;EACA,mBAAA;C9Bo1HH;A8B11HD;;;EAYI,uBAAA;C9Bm1HH;A8Br0HD;EA2BA;IApCM,8BAAA;IACA,2BAAA;G9Bk1HH;E8B/yHH;;;IA9BM,0BAAA;G9Bk1HH;CACF;A8Bz0HD;EAEI,cAAA;C9B00HH;A8B50HD;EAKI,eAAA;C9B00HH;A8Bj0HD;EAEE,iBAAA;EF3OA,2BAAA;EACC,0BAAA;C5B8iIF;A+BxiID;EACE,mBAAA;EACA,iBAAA;EACA,oBAAA;EACA,8BAAA;C/B0iID;A+BliID;EA8nBA;IAhoBI,mBAAA;G/BwiID;CACF;A+BzhID;EAgnBA;IAlnBI,YAAA;G/B+hID;CACF;A+BjhID;EACE,oBAAA;EACA,oBAAA;EACA,mBAAA;EACA,kCAAA;EACA,2DAAA;UAAA,mDAAA;EAEA,kCAAA;C/BkhID;A+BhhIC;EACE,iBAAA;C/BkhIH;A+Bt/HD;EA6jBA;IArlBI,YAAA;IACA,cAAA;IACA,yBAAA;YAAA,iBAAA;G/BkhID;E+BhhIC;IACE,0BAAA;IACA,wBAAA;IACA,kBAAA;IACA,6BAAA;G/BkhIH;E+B/gIC;IACE,oBAAA;G/BihIH;E+B5gIC;;;IAGE,gBAAA;IACA,iBAAA;G/B8gIH;CACF;A+B1gID;;EAGI,kBAAA;C/B2gIH;A+BtgIC;EAmjBF;;IArjBM,kBAAA;G/B6gIH;CACF;A+BpgID;;;;EAII,oBAAA;EACA,mBAAA;C/BsgIH;A+BhgIC;EAgiBF;;;;IAniBM,gBAAA;IACA,eAAA;G/B0gIH;CACF;A+B9/HD;EACE,cAAA;EACA,sBAAA;C/BggID;A+B3/HD;EA8gBA;IAhhBI,iBAAA;G/BigID;CACF;A+B7/HD;;EAEE,gBAAA;EACA,SAAA;EACA,QAAA;EACA,cAAA;C/B+/HD;A+Bz/HD;EAggBA;;IAlgBI,iBAAA;G/BggID;CACF;A+B9/HD;EACE,OAAA;EACA,sBAAA;C/BggID;A+B9/HD;EACE,UAAA;EACA,iBAAA;EACA,sBAAA;C/BggID;A+B1/HD;EACE,YAAA;EACA,mBAAA;EACA,gBAAA;EACA,kBAAA;EACA,aAAA;C/B4/HD;A+B1/HC;;EAEE,sBAAA;C/B4/HH;A+BrgID;EAaI,eAAA;C/B2/HH;A+Bl/HD;EALI;;IAEE,mBAAA;G/B0/HH;CACF;A+Bh/HD;EACE,mBAAA;EACA,aAAA;EACA,mBAAA;EACA,kBAAA;EC9LA,gBAAA;EACA,mBAAA;ED+LA,8BAAA;EACA,uBAAA;EACA,8BAAA;EACA,mBAAA;C/Bm/HD;A+B/+HC;EACE,WAAA;C/Bi/HH;A+B//HD;EAmBI,eAAA;EACA,YAAA;EACA,YAAA;EACA,mBAAA;C/B++HH;A+BrgID;EAyBI,gBAAA;C/B++HH;A+Bz+HD;EAqbA;IAvbI,cAAA;G/B++HD;CACF;A+Bt+HD;EACE,oBAAA;C/Bw+HD;A+Bz+HD;EAII,kBAAA;EACA,qBAAA;EACA,kBAAA;C/Bw+HH;A+B58HC;EA2YF;IAjaM,iBAAA;IACA,YAAA;IACA,YAAA;IACA,cAAA;IACA,8BAAA;IACA,UAAA;IACA,yBAAA;YAAA,iBAAA;G/Bs+HH;E+B3kHH;;IAxZQ,2BAAA;G/Bu+HL;E+B/kHH;IArZQ,kBAAA;G/Bu+HL;E+Bt+HK;;IAEE,uBAAA;G/Bw+HP;CACF;A+Bt9HD;EA+XA;IA1YI,YAAA;IACA,UAAA;G/Bq+HD;E+B5lHH;IAtYM,YAAA;G/Bq+HH;E+B/lHH;IApYQ,kBAAA;IACA,qBAAA;G/Bs+HL;CACF;A+B39HD;EACE,mBAAA;EACA,oBAAA;EACA,mBAAA;EACA,kCAAA;EACA,qCAAA;E1B9NA,6FAAA;EACQ,qFAAA;E2B/DR,gBAAA;EACA,mBAAA;ChC4vID;AkBtuHD;EAwEA;IAtIM,sBAAA;IACA,iBAAA;IACA,uBAAA;GlBwyHH;EkBpqHH;IA/HM,sBAAA;IACA,YAAA;IACA,uBAAA;GlBsyHH;EkBzqHH;IAxHM,sBAAA;GlBoyHH;EkB5qHH;IApHM,sBAAA;IACA,uBAAA;GlBmyHH;EkBhrHH;;;IA9GQ,YAAA;GlBmyHL;EkBrrHH;IAxGM,YAAA;GlBgyHH;EkBxrHH;IApGM,iBAAA;IACA,uBAAA;GlB+xHH;EkB5rHH;;IA5FM,sBAAA;IACA,cAAA;IACA,iBAAA;IACA,uBAAA;GlB4xHH;EkBnsHH;;IAtFQ,gBAAA;GlB6xHL;EkBvsHH;;IAjFM,mBAAA;IACA,eAAA;GlB4xHH;EkB5sHH;IA3EM,OAAA;GlB0xHH;CACF;A+BpgIC;EAmWF;IAzWM,mBAAA;G/B8gIH;E+B5gIG;IACE,iBAAA;G/B8gIL;CACF;A+B7/HD;EAoVA;IA5VI,YAAA;IACA,UAAA;IACA,eAAA;IACA,gBAAA;IACA,eAAA;IACA,kBAAA;I1BzPF,yBAAA;IACQ,iBAAA;GLmwIP;CACF;A+BngID;EACE,cAAA;EHpUA,2BAAA;EACC,0BAAA;C5B00IF;A+BngID;EACE,iBAAA;EHzUA,6BAAA;EACC,4BAAA;EAOD,8BAAA;EACC,6BAAA;C5By0IF;A+B//HD;EChVE,gBAAA;EACA,mBAAA;ChCk1ID;A+BhgIC;ECnVA,iBAAA;EACA,oBAAA;ChCs1ID;A+BjgIC;ECtVA,iBAAA;EACA,oBAAA;ChC01ID;A+B3/HD;EChWE,iBAAA;EACA,oBAAA;ChC81ID;A+Bv/HD;EAsSA;IA1SI,YAAA;IACA,kBAAA;IACA,mBAAA;G/B+/HD;CACF;A+Bl+HD;EAhBE;IExWA,uBAAA;GjC81IC;E+Br/HD;IE5WA,wBAAA;IF8WE,oBAAA;G/Bu/HD;E+Bz/HD;IAKI,gBAAA;G/Bu/HH;CACF;A+B9+HD;EACE,0BAAA;EACA,sBAAA;C/Bg/HD;A+Bl/HD;EAKI,YAAA;C/Bg/HH;A+B/+HG;;EAEE,eAAA;EACA,8BAAA;C/Bi/HL;A+B1/HD;EAcI,YAAA;C/B++HH;A+B7/HD;EAmBM,YAAA;C/B6+HL;A+B3+HK;;EAEE,YAAA;EACA,8BAAA;C/B6+HP;A+Bz+HK;;;EAGE,YAAA;EACA,0BAAA;C/B2+HP;A+Bv+HK;;;EAGE,YAAA;EACA,8BAAA;C/By+HP;A+BjhID;EA8CI,mBAAA;C/Bs+HH;A+Br+HG;;EAEE,uBAAA;C/Bu+HL;A+BxhID;EAoDM,uBAAA;C/Bu+HL;A+B3hID;;EA0DI,sBAAA;C/Bq+HH;A+B99HK;;;EAGE,0BAAA;EACA,YAAA;C/Bg+HP;A+B/7HC;EAoKF;IA7LU,YAAA;G/B49HP;E+B39HO;;IAEE,YAAA;IACA,8BAAA;G/B69HT;E+Bz9HO;;;IAGE,YAAA;IACA,0BAAA;G/B29HT;E+Bv9HO;;;IAGE,YAAA;IACA,8BAAA;G/By9HT;CACF;A+B3jID;EA8GI,YAAA;C/Bg9HH;A+B/8HG;EACE,YAAA;C/Bi9HL;A+BjkID;EAqHI,YAAA;C/B+8HH;A+B98HG;;EAEE,YAAA;C/Bg9HL;A+B58HK;;;;EAEE,YAAA;C/Bg9HP;A+Bx8HD;EACE,uBAAA;EACA,sBAAA;C/B08HD;A+B58HD;EAKI,eAAA;C/B08HH;A+Bz8HG;;EAEE,YAAA;EACA,8BAAA;C/B28HL;A+Bp9HD;EAcI,eAAA;C/By8HH;A+Bv9HD;EAmBM,eAAA;C/Bu8HL;A+Br8HK;;EAEE,YAAA;EACA,8BAAA;C/Bu8HP;A+Bn8HK;;;EAGE,YAAA;EACA,0BAAA;C/Bq8HP;A+Bj8HK;;;EAGE,YAAA;EACA,8BAAA;C/Bm8HP;A+B3+HD;EA+CI,mBAAA;C/B+7HH;A+B97HG;;EAEE,uBAAA;C/Bg8HL;A+Bl/HD;EAqDM,uBAAA;C/Bg8HL;A+Br/HD;;EA2DI,sBAAA;C/B87HH;A+Bx7HK;;;EAGE,0BAAA;EACA,YAAA;C/B07HP;A+Bn5HC;EAwBF;IAvDU,sBAAA;G/Bs7HP;E+B/3HH;IApDU,0BAAA;G/Bs7HP;E+Bl4HH;IAjDU,eAAA;G/Bs7HP;E+Br7HO;;IAEE,YAAA;IACA,8BAAA;G/Bu7HT;E+Bn7HO;;;IAGE,YAAA;IACA,0BAAA;G/Bq7HT;E+Bj7HO;;;IAGE,YAAA;IACA,8BAAA;G/Bm7HT;CACF;A+B3hID;EA+GI,eAAA;C/B+6HH;A+B96HG;EACE,YAAA;C/Bg7HL;A+BjiID;EAsHI,eAAA;C/B86HH;A+B76HG;;EAEE,YAAA;C/B+6HL;A+B36HK;;;;EAEE,YAAA;C/B+6HP;AkCzjJD;EACE,kBAAA;EACA,oBAAA;EACA,iBAAA;EACA,0BAAA;EACA,mBAAA;ClC2jJD;AkChkJD;EAQI,sBAAA;ClC2jJH;AkCnkJD;EAWM,kBAAA;EACA,eAAA;EACA,YAAA;ClC2jJL;AkCxkJD;EAkBI,eAAA;ClCyjJH;AmC7kJD;EACE,sBAAA;EACA,gBAAA;EACA,eAAA;EACA,mBAAA;CnC+kJD;AmCnlJD;EAOI,gBAAA;CnC+kJH;AmCtlJD;;EAUM,mBAAA;EACA,YAAA;EACA,kBAAA;EACA,wBAAA;EACA,sBAAA;EACA,eAAA;EACA,uBAAA;EACA,uBAAA;EACA,kBAAA;CnCglJL;AmC9kJG;;EAGI,eAAA;EPXN,+BAAA;EACG,4BAAA;C5B2lJJ;AmC7kJG;;EPvBF,gCAAA;EACG,6BAAA;C5BwmJJ;AmCxkJG;;;;EAEE,WAAA;EACA,eAAA;EACA,0BAAA;EACA,mBAAA;CnC4kJL;AmCtkJG;;;;;;EAGE,WAAA;EACA,YAAA;EACA,0BAAA;EACA,sBAAA;EACA,gBAAA;CnC2kJL;AmCloJD;;;;;;EAkEM,eAAA;EACA,uBAAA;EACA,mBAAA;EACA,oBAAA;CnCwkJL;AmC/jJD;;EC3EM,mBAAA;EACA,gBAAA;EACA,uBAAA;CpC8oJL;AoC5oJG;;ERKF,+BAAA;EACG,4BAAA;C5B2oJJ;AoC3oJG;;ERTF,gCAAA;EACG,6BAAA;C5BwpJJ;AmC1kJD;;EChFM,kBAAA;EACA,gBAAA;EACA,iBAAA;CpC8pJL;AoC5pJG;;ERKF,+BAAA;EACG,4BAAA;C5B2pJJ;AoC3pJG;;ERTF,gCAAA;EACG,6BAAA;C5BwqJJ;AqC3qJD;EACE,gBAAA;EACA,eAAA;EACA,iBAAA;EACA,mBAAA;CrC6qJD;AqCjrJD;EAOI,gBAAA;CrC6qJH;AqCprJD;;EAUM,sBAAA;EACA,kBAAA;EACA,uBAAA;EACA,uBAAA;EACA,oBAAA;CrC8qJL;AqC5rJD;;EAmBM,sBAAA;EACA,0BAAA;CrC6qJL;AqCjsJD;;EA2BM,aAAA;CrC0qJL;AqCrsJD;;EAkCM,YAAA;CrCuqJL;AqCzsJD;;;;EA2CM,eAAA;EACA,uBAAA;EACA,oBAAA;CrCoqJL;AsCltJD;EACE,gBAAA;EACA,wBAAA;EACA,eAAA;EACA,kBAAA;EACA,eAAA;EACA,YAAA;EACA,mBAAA;EACA,oBAAA;EACA,yBAAA;EACA,qBAAA;CtCotJD;AsChtJG;;EAEE,YAAA;EACA,sBAAA;EACA,gBAAA;CtCktJL;AsC7sJC;EACE,cAAA;CtC+sJH;AsC3sJC;EACE,mBAAA;EACA,UAAA;CtC6sJH;AsCtsJD;ECtCE,0BAAA;CvC+uJD;AuC5uJG;;EAEE,0BAAA;CvC8uJL;AsCzsJD;EC1CE,0BAAA;CvCsvJD;AuCnvJG;;EAEE,0BAAA;CvCqvJL;AsC5sJD;EC9CE,0BAAA;CvC6vJD;AuC1vJG;;EAEE,0BAAA;CvC4vJL;AsC/sJD;EClDE,0BAAA;CvCowJD;AuCjwJG;;EAEE,0BAAA;CvCmwJL;AsCltJD;ECtDE,0BAAA;CvC2wJD;AuCxwJG;;EAEE,0BAAA;CvC0wJL;AsCrtJD;EC1DE,0BAAA;CvCkxJD;AuC/wJG;;EAEE,0BAAA;CvCixJL;AwCnxJD;EACE,sBAAA;EACA,gBAAA;EACA,iBAAA;EACA,gBAAA;EACA,kBAAA;EACA,YAAA;EACA,eAAA;EACA,uBAAA;EACA,oBAAA;EACA,mBAAA;EACA,0BAAA;EACA,oBAAA;CxCqxJD;AwClxJC;EACE,cAAA;CxCoxJH;AwChxJC;EACE,mBAAA;EACA,UAAA;CxCkxJH;AwC/wJC;;EAEE,OAAA;EACA,iBAAA;CxCixJH;AwC5wJG;;EAEE,YAAA;EACA,sBAAA;EACA,gBAAA;CxC8wJL;AwCzwJC;;EAEE,eAAA;EACA,uBAAA;CxC2wJH;AwCxwJC;EACE,aAAA;CxC0wJH;AwCvwJC;EACE,kBAAA;CxCywJH;AwCtwJC;EACE,iBAAA;CxCwwJH;AyCl0JD;EACE,kBAAA;EACA,qBAAA;EACA,oBAAA;EACA,eAAA;EACA,0BAAA;CzCo0JD;AyCz0JD;;EASI,eAAA;CzCo0JH;AyC70JD;EAaI,oBAAA;EACA,gBAAA;EACA,iBAAA;CzCm0JH;AyCl1JD;EAmBI,0BAAA;CzCk0JH;AyC/zJC;;EAEE,mBAAA;EACA,mBAAA;EACA,oBAAA;CzCi0JH;AyC31JD;EA8BI,gBAAA;CzCg0JH;AyC9yJD;EACA;IAfI,kBAAA;IACA,qBAAA;GzCg0JD;EyC9zJC;;IAEE,mBAAA;IACA,oBAAA;GzCg0JH;EyCvzJH;;IAJM,gBAAA;GzC+zJH;CACF;A0C52JD;EACE,eAAA;EACA,aAAA;EACA,oBAAA;EACA,wBAAA;EACA,uBAAA;EACA,uBAAA;EACA,mBAAA;ErCiLA,4CAAA;EACK,uCAAA;EACG,oCAAA;CL8rJT;A0Cx3JD;;EAaI,kBAAA;EACA,mBAAA;C1C+2JH;A0C32JC;;;EAGE,sBAAA;C1C62JH;A0Cl4JD;EA0BI,aAAA;EACA,eAAA;C1C22JH;A2Cp4JD;EACE,cAAA;EACA,oBAAA;EACA,8BAAA;EACA,mBAAA;C3Cs4JD;A2C14JD;EAQI,cAAA;EAEA,eAAA;C3Co4JH;A2C94JD;EAeI,kBAAA;C3Ck4JH;A2Cj5JD;;EAqBI,iBAAA;C3Cg4JH;A2Cr5JD;EAyBI,gBAAA;C3C+3JH;A2Cv3JD;;EAEE,oBAAA;C3Cy3JD;A2C33JD;;EAMI,mBAAA;EACA,UAAA;EACA,aAAA;EACA,eAAA;C3Cy3JH;A2Cj3JD;ECvDE,0BAAA;EACA,sBAAA;EACA,eAAA;C5C26JD;A2Ct3JD;EClDI,0BAAA;C5C26JH;A2Cz3JD;EC/CI,eAAA;C5C26JH;A2Cx3JD;EC3DE,0BAAA;EACA,sBAAA;EACA,eAAA;C5Cs7JD;A2C73JD;ECtDI,0BAAA;C5Cs7JH;A2Ch4JD;ECnDI,eAAA;C5Cs7JH;A2C/3JD;EC/DE,0BAAA;EACA,sBAAA;EACA,eAAA;C5Ci8JD;A2Cp4JD;EC1DI,0BAAA;C5Ci8JH;A2Cv4JD;ECvDI,eAAA;C5Ci8JH;A2Ct4JD;ECnEE,0BAAA;EACA,sBAAA;EACA,eAAA;C5C48JD;A2C34JD;EC9DI,0BAAA;C5C48JH;A2C94JD;EC3DI,eAAA;C5C48JH;A6C98JD;EACE;IAAQ,4BAAA;G7Ci9JP;E6Ch9JD;IAAQ,yBAAA;G7Cm9JP;CACF;A6Ch9JD;EACE;IAAQ,4BAAA;G7Cm9JP;E6Cl9JD;IAAQ,yBAAA;G7Cq9JP;CACF;A6Cx9JD;EACE;IAAQ,4BAAA;G7Cm9JP;E6Cl9JD;IAAQ,yBAAA;G7Cq9JP;CACF;A6C98JD;EACE,iBAAA;EACA,aAAA;EACA,oBAAA;EACA,0BAAA;EACA,mBAAA;ExCsCA,uDAAA;EACQ,+CAAA;CL26JT;A6C78JD;EACE,YAAA;EACA,UAAA;EACA,aAAA;EACA,gBAAA;EACA,kBAAA;EACA,YAAA;EACA,mBAAA;EACA,0BAAA;ExCyBA,uDAAA;EACQ,+CAAA;EAyHR,oCAAA;EACK,+BAAA;EACG,4BAAA;CL+zJT;A6C18JD;;ECCI,8MAAA;EACA,yMAAA;EACA,sMAAA;EDAF,mCAAA;UAAA,2BAAA;C7C88JD;A6Cv8JD;;ExC5CE,2DAAA;EACK,sDAAA;EACG,mDAAA;CLu/JT;A6Cp8JD;EErEE,0BAAA;C/C4gKD;A+CzgKC;EDgDE,8MAAA;EACA,yMAAA;EACA,sMAAA;C9C49JH;A6Cx8JD;EEzEE,0BAAA;C/CohKD;A+CjhKC;EDgDE,8MAAA;EACA,yMAAA;EACA,sMAAA;C9Co+JH;A6C58JD;EE7EE,0BAAA;C/C4hKD;A+CzhKC;EDgDE,8MAAA;EACA,yMAAA;EACA,sMAAA;C9C4+JH;A6Ch9JD;EEjFE,0BAAA;C/CoiKD;A+CjiKC;EDgDE,8MAAA;EACA,yMAAA;EACA,sMAAA;C9Co/JH;AgD5iKD;EAEE,iBAAA;ChD6iKD;AgD3iKC;EACE,cAAA;ChD6iKH;AgDziKD;;EAEE,QAAA;EACA,iBAAA;ChD2iKD;AgDxiKD;EACE,eAAA;ChD0iKD;AgDviKD;EACE,eAAA;ChDyiKD;AgDtiKC;EACE,gBAAA;ChDwiKH;AgDpiKD;;EAEE,mBAAA;ChDsiKD;AgDniKD;;EAEE,oBAAA;ChDqiKD;AgDliKD;;;EAGE,oBAAA;EACA,oBAAA;ChDoiKD;AgDjiKD;EACE,uBAAA;ChDmiKD;AgDhiKD;EACE,uBAAA;ChDkiKD;AgD9hKD;EACE,cAAA;EACA,mBAAA;ChDgiKD;AgD1hKD;EACE,gBAAA;EACA,iBAAA;ChD4hKD;AiDnlKD;EAEE,oBAAA;EACA,gBAAA;CjDolKD;AiD5kKD;EACE,mBAAA;EACA,eAAA;EACA,mBAAA;EAEA,oBAAA;EACA,uBAAA;EACA,uBAAA;CjD6kKD;AiD1kKC;ErB3BA,6BAAA;EACC,4BAAA;C5BwmKF;AiD3kKC;EACE,iBAAA;ErBvBF,gCAAA;EACC,+BAAA;C5BqmKF;AiDpkKD;;EAEE,YAAA;CjDskKD;AiDxkKD;;EAKI,YAAA;CjDukKH;AiDnkKC;;;;EAEE,sBAAA;EACA,YAAA;EACA,0BAAA;CjDukKH;AiDnkKD;EACE,YAAA;EACA,iBAAA;CjDqkKD;AiDhkKC;;;EAGE,0BAAA;EACA,eAAA;EACA,oBAAA;CjDkkKH;AiDvkKC;;;EASI,eAAA;CjDmkKL;AiD5kKC;;;EAYI,eAAA;CjDqkKL;AiDhkKC;;;EAGE,WAAA;EACA,YAAA;EACA,0BAAA;EACA,sBAAA;CjDkkKH;AiDxkKC;;;;;;;;;EAYI,eAAA;CjDukKL;AiDnlKC;;;EAeI,eAAA;CjDykKL;AkD3qKC;EACE,eAAA;EACA,0BAAA;ClD6qKH;AkD3qKG;;EAEE,eAAA;ClD6qKL;AkD/qKG;;EAKI,eAAA;ClD8qKP;AkD3qKK;;;;EAEE,eAAA;EACA,0BAAA;ClD+qKP;AkD7qKK;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;ClDkrKP;AkDxsKC;EACE,eAAA;EACA,0BAAA;ClD0sKH;AkDxsKG;;EAEE,eAAA;ClD0sKL;AkD5sKG;;EAKI,eAAA;ClD2sKP;AkDxsKK;;;;EAEE,eAAA;EACA,0BAAA;ClD4sKP;AkD1sKK;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;ClD+sKP;AkDruKC;EACE,eAAA;EACA,0BAAA;ClDuuKH;AkDruKG;;EAEE,eAAA;ClDuuKL;AkDzuKG;;EAKI,eAAA;ClDwuKP;AkDruKK;;;;EAEE,eAAA;EACA,0BAAA;ClDyuKP;AkDvuKK;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;ClD4uKP;AkDlwKC;EACE,eAAA;EACA,0BAAA;ClDowKH;AkDlwKG;;EAEE,eAAA;ClDowKL;AkDtwKG;;EAKI,eAAA;ClDqwKP;AkDlwKK;;;;EAEE,eAAA;EACA,0BAAA;ClDswKP;AkDpwKK;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;ClDywKP;AiDxqKD;EACE,cAAA;EACA,mBAAA;CjD0qKD;AiDxqKD;EACE,iBAAA;EACA,iBAAA;CjD0qKD;AmDpyKD;EACE,oBAAA;EACA,uBAAA;EACA,8BAAA;EACA,mBAAA;E9C0DA,kDAAA;EACQ,0CAAA;CL6uKT;AmDnyKD;EACE,cAAA;CnDqyKD;AmDhyKD;EACE,mBAAA;EACA,qCAAA;EvBpBA,6BAAA;EACC,4BAAA;C5BuzKF;AmDtyKD;EAMI,eAAA;CnDmyKH;AmD9xKD;EACE,cAAA;EACA,iBAAA;EACA,gBAAA;EACA,eAAA;CnDgyKD;AmDpyKD;;;;;EAWI,eAAA;CnDgyKH;AmD3xKD;EACE,mBAAA;EACA,0BAAA;EACA,2BAAA;EvBxCA,gCAAA;EACC,+BAAA;C5Bs0KF;AmDrxKD;;EAGI,iBAAA;CnDsxKH;AmDzxKD;;EAMM,oBAAA;EACA,iBAAA;CnDuxKL;AmDnxKG;;EAEI,cAAA;EvBvEN,6BAAA;EACC,4BAAA;C5B61KF;AmDjxKG;;EAEI,iBAAA;EvBvEN,gCAAA;EACC,+BAAA;C5B21KF;AmD1yKD;EvB1DE,2BAAA;EACC,0BAAA;C5Bu2KF;AmD7wKD;EAEI,oBAAA;CnD8wKH;AmD3wKD;EACE,oBAAA;CnD6wKD;AmDrwKD;;;EAII,iBAAA;CnDswKH;AmD1wKD;;;EAOM,mBAAA;EACA,oBAAA;CnDwwKL;AmDhxKD;;EvBzGE,6BAAA;EACC,4BAAA;C5B63KF;AmDrxKD;;;;EAmBQ,4BAAA;EACA,6BAAA;CnDwwKP;AmD5xKD;;;;;;;;EAwBU,4BAAA;CnD8wKT;AmDtyKD;;;;;;;;EA4BU,6BAAA;CnDoxKT;AmDhzKD;;EvBjGE,gCAAA;EACC,+BAAA;C5Bq5KF;AmDrzKD;;;;EAyCQ,+BAAA;EACA,gCAAA;CnDkxKP;AmD5zKD;;;;;;;;EA8CU,+BAAA;CnDwxKT;AmDt0KD;;;;;;;;EAkDU,gCAAA;CnD8xKT;AmDh1KD;;;;EA2DI,2BAAA;CnD2xKH;AmDt1KD;;EA+DI,cAAA;CnD2xKH;AmD11KD;;EAmEI,UAAA;CnD2xKH;AmD91KD;;;;;;;;;;;;EA0EU,eAAA;CnDkyKT;AmD52KD;;;;;;;;;;;;EA8EU,gBAAA;CnD4yKT;AmD13KD;;;;;;;;EAuFU,iBAAA;CnD6yKT;AmDp4KD;;;;;;;;EAgGU,iBAAA;CnD8yKT;AmD94KD;EAsGI,UAAA;EACA,iBAAA;CnD2yKH;AmDjyKD;EACE,oBAAA;CnDmyKD;AmDpyKD;EAKI,iBAAA;EACA,mBAAA;CnDkyKH;AmDxyKD;EASM,gBAAA;CnDkyKL;AmD3yKD;EAcI,iBAAA;CnDgyKH;AmD9yKD;;EAkBM,2BAAA;CnDgyKL;AmDlzKD;EAuBI,cAAA;CnD8xKH;AmDrzKD;EAyBM,8BAAA;CnD+xKL;AmDxxKD;EC1PE,mBAAA;CpDqhLD;AoDnhLC;EACE,eAAA;EACA,0BAAA;EACA,mBAAA;CpDqhLH;AoDxhLC;EAMI,uBAAA;CpDqhLL;AoD3hLC;EASI,eAAA;EACA,0BAAA;CpDqhLL;AoDlhLC;EAEI,0BAAA;CpDmhLL;AmDvyKD;EC7PE,sBAAA;CpDuiLD;AoDriLC;EACE,YAAA;EACA,0BAAA;EACA,sBAAA;CpDuiLH;AoD1iLC;EAMI,0BAAA;CpDuiLL;AoD7iLC;EASI,eAAA;EACA,uBAAA;CpDuiLL;AoDpiLC;EAEI,6BAAA;CpDqiLL;AmDtzKD;EChQE,sBAAA;CpDyjLD;AoDvjLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpDyjLH;AoD5jLC;EAMI,0BAAA;CpDyjLL;AoD/jLC;EASI,eAAA;EACA,0BAAA;CpDyjLL;AoDtjLC;EAEI,6BAAA;CpDujLL;AmDr0KD;ECnQE,sBAAA;CpD2kLD;AoDzkLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpD2kLH;AoD9kLC;EAMI,0BAAA;CpD2kLL;AoDjlLC;EASI,eAAA;EACA,0BAAA;CpD2kLL;AoDxkLC;EAEI,6BAAA;CpDykLL;AmDp1KD;ECtQE,sBAAA;CpD6lLD;AoD3lLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpD6lLH;AoDhmLC;EAMI,0BAAA;CpD6lLL;AoDnmLC;EASI,eAAA;EACA,0BAAA;CpD6lLL;AoD1lLC;EAEI,6BAAA;CpD2lLL;AmDn2KD;ECzQE,sBAAA;CpD+mLD;AoD7mLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpD+mLH;AoDlnLC;EAMI,0BAAA;CpD+mLL;AoDrnLC;EASI,eAAA;EACA,0BAAA;CpD+mLL;AoD5mLC;EAEI,6BAAA;CpD6mLL;AqD7nLD;EACE,mBAAA;EACA,eAAA;EACA,UAAA;EACA,WAAA;EACA,iBAAA;CrD+nLD;AqDpoLD;;;;;EAYI,mBAAA;EACA,OAAA;EACA,QAAA;EACA,UAAA;EACA,aAAA;EACA,YAAA;EACA,UAAA;CrD+nLH;AqD1nLD;EACE,uBAAA;CrD4nLD;AqDxnLD;EACE,oBAAA;CrD0nLD;AsDrpLD;EACE,iBAAA;EACA,cAAA;EACA,oBAAA;EACA,0BAAA;EACA,0BAAA;EACA,mBAAA;EjDwDA,wDAAA;EACQ,gDAAA;CLgmLT;AsD/pLD;EASI,mBAAA;EACA,kCAAA;CtDypLH;AsDppLD;EACE,cAAA;EACA,mBAAA;CtDspLD;AsDppLD;EACE,aAAA;EACA,mBAAA;CtDspLD;AuD5qLD;EACE,aAAA;EACA,gBAAA;EACA,kBAAA;EACA,eAAA;EACA,YAAA;EACA,0BAAA;EjCRA,aAAA;EAGA,0BAAA;CtBqrLD;AuD7qLC;;EAEE,YAAA;EACA,sBAAA;EACA,gBAAA;EjCfF,aAAA;EAGA,0BAAA;CtB6rLD;AuDzqLC;EACE,WAAA;EACA,gBAAA;EACA,wBAAA;EACA,UAAA;EACA,yBAAA;CvD2qLH;AwDhsLD;EACE,iBAAA;CxDksLD;AwD9rLD;EACE,cAAA;EACA,iBAAA;EACA,gBAAA;EACA,OAAA;EACA,SAAA;EACA,UAAA;EACA,QAAA;EACA,cAAA;EACA,kCAAA;EAIA,WAAA;CxD6rLD;AwD1rLC;EnD+GA,sCAAA;EACI,kCAAA;EACC,iCAAA;EACG,8BAAA;EAkER,oDAAA;EAEK,0CAAA;EACG,oCAAA;CL6gLT;AwDhsLC;EnD2GA,mCAAA;EACI,+BAAA;EACC,8BAAA;EACG,2BAAA;CLwlLT;AwDpsLD;EACE,mBAAA;EACA,iBAAA;CxDssLD;AwDlsLD;EACE,mBAAA;EACA,YAAA;EACA,aAAA;CxDosLD;AwDhsLD;EACE,mBAAA;EACA,uBAAA;EACA,uBAAA;EACA,qCAAA;EACA,mBAAA;EnDaA,iDAAA;EACQ,yCAAA;EmDZR,qCAAA;UAAA,6BAAA;EAEA,WAAA;CxDksLD;AwD9rLD;EACE,gBAAA;EACA,OAAA;EACA,SAAA;EACA,UAAA;EACA,QAAA;EACA,cAAA;EACA,uBAAA;CxDgsLD;AwD9rLC;ElCrEA,WAAA;EAGA,yBAAA;CtBowLD;AwDjsLC;ElCtEA,aAAA;EAGA,0BAAA;CtBwwLD;AwDhsLD;EACE,cAAA;EACA,iCAAA;CxDksLD;AwD9rLD;EACE,iBAAA;CxDgsLD;AwD5rLD;EACE,UAAA;EACA,wBAAA;CxD8rLD;AwDzrLD;EACE,mBAAA;EACA,cAAA;CxD2rLD;AwDvrLD;EACE,cAAA;EACA,kBAAA;EACA,8BAAA;CxDyrLD;AwD5rLD;EAQI,iBAAA;EACA,iBAAA;CxDurLH;AwDhsLD;EAaI,kBAAA;CxDsrLH;AwDnsLD;EAiBI,eAAA;CxDqrLH;AwDhrLD;EACE,mBAAA;EACA,aAAA;EACA,YAAA;EACA,aAAA;EACA,iBAAA;CxDkrLD;AwDhqLD;EAZE;IACE,aAAA;IACA,kBAAA;GxD+qLD;EwD7qLD;InDvEA,kDAAA;IACQ,0CAAA;GLuvLP;EwD5qLD;IAAY,aAAA;GxD+qLX;CACF;AwD1qLD;EAFE;IAAY,aAAA;GxDgrLX;CACF;AyD/zLD;EACE,mBAAA;EACA,cAAA;EACA,eAAA;ECRA,4DAAA;EAEA,mBAAA;EACA,oBAAA;EACA,uBAAA;EACA,iBAAA;EACA,wBAAA;EACA,iBAAA;EACA,kBAAA;EACA,sBAAA;EACA,kBAAA;EACA,qBAAA;EACA,oBAAA;EACA,mBAAA;EACA,qBAAA;EACA,kBAAA;EDHA,gBAAA;EnCVA,WAAA;EAGA,yBAAA;CtBs1LD;AyD30LC;EnCdA,aAAA;EAGA,0BAAA;CtB01LD;AyD90LC;EAAW,iBAAA;EAAmB,eAAA;CzDk1L/B;AyDj1LC;EAAW,iBAAA;EAAmB,eAAA;CzDq1L/B;AyDp1LC;EAAW,gBAAA;EAAmB,eAAA;CzDw1L/B;AyDv1LC;EAAW,kBAAA;EAAmB,eAAA;CzD21L/B;AyDv1LD;EACE,iBAAA;EACA,iBAAA;EACA,YAAA;EACA,mBAAA;EACA,uBAAA;EACA,mBAAA;CzDy1LD;AyDr1LD;EACE,mBAAA;EACA,SAAA;EACA,UAAA;EACA,0BAAA;EACA,oBAAA;CzDu1LD;AyDn1LC;EACE,UAAA;EACA,UAAA;EACA,kBAAA;EACA,wBAAA;EACA,uBAAA;CzDq1LH;AyDn1LC;EACE,UAAA;EACA,WAAA;EACA,oBAAA;EACA,wBAAA;EACA,uBAAA;CzDq1LH;AyDn1LC;EACE,UAAA;EACA,UAAA;EACA,oBAAA;EACA,wBAAA;EACA,uBAAA;CzDq1LH;AyDn1LC;EACE,SAAA;EACA,QAAA;EACA,iBAAA;EACA,4BAAA;EACA,yBAAA;CzDq1LH;AyDn1LC;EACE,SAAA;EACA,SAAA;EACA,iBAAA;EACA,4BAAA;EACA,wBAAA;CzDq1LH;AyDn1LC;EACE,OAAA;EACA,UAAA;EACA,kBAAA;EACA,wBAAA;EACA,0BAAA;CzDq1LH;AyDn1LC;EACE,OAAA;EACA,WAAA;EACA,iBAAA;EACA,wBAAA;EACA,0BAAA;CzDq1LH;AyDn1LC;EACE,OAAA;EACA,UAAA;EACA,iBAAA;EACA,wBAAA;EACA,0BAAA;CzDq1LH;A2Dl7LD;EACE,mBAAA;EACA,OAAA;EACA,QAAA;EACA,cAAA;EACA,cAAA;EACA,iBAAA;EACA,aAAA;EDXA,4DAAA;EAEA,mBAAA;EACA,oBAAA;EACA,uBAAA;EACA,iBAAA;EACA,wBAAA;EACA,iBAAA;EACA,kBAAA;EACA,sBAAA;EACA,kBAAA;EACA,qBAAA;EACA,oBAAA;EACA,mBAAA;EACA,qBAAA;EACA,kBAAA;ECAA,gBAAA;EAEA,uBAAA;EACA,qCAAA;UAAA,6BAAA;EACA,uBAAA;EACA,qCAAA;EACA,mBAAA;EtD8CA,kDAAA;EACQ,0CAAA;CLk5LT;A2D77LC;EAAY,kBAAA;C3Dg8Lb;A2D/7LC;EAAY,kBAAA;C3Dk8Lb;A2Dj8LC;EAAY,iBAAA;C3Do8Lb;A2Dn8LC;EAAY,mBAAA;C3Ds8Lb;A2Dn8LD;EACE,UAAA;EACA,kBAAA;EACA,gBAAA;EACA,0BAAA;EACA,iCAAA;EACA,2BAAA;C3Dq8LD;A2Dl8LD;EACE,kBAAA;C3Do8LD;A2D57LC;;EAEE,mBAAA;EACA,eAAA;EACA,SAAA;EACA,UAAA;EACA,0BAAA;EACA,oBAAA;C3D87LH;A2D37LD;EACE,mBAAA;C3D67LD;A2D37LD;EACE,mBAAA;EACA,YAAA;C3D67LD;A2Dz7LC;EACE,UAAA;EACA,mBAAA;EACA,uBAAA;EACA,0BAAA;EACA,sCAAA;EACA,cAAA;C3D27LH;A2D17LG;EACE,aAAA;EACA,YAAA;EACA,mBAAA;EACA,uBAAA;EACA,uBAAA;C3D47LL;A2Dz7LC;EACE,SAAA;EACA,YAAA;EACA,kBAAA;EACA,qBAAA;EACA,4BAAA;EACA,wCAAA;C3D27LH;A2D17LG;EACE,aAAA;EACA,UAAA;EACA,cAAA;EACA,qBAAA;EACA,yBAAA;C3D47LL;A2Dz7LC;EACE,UAAA;EACA,mBAAA;EACA,oBAAA;EACA,6BAAA;EACA,yCAAA;EACA,WAAA;C3D27LH;A2D17LG;EACE,aAAA;EACA,SAAA;EACA,mBAAA;EACA,oBAAA;EACA,0BAAA;C3D47LL;A2Dx7LC;EACE,SAAA;EACA,aAAA;EACA,kBAAA;EACA,sBAAA;EACA,2BAAA;EACA,uCAAA;C3D07LH;A2Dz7LG;EACE,aAAA;EACA,WAAA;EACA,sBAAA;EACA,wBAAA;EACA,cAAA;C3D27LL;A4DpjMD;EACE,mBAAA;C5DsjMD;A4DnjMD;EACE,mBAAA;EACA,iBAAA;EACA,YAAA;C5DqjMD;A4DxjMD;EAMI,cAAA;EACA,mBAAA;EvD6KF,0CAAA;EACK,qCAAA;EACG,kCAAA;CLy4LT;A4D/jMD;;EAcM,eAAA;C5DqjML;A4D3hMC;EA4NF;IvD3DE,uDAAA;IAEK,6CAAA;IACG,uCAAA;IA7JR,oCAAA;IAEQ,4BAAA;IA+GR,4BAAA;IAEQ,oBAAA;GL86LP;E4DzjMG;;IvDmHJ,2CAAA;IACQ,mCAAA;IuDjHF,QAAA;G5D4jML;E4D1jMG;;IvD8GJ,4CAAA;IACQ,oCAAA;IuD5GF,QAAA;G5D6jML;E4D3jMG;;;IvDyGJ,wCAAA;IACQ,gCAAA;IuDtGF,QAAA;G5D8jML;CACF;A4DpmMD;;;EA6CI,eAAA;C5D4jMH;A4DzmMD;EAiDI,QAAA;C5D2jMH;A4D5mMD;;EAsDI,mBAAA;EACA,OAAA;EACA,YAAA;C5D0jMH;A4DlnMD;EA4DI,WAAA;C5DyjMH;A4DrnMD;EA+DI,YAAA;C5DyjMH;A4DxnMD;;EAmEI,QAAA;C5DyjMH;A4D5nMD;EAuEI,YAAA;C5DwjMH;A4D/nMD;EA0EI,WAAA;C5DwjMH;A4DhjMD;EACE,mBAAA;EACA,OAAA;EACA,QAAA;EACA,UAAA;EACA,WAAA;EtC9FA,aAAA;EAGA,0BAAA;EsC6FA,gBAAA;EACA,YAAA;EACA,mBAAA;EACA,0CAAA;EACA,mCAAA;C5DmjMD;A4D9iMC;EdnGE,mGAAA;EACA,8FAAA;EACA,qHAAA;EAAA,+FAAA;EACA,4BAAA;EACA,uHAAA;C9CopMH;A4DljMC;EACE,WAAA;EACA,SAAA;EdxGA,mGAAA;EACA,8FAAA;EACA,qHAAA;EAAA,+FAAA;EACA,4BAAA;EACA,uHAAA;C9C6pMH;A4DpjMC;;EAEE,WAAA;EACA,YAAA;EACA,sBAAA;EtCvHF,aAAA;EAGA,0BAAA;CtB4qMD;A4DtlMD;;;;EAuCI,mBAAA;EACA,SAAA;EACA,kBAAA;EACA,WAAA;EACA,sBAAA;C5DqjMH;A4DhmMD;;EA+CI,UAAA;EACA,mBAAA;C5DqjMH;A4DrmMD;;EAoDI,WAAA;EACA,oBAAA;C5DqjMH;A4D1mMD;;EAyDI,YAAA;EACA,aAAA;EACA,eAAA;EACA,mBAAA;C5DqjMH;A4DhjMG;EACE,iBAAA;C5DkjML;A4D9iMG;EACE,iBAAA;C5DgjML;A4DtiMD;EACE,mBAAA;EACA,aAAA;EACA,UAAA;EACA,YAAA;EACA,WAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;C5DwiMD;A4DjjMD;EAYI,sBAAA;EACA,YAAA;EACA,aAAA;EACA,YAAA;EACA,oBAAA;EACA,uBAAA;EACA,oBAAA;EACA,gBAAA;EAWA,0BAAA;EACA,mCAAA;C5D8hMH;A4D7jMD;EAkCI,UAAA;EACA,YAAA;EACA,aAAA;EACA,uBAAA;C5D8hMH;A4DvhMD;EACE,mBAAA;EACA,UAAA;EACA,WAAA;EACA,aAAA;EACA,YAAA;EACA,kBAAA;EACA,qBAAA;EACA,YAAA;EACA,mBAAA;EACA,0CAAA;C5DyhMD;A4DxhMC;EACE,kBAAA;C5D0hMH;A4Dj/LD;EAhCE;;;;IAKI,YAAA;IACA,aAAA;IACA,kBAAA;IACA,gBAAA;G5DmhMH;E4D3hMD;;IAYI,mBAAA;G5DmhMH;E4D/hMD;;IAgBI,oBAAA;G5DmhMH;E4D9gMD;IACE,UAAA;IACA,WAAA;IACA,qBAAA;G5DghMD;E4D5gMD;IACE,aAAA;G5D8gMD;CACF;A6D7wMC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEE,aAAA;EACA,eAAA;C7D6yMH;A6D3yMC;;;;;;;;;;;;;;;;EACE,YAAA;C7D4zMH;AiCp0MD;E6BRE,eAAA;EACA,kBAAA;EACA,mBAAA;C9D+0MD;AiCt0MD;EACE,wBAAA;CjCw0MD;AiCt0MD;EACE,uBAAA;CjCw0MD;AiCh0MD;EACE,yBAAA;CjCk0MD;AiCh0MD;EACE,0BAAA;CjCk0MD;AiCh0MD;EACE,mBAAA;CjCk0MD;AiCh0MD;E8BzBE,YAAA;EACA,mBAAA;EACA,kBAAA;EACA,8BAAA;EACA,UAAA;C/D41MD;AiC9zMD;EACE,yBAAA;CjCg0MD;AiCzzMD;EACE,gBAAA;CjC2zMD;AgE51MD;EACE,oBAAA;ChE81MD;AgEx1MD;;;;ECdE,yBAAA;CjE42MD;AgEv1MD;;;;;;;;;;;;EAYE,yBAAA;ChEy1MD;AgEl1MD;EA6IA;IC7LE,0BAAA;GjEs4MC;EiEr4MD;IAAU,0BAAA;GjEw4MT;EiEv4MD;IAAU,8BAAA;GjE04MT;EiEz4MD;;IACU,+BAAA;GjE44MT;CACF;AgE51MD;EAwIA;IA1II,0BAAA;GhEk2MD;CACF;AgE51MD;EAmIA;IArII,2BAAA;GhEk2MD;CACF;AgE51MD;EA8HA;IAhII,iCAAA;GhEk2MD;CACF;AgE31MD;EAwHA;IC7LE,0BAAA;GjEo6MC;EiEn6MD;IAAU,0BAAA;GjEs6MT;EiEr6MD;IAAU,8BAAA;GjEw6MT;EiEv6MD;;IACU,+BAAA;GjE06MT;CACF;AgEr2MD;EAmHA;IArHI,0BAAA;GhE22MD;CACF;AgEr2MD;EA8GA;IAhHI,2BAAA;GhE22MD;CACF;AgEr2MD;EAyGA;IA3GI,iCAAA;GhE22MD;CACF;AgEp2MD;EAmGA;IC7LE,0BAAA;GjEk8MC;EiEj8MD;IAAU,0BAAA;GjEo8MT;EiEn8MD;IAAU,8BAAA;GjEs8MT;EiEr8MD;;IACU,+BAAA;GjEw8MT;CACF;AgE92MD;EA8FA;IAhGI,0BAAA;GhEo3MD;CACF;AgE92MD;EAyFA;IA3FI,2BAAA;GhEo3MD;CACF;AgE92MD;EAoFA;IAtFI,iCAAA;GhEo3MD;CACF;AgE72MD;EA8EA;IC7LE,0BAAA;GjEg+MC;EiE/9MD;IAAU,0BAAA;GjEk+MT;EiEj+MD;IAAU,8BAAA;GjEo+MT;EiEn+MD;;IACU,+BAAA;GjEs+MT;CACF;AgEv3MD;EAyEA;IA3EI,0BAAA;GhE63MD;CACF;AgEv3MD;EAoEA;IAtEI,2BAAA;GhE63MD;CACF;AgEv3MD;EA+DA;IAjEI,iCAAA;GhE63MD;CACF;AgEt3MD;EAyDA;ICrLE,yBAAA;GjEs/MC;CACF;AgEt3MD;EAoDA;ICrLE,yBAAA;GjE2/MC;CACF;AgEt3MD;EA+CA;ICrLE,yBAAA;GjEggNC;CACF;AgEt3MD;EA0CA;ICrLE,yBAAA;GjEqgNC;CACF;AgEn3MD;ECnJE,yBAAA;CjEygND;AgEh3MD;EA4BA;IC7LE,0BAAA;GjEqhNC;EiEphND;IAAU,0BAAA;GjEuhNT;EiEthND;IAAU,8BAAA;GjEyhNT;EiExhND;;IACU,+BAAA;GjE2hNT;CACF;AgE93MD;EACE,yBAAA;ChEg4MD;AgE33MD;EAqBA;IAvBI,0BAAA;GhEi4MD;CACF;AgE/3MD;EACE,yBAAA;ChEi4MD;AgE53MD;EAcA;IAhBI,2BAAA;GhEk4MD;CACF;AgEh4MD;EACE,yBAAA;ChEk4MD;AgE73MD;EAOA;IATI,iCAAA;GhEm4MD;CACF;AgE53MD;EACA;ICrLE,yBAAA;GjEojNC;CACF","file":"bootstrap.css","sourcesContent":["/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n font-family: sans-serif;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n}\nbody {\n margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block;\n vertical-align: baseline;\n}\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n[hidden],\ntemplate {\n display: none;\n}\na {\n background-color: transparent;\n}\na:active,\na:hover {\n outline: 0;\n}\nabbr[title] {\n border-bottom: 1px dotted;\n}\nb,\nstrong {\n font-weight: bold;\n}\ndfn {\n font-style: italic;\n}\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\nmark {\n background: #ff0;\n color: #000;\n}\nsmall {\n font-size: 80%;\n}\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\nsup {\n top: -0.5em;\n}\nsub {\n bottom: -0.25em;\n}\nimg {\n border: 0;\n}\nsvg:not(:root) {\n overflow: hidden;\n}\nfigure {\n margin: 1em 40px;\n}\nhr {\n box-sizing: content-box;\n height: 0;\n}\npre {\n overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit;\n font: inherit;\n margin: 0;\n}\nbutton {\n overflow: visible;\n}\nbutton,\nselect {\n text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button;\n cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\ninput {\n line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box;\n padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: textfield;\n box-sizing: content-box;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\nlegend {\n border: 0;\n padding: 0;\n}\ntextarea {\n overflow: auto;\n}\noptgroup {\n font-weight: bold;\n}\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\ntd,\nth {\n padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important;\n box-shadow: none !important;\n text-shadow: none !important;\n }\n a,\n a:visited {\n text-decoration: underline;\n }\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n img {\n max-width: 100% !important;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n .navbar {\n display: none;\n }\n .btn > .caret,\n .dropup > .btn > .caret {\n border-top-color: #000 !important;\n }\n .label {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #ddd !important;\n }\n}\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('../fonts/glyphicons-halflings-regular.eot');\n src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n content: \"\\002a\";\n}\n.glyphicon-plus:before {\n content: \"\\002b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n content: \"\\270f\";\n}\n.glyphicon-glass:before {\n content: \"\\e001\";\n}\n.glyphicon-music:before {\n content: \"\\e002\";\n}\n.glyphicon-search:before {\n content: \"\\e003\";\n}\n.glyphicon-heart:before {\n content: \"\\e005\";\n}\n.glyphicon-star:before {\n content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n content: \"\\e007\";\n}\n.glyphicon-user:before {\n content: \"\\e008\";\n}\n.glyphicon-film:before {\n content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n content: \"\\e010\";\n}\n.glyphicon-th:before {\n content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n content: \"\\e012\";\n}\n.glyphicon-ok:before {\n content: \"\\e013\";\n}\n.glyphicon-remove:before {\n content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n content: \"\\e016\";\n}\n.glyphicon-off:before {\n content: \"\\e017\";\n}\n.glyphicon-signal:before {\n content: \"\\e018\";\n}\n.glyphicon-cog:before {\n content: \"\\e019\";\n}\n.glyphicon-trash:before {\n content: \"\\e020\";\n}\n.glyphicon-home:before {\n content: \"\\e021\";\n}\n.glyphicon-file:before {\n content: \"\\e022\";\n}\n.glyphicon-time:before {\n content: \"\\e023\";\n}\n.glyphicon-road:before {\n content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n content: \"\\e025\";\n}\n.glyphicon-download:before {\n content: \"\\e026\";\n}\n.glyphicon-upload:before {\n content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n content: \"\\e032\";\n}\n.glyphicon-lock:before {\n content: \"\\e033\";\n}\n.glyphicon-flag:before {\n content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n content: \"\\e040\";\n}\n.glyphicon-tag:before {\n content: \"\\e041\";\n}\n.glyphicon-tags:before {\n content: \"\\e042\";\n}\n.glyphicon-book:before {\n content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n content: \"\\e044\";\n}\n.glyphicon-print:before {\n content: \"\\e045\";\n}\n.glyphicon-camera:before {\n content: \"\\e046\";\n}\n.glyphicon-font:before {\n content: \"\\e047\";\n}\n.glyphicon-bold:before {\n content: \"\\e048\";\n}\n.glyphicon-italic:before {\n content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n content: \"\\e055\";\n}\n.glyphicon-list:before {\n content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n content: \"\\e059\";\n}\n.glyphicon-picture:before {\n content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n content: \"\\e063\";\n}\n.glyphicon-tint:before {\n content: \"\\e064\";\n}\n.glyphicon-edit:before {\n content: \"\\e065\";\n}\n.glyphicon-share:before {\n content: \"\\e066\";\n}\n.glyphicon-check:before {\n content: \"\\e067\";\n}\n.glyphicon-move:before {\n content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n content: \"\\e070\";\n}\n.glyphicon-backward:before {\n content: \"\\e071\";\n}\n.glyphicon-play:before {\n content: \"\\e072\";\n}\n.glyphicon-pause:before {\n content: \"\\e073\";\n}\n.glyphicon-stop:before {\n content: \"\\e074\";\n}\n.glyphicon-forward:before {\n content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n content: \"\\e077\";\n}\n.glyphicon-eject:before {\n content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n content: \"\\e101\";\n}\n.glyphicon-gift:before {\n content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n content: \"\\e103\";\n}\n.glyphicon-fire:before {\n content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n content: \"\\e107\";\n}\n.glyphicon-plane:before {\n content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n content: \"\\e109\";\n}\n.glyphicon-random:before {\n content: \"\\e110\";\n}\n.glyphicon-comment:before {\n content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n content: \"\\e122\";\n}\n.glyphicon-bell:before {\n content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n content: \"\\e134\";\n}\n.glyphicon-globe:before {\n content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n content: \"\\e137\";\n}\n.glyphicon-filter:before {\n content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n content: \"\\e143\";\n}\n.glyphicon-link:before {\n content: \"\\e144\";\n}\n.glyphicon-phone:before {\n content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n content: \"\\e146\";\n}\n.glyphicon-usd:before {\n content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n content: \"\\e149\";\n}\n.glyphicon-sort:before {\n content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n content: \"\\e157\";\n}\n.glyphicon-expand:before {\n content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n content: \"\\e161\";\n}\n.glyphicon-flash:before {\n content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n content: \"\\e164\";\n}\n.glyphicon-record:before {\n content: \"\\e165\";\n}\n.glyphicon-save:before {\n content: \"\\e166\";\n}\n.glyphicon-open:before {\n content: \"\\e167\";\n}\n.glyphicon-saved:before {\n content: \"\\e168\";\n}\n.glyphicon-import:before {\n content: \"\\e169\";\n}\n.glyphicon-export:before {\n content: \"\\e170\";\n}\n.glyphicon-send:before {\n content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n content: \"\\e179\";\n}\n.glyphicon-header:before {\n content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n content: \"\\e183\";\n}\n.glyphicon-tower:before {\n content: \"\\e184\";\n}\n.glyphicon-stats:before {\n content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n content: \"\\e200\";\n}\n.glyphicon-cd:before {\n content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n content: \"\\e204\";\n}\n.glyphicon-copy:before {\n content: \"\\e205\";\n}\n.glyphicon-paste:before {\n content: \"\\e206\";\n}\n.glyphicon-alert:before {\n content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n content: \"\\e210\";\n}\n.glyphicon-king:before {\n content: \"\\e211\";\n}\n.glyphicon-queen:before {\n content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n content: \"\\e214\";\n}\n.glyphicon-knight:before {\n content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n content: \"\\e216\";\n}\n.glyphicon-tent:before {\n content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n content: \"\\e218\";\n}\n.glyphicon-bed:before {\n content: \"\\e219\";\n}\n.glyphicon-apple:before {\n content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n content: \"\\e227\";\n}\n.glyphicon-btc:before {\n content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n content: \"\\e227\";\n}\n.glyphicon-yen:before {\n content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n content: \"\\e232\";\n}\n.glyphicon-education:before {\n content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n content: \"\\e237\";\n}\n.glyphicon-oil:before {\n content: \"\\e238\";\n}\n.glyphicon-grain:before {\n content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n content: \"\\e253\";\n}\n.glyphicon-console:before {\n content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n content: \"\\e260\";\n}\n* {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n*:before,\n*:after {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n line-height: 1.42857143;\n color: #333333;\n background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\na {\n color: #337ab7;\n text-decoration: none;\n}\na:hover,\na:focus {\n color: #23527c;\n text-decoration: underline;\n}\na:focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\nfigure {\n margin: 0;\n}\nimg {\n vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n display: block;\n max-width: 100%;\n height: auto;\n}\n.img-rounded {\n border-radius: 6px;\n}\n.img-thumbnail {\n padding: 4px;\n line-height: 1.42857143;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n -webkit-transition: all 0.2s ease-in-out;\n -o-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n display: inline-block;\n max-width: 100%;\n height: auto;\n}\n.img-circle {\n border-radius: 50%;\n}\nhr {\n margin-top: 20px;\n margin-bottom: 20px;\n border: 0;\n border-top: 1px solid #eeeeee;\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n}\n[role=\"button\"] {\n cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n font-family: inherit;\n font-weight: 500;\n line-height: 1.1;\n color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n font-weight: normal;\n line-height: 1;\n color: #777777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n margin-top: 20px;\n margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n margin-top: 10px;\n margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n font-size: 75%;\n}\nh1,\n.h1 {\n font-size: 36px;\n}\nh2,\n.h2 {\n font-size: 30px;\n}\nh3,\n.h3 {\n font-size: 24px;\n}\nh4,\n.h4 {\n font-size: 18px;\n}\nh5,\n.h5 {\n font-size: 14px;\n}\nh6,\n.h6 {\n font-size: 12px;\n}\np {\n margin: 0 0 10px;\n}\n.lead {\n margin-bottom: 20px;\n font-size: 16px;\n font-weight: 300;\n line-height: 1.4;\n}\n@media (min-width: 768px) {\n .lead {\n font-size: 21px;\n }\n}\nsmall,\n.small {\n font-size: 85%;\n}\nmark,\n.mark {\n background-color: #fcf8e3;\n padding: .2em;\n}\n.text-left {\n text-align: left;\n}\n.text-right {\n text-align: right;\n}\n.text-center {\n text-align: center;\n}\n.text-justify {\n text-align: justify;\n}\n.text-nowrap {\n white-space: nowrap;\n}\n.text-lowercase {\n text-transform: lowercase;\n}\n.text-uppercase {\n text-transform: uppercase;\n}\n.text-capitalize {\n text-transform: capitalize;\n}\n.text-muted {\n color: #777777;\n}\n.text-primary {\n color: #337ab7;\n}\na.text-primary:hover,\na.text-primary:focus {\n color: #286090;\n}\n.text-success {\n color: #3c763d;\n}\na.text-success:hover,\na.text-success:focus {\n color: #2b542c;\n}\n.text-info {\n color: #31708f;\n}\na.text-info:hover,\na.text-info:focus {\n color: #245269;\n}\n.text-warning {\n color: #8a6d3b;\n}\na.text-warning:hover,\na.text-warning:focus {\n color: #66512c;\n}\n.text-danger {\n color: #a94442;\n}\na.text-danger:hover,\na.text-danger:focus {\n color: #843534;\n}\n.bg-primary {\n color: #fff;\n background-color: #337ab7;\n}\na.bg-primary:hover,\na.bg-primary:focus {\n background-color: #286090;\n}\n.bg-success {\n background-color: #dff0d8;\n}\na.bg-success:hover,\na.bg-success:focus {\n background-color: #c1e2b3;\n}\n.bg-info {\n background-color: #d9edf7;\n}\na.bg-info:hover,\na.bg-info:focus {\n background-color: #afd9ee;\n}\n.bg-warning {\n background-color: #fcf8e3;\n}\na.bg-warning:hover,\na.bg-warning:focus {\n background-color: #f7ecb5;\n}\n.bg-danger {\n background-color: #f2dede;\n}\na.bg-danger:hover,\na.bg-danger:focus {\n background-color: #e4b9b9;\n}\n.page-header {\n padding-bottom: 9px;\n margin: 40px 0 20px;\n border-bottom: 1px solid #eeeeee;\n}\nul,\nol {\n margin-top: 0;\n margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n margin-bottom: 0;\n}\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n.list-inline {\n padding-left: 0;\n list-style: none;\n margin-left: -5px;\n}\n.list-inline > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n}\ndl {\n margin-top: 0;\n margin-bottom: 20px;\n}\ndt,\ndd {\n line-height: 1.42857143;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0;\n}\n@media (min-width: 768px) {\n .dl-horizontal dt {\n float: left;\n width: 160px;\n clear: left;\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .dl-horizontal dd {\n margin-left: 180px;\n }\n}\nabbr[title],\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted #777777;\n}\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\nblockquote {\n padding: 10px 20px;\n margin: 0 0 20px;\n font-size: 17.5px;\n border-left: 5px solid #eeeeee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n display: block;\n font-size: 80%;\n line-height: 1.42857143;\n color: #777777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid #eeeeee;\n border-left: 0;\n text-align: right;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n content: '\\00A0 \\2014';\n}\naddress {\n margin-bottom: 20px;\n font-style: normal;\n line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: #c7254e;\n background-color: #f9f2f4;\n border-radius: 4px;\n}\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: #fff;\n background-color: #333;\n border-radius: 3px;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n}\npre {\n display: block;\n padding: 9.5px;\n margin: 0 0 10px;\n font-size: 13px;\n line-height: 1.42857143;\n word-break: break-all;\n word-wrap: break-word;\n color: #333333;\n background-color: #f5f5f5;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\npre code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n}\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n.container {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n@media (min-width: 768px) {\n .container {\n width: 750px;\n }\n}\n@media (min-width: 992px) {\n .container {\n width: 970px;\n }\n}\n@media (min-width: 1200px) {\n .container {\n width: 1170px;\n }\n}\n.container-fluid {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n.row {\n margin-left: -15px;\n margin-right: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n position: relative;\n min-height: 1px;\n padding-left: 15px;\n padding-right: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n float: left;\n}\n.col-xs-12 {\n width: 100%;\n}\n.col-xs-11 {\n width: 91.66666667%;\n}\n.col-xs-10 {\n width: 83.33333333%;\n}\n.col-xs-9 {\n width: 75%;\n}\n.col-xs-8 {\n width: 66.66666667%;\n}\n.col-xs-7 {\n width: 58.33333333%;\n}\n.col-xs-6 {\n width: 50%;\n}\n.col-xs-5 {\n width: 41.66666667%;\n}\n.col-xs-4 {\n width: 33.33333333%;\n}\n.col-xs-3 {\n width: 25%;\n}\n.col-xs-2 {\n width: 16.66666667%;\n}\n.col-xs-1 {\n width: 8.33333333%;\n}\n.col-xs-pull-12 {\n right: 100%;\n}\n.col-xs-pull-11 {\n right: 91.66666667%;\n}\n.col-xs-pull-10 {\n right: 83.33333333%;\n}\n.col-xs-pull-9 {\n right: 75%;\n}\n.col-xs-pull-8 {\n right: 66.66666667%;\n}\n.col-xs-pull-7 {\n right: 58.33333333%;\n}\n.col-xs-pull-6 {\n right: 50%;\n}\n.col-xs-pull-5 {\n right: 41.66666667%;\n}\n.col-xs-pull-4 {\n right: 33.33333333%;\n}\n.col-xs-pull-3 {\n right: 25%;\n}\n.col-xs-pull-2 {\n right: 16.66666667%;\n}\n.col-xs-pull-1 {\n right: 8.33333333%;\n}\n.col-xs-pull-0 {\n right: auto;\n}\n.col-xs-push-12 {\n left: 100%;\n}\n.col-xs-push-11 {\n left: 91.66666667%;\n}\n.col-xs-push-10 {\n left: 83.33333333%;\n}\n.col-xs-push-9 {\n left: 75%;\n}\n.col-xs-push-8 {\n left: 66.66666667%;\n}\n.col-xs-push-7 {\n left: 58.33333333%;\n}\n.col-xs-push-6 {\n left: 50%;\n}\n.col-xs-push-5 {\n left: 41.66666667%;\n}\n.col-xs-push-4 {\n left: 33.33333333%;\n}\n.col-xs-push-3 {\n left: 25%;\n}\n.col-xs-push-2 {\n left: 16.66666667%;\n}\n.col-xs-push-1 {\n left: 8.33333333%;\n}\n.col-xs-push-0 {\n left: auto;\n}\n.col-xs-offset-12 {\n margin-left: 100%;\n}\n.col-xs-offset-11 {\n margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n margin-left: 75%;\n}\n.col-xs-offset-8 {\n margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n margin-left: 50%;\n}\n.col-xs-offset-5 {\n margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n margin-left: 25%;\n}\n.col-xs-offset-2 {\n margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n margin-left: 0%;\n}\n@media (min-width: 768px) {\n .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n float: left;\n }\n .col-sm-12 {\n width: 100%;\n }\n .col-sm-11 {\n width: 91.66666667%;\n }\n .col-sm-10 {\n width: 83.33333333%;\n }\n .col-sm-9 {\n width: 75%;\n }\n .col-sm-8 {\n width: 66.66666667%;\n }\n .col-sm-7 {\n width: 58.33333333%;\n }\n .col-sm-6 {\n width: 50%;\n }\n .col-sm-5 {\n width: 41.66666667%;\n }\n .col-sm-4 {\n width: 33.33333333%;\n }\n .col-sm-3 {\n width: 25%;\n }\n .col-sm-2 {\n width: 16.66666667%;\n }\n .col-sm-1 {\n width: 8.33333333%;\n }\n .col-sm-pull-12 {\n right: 100%;\n }\n .col-sm-pull-11 {\n right: 91.66666667%;\n }\n .col-sm-pull-10 {\n right: 83.33333333%;\n }\n .col-sm-pull-9 {\n right: 75%;\n }\n .col-sm-pull-8 {\n right: 66.66666667%;\n }\n .col-sm-pull-7 {\n right: 58.33333333%;\n }\n .col-sm-pull-6 {\n right: 50%;\n }\n .col-sm-pull-5 {\n right: 41.66666667%;\n }\n .col-sm-pull-4 {\n right: 33.33333333%;\n }\n .col-sm-pull-3 {\n right: 25%;\n }\n .col-sm-pull-2 {\n right: 16.66666667%;\n }\n .col-sm-pull-1 {\n right: 8.33333333%;\n }\n .col-sm-pull-0 {\n right: auto;\n }\n .col-sm-push-12 {\n left: 100%;\n }\n .col-sm-push-11 {\n left: 91.66666667%;\n }\n .col-sm-push-10 {\n left: 83.33333333%;\n }\n .col-sm-push-9 {\n left: 75%;\n }\n .col-sm-push-8 {\n left: 66.66666667%;\n }\n .col-sm-push-7 {\n left: 58.33333333%;\n }\n .col-sm-push-6 {\n left: 50%;\n }\n .col-sm-push-5 {\n left: 41.66666667%;\n }\n .col-sm-push-4 {\n left: 33.33333333%;\n }\n .col-sm-push-3 {\n left: 25%;\n }\n .col-sm-push-2 {\n left: 16.66666667%;\n }\n .col-sm-push-1 {\n left: 8.33333333%;\n }\n .col-sm-push-0 {\n left: auto;\n }\n .col-sm-offset-12 {\n margin-left: 100%;\n }\n .col-sm-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-sm-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-sm-offset-9 {\n margin-left: 75%;\n }\n .col-sm-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-sm-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-sm-offset-6 {\n margin-left: 50%;\n }\n .col-sm-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-sm-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-sm-offset-3 {\n margin-left: 25%;\n }\n .col-sm-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-sm-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-sm-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 992px) {\n .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n float: left;\n }\n .col-md-12 {\n width: 100%;\n }\n .col-md-11 {\n width: 91.66666667%;\n }\n .col-md-10 {\n width: 83.33333333%;\n }\n .col-md-9 {\n width: 75%;\n }\n .col-md-8 {\n width: 66.66666667%;\n }\n .col-md-7 {\n width: 58.33333333%;\n }\n .col-md-6 {\n width: 50%;\n }\n .col-md-5 {\n width: 41.66666667%;\n }\n .col-md-4 {\n width: 33.33333333%;\n }\n .col-md-3 {\n width: 25%;\n }\n .col-md-2 {\n width: 16.66666667%;\n }\n .col-md-1 {\n width: 8.33333333%;\n }\n .col-md-pull-12 {\n right: 100%;\n }\n .col-md-pull-11 {\n right: 91.66666667%;\n }\n .col-md-pull-10 {\n right: 83.33333333%;\n }\n .col-md-pull-9 {\n right: 75%;\n }\n .col-md-pull-8 {\n right: 66.66666667%;\n }\n .col-md-pull-7 {\n right: 58.33333333%;\n }\n .col-md-pull-6 {\n right: 50%;\n }\n .col-md-pull-5 {\n right: 41.66666667%;\n }\n .col-md-pull-4 {\n right: 33.33333333%;\n }\n .col-md-pull-3 {\n right: 25%;\n }\n .col-md-pull-2 {\n right: 16.66666667%;\n }\n .col-md-pull-1 {\n right: 8.33333333%;\n }\n .col-md-pull-0 {\n right: auto;\n }\n .col-md-push-12 {\n left: 100%;\n }\n .col-md-push-11 {\n left: 91.66666667%;\n }\n .col-md-push-10 {\n left: 83.33333333%;\n }\n .col-md-push-9 {\n left: 75%;\n }\n .col-md-push-8 {\n left: 66.66666667%;\n }\n .col-md-push-7 {\n left: 58.33333333%;\n }\n .col-md-push-6 {\n left: 50%;\n }\n .col-md-push-5 {\n left: 41.66666667%;\n }\n .col-md-push-4 {\n left: 33.33333333%;\n }\n .col-md-push-3 {\n left: 25%;\n }\n .col-md-push-2 {\n left: 16.66666667%;\n }\n .col-md-push-1 {\n left: 8.33333333%;\n }\n .col-md-push-0 {\n left: auto;\n }\n .col-md-offset-12 {\n margin-left: 100%;\n }\n .col-md-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-md-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-md-offset-9 {\n margin-left: 75%;\n }\n .col-md-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-md-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-md-offset-6 {\n margin-left: 50%;\n }\n .col-md-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-md-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-md-offset-3 {\n margin-left: 25%;\n }\n .col-md-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-md-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-md-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 1200px) {\n .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n float: left;\n }\n .col-lg-12 {\n width: 100%;\n }\n .col-lg-11 {\n width: 91.66666667%;\n }\n .col-lg-10 {\n width: 83.33333333%;\n }\n .col-lg-9 {\n width: 75%;\n }\n .col-lg-8 {\n width: 66.66666667%;\n }\n .col-lg-7 {\n width: 58.33333333%;\n }\n .col-lg-6 {\n width: 50%;\n }\n .col-lg-5 {\n width: 41.66666667%;\n }\n .col-lg-4 {\n width: 33.33333333%;\n }\n .col-lg-3 {\n width: 25%;\n }\n .col-lg-2 {\n width: 16.66666667%;\n }\n .col-lg-1 {\n width: 8.33333333%;\n }\n .col-lg-pull-12 {\n right: 100%;\n }\n .col-lg-pull-11 {\n right: 91.66666667%;\n }\n .col-lg-pull-10 {\n right: 83.33333333%;\n }\n .col-lg-pull-9 {\n right: 75%;\n }\n .col-lg-pull-8 {\n right: 66.66666667%;\n }\n .col-lg-pull-7 {\n right: 58.33333333%;\n }\n .col-lg-pull-6 {\n right: 50%;\n }\n .col-lg-pull-5 {\n right: 41.66666667%;\n }\n .col-lg-pull-4 {\n right: 33.33333333%;\n }\n .col-lg-pull-3 {\n right: 25%;\n }\n .col-lg-pull-2 {\n right: 16.66666667%;\n }\n .col-lg-pull-1 {\n right: 8.33333333%;\n }\n .col-lg-pull-0 {\n right: auto;\n }\n .col-lg-push-12 {\n left: 100%;\n }\n .col-lg-push-11 {\n left: 91.66666667%;\n }\n .col-lg-push-10 {\n left: 83.33333333%;\n }\n .col-lg-push-9 {\n left: 75%;\n }\n .col-lg-push-8 {\n left: 66.66666667%;\n }\n .col-lg-push-7 {\n left: 58.33333333%;\n }\n .col-lg-push-6 {\n left: 50%;\n }\n .col-lg-push-5 {\n left: 41.66666667%;\n }\n .col-lg-push-4 {\n left: 33.33333333%;\n }\n .col-lg-push-3 {\n left: 25%;\n }\n .col-lg-push-2 {\n left: 16.66666667%;\n }\n .col-lg-push-1 {\n left: 8.33333333%;\n }\n .col-lg-push-0 {\n left: auto;\n }\n .col-lg-offset-12 {\n margin-left: 100%;\n }\n .col-lg-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-lg-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-lg-offset-9 {\n margin-left: 75%;\n }\n .col-lg-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-lg-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-lg-offset-6 {\n margin-left: 50%;\n }\n .col-lg-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-lg-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-lg-offset-3 {\n margin-left: 25%;\n }\n .col-lg-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-lg-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-lg-offset-0 {\n margin-left: 0%;\n }\n}\ntable {\n background-color: transparent;\n}\ncaption {\n padding-top: 8px;\n padding-bottom: 8px;\n color: #777777;\n text-align: left;\n}\nth {\n text-align: left;\n}\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n padding: 8px;\n line-height: 1.42857143;\n vertical-align: top;\n border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n border-top: 0;\n}\n.table > tbody + tbody {\n border-top: 2px solid #ddd;\n}\n.table .table {\n background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n padding: 5px;\n}\n.table-bordered {\n border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-column;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-cell;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n background-color: #ebcccc;\n}\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%;\n}\n@media screen and (max-width: 767px) {\n .table-responsive {\n width: 100%;\n margin-bottom: 15px;\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid #ddd;\n }\n .table-responsive > .table {\n margin-bottom: 0;\n }\n .table-responsive > .table > thead > tr > th,\n .table-responsive > .table > tbody > tr > th,\n .table-responsive > .table > tfoot > tr > th,\n .table-responsive > .table > thead > tr > td,\n .table-responsive > .table > tbody > tr > td,\n .table-responsive > .table > tfoot > tr > td {\n white-space: nowrap;\n }\n .table-responsive > .table-bordered {\n border: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:first-child,\n .table-responsive > .table-bordered > tbody > tr > th:first-child,\n .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n .table-responsive > .table-bordered > thead > tr > td:first-child,\n .table-responsive > .table-bordered > tbody > tr > td:first-child,\n .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:last-child,\n .table-responsive > .table-bordered > tbody > tr > th:last-child,\n .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n .table-responsive > .table-bordered > thead > tr > td:last-child,\n .table-responsive > .table-bordered > tbody > tr > td:last-child,\n .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n }\n .table-responsive > .table-bordered > tbody > tr:last-child > th,\n .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n .table-responsive > .table-bordered > tbody > tr:last-child > td,\n .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n border-bottom: 0;\n }\n}\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n min-width: 0;\n}\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: 20px;\n font-size: 21px;\n line-height: inherit;\n color: #333333;\n border: 0;\n border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 5px;\n font-weight: bold;\n}\ninput[type=\"search\"] {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9;\n line-height: normal;\n}\ninput[type=\"file\"] {\n display: block;\n}\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\nselect[multiple],\nselect[size] {\n height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\noutput {\n display: block;\n padding-top: 7px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n}\n.form-control {\n display: block;\n width: 100%;\n height: 34px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n background-color: #fff;\n background-image: none;\n border: 1px solid #ccc;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n border-color: #66afe9;\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.form-control::-moz-placeholder {\n color: #999;\n opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n color: #999;\n}\n.form-control::-webkit-input-placeholder {\n color: #999;\n}\n.form-control::-ms-expand {\n border: 0;\n background-color: transparent;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n background-color: #eeeeee;\n opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n cursor: not-allowed;\n}\ntextarea.form-control {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"].form-control,\n input[type=\"time\"].form-control,\n input[type=\"datetime-local\"].form-control,\n input[type=\"month\"].form-control {\n line-height: 34px;\n }\n input[type=\"date\"].input-sm,\n input[type=\"time\"].input-sm,\n input[type=\"datetime-local\"].input-sm,\n input[type=\"month\"].input-sm,\n .input-group-sm input[type=\"date\"],\n .input-group-sm input[type=\"time\"],\n .input-group-sm input[type=\"datetime-local\"],\n .input-group-sm input[type=\"month\"] {\n line-height: 30px;\n }\n input[type=\"date\"].input-lg,\n input[type=\"time\"].input-lg,\n input[type=\"datetime-local\"].input-lg,\n input[type=\"month\"].input-lg,\n .input-group-lg input[type=\"date\"],\n .input-group-lg input[type=\"time\"],\n .input-group-lg input[type=\"datetime-local\"],\n .input-group-lg input[type=\"month\"] {\n line-height: 46px;\n }\n}\n.form-group {\n margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n min-height: 20px;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n cursor: not-allowed;\n}\n.form-control-static {\n padding-top: 7px;\n padding-bottom: 7px;\n margin-bottom: 0;\n min-height: 34px;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n padding-left: 0;\n padding-right: 0;\n}\n.input-sm {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-sm {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n height: auto;\n}\n.form-group-sm .form-control {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.form-group-sm select.form-control {\n height: 30px;\n line-height: 30px;\n}\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n height: auto;\n}\n.form-group-sm .form-control-static {\n height: 30px;\n min-height: 32px;\n padding: 6px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.input-lg {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-lg {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n height: auto;\n}\n.form-group-lg .form-control {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.form-group-lg select.form-control {\n height: 46px;\n line-height: 46px;\n}\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n height: auto;\n}\n.form-group-lg .form-control-static {\n height: 46px;\n min-height: 38px;\n padding: 11px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.has-feedback {\n position: relative;\n}\n.has-feedback .form-control {\n padding-right: 42.5px;\n}\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: 34px;\n height: 34px;\n line-height: 34px;\n text-align: center;\n pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n width: 46px;\n height: 46px;\n line-height: 46px;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n width: 30px;\n height: 30px;\n line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n color: #3c763d;\n}\n.has-success .form-control {\n border-color: #3c763d;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-success .form-control:focus {\n border-color: #2b542c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n color: #3c763d;\n border-color: #3c763d;\n background-color: #dff0d8;\n}\n.has-success .form-control-feedback {\n color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n color: #8a6d3b;\n}\n.has-warning .form-control {\n border-color: #8a6d3b;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-warning .form-control:focus {\n border-color: #66512c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n color: #8a6d3b;\n border-color: #8a6d3b;\n background-color: #fcf8e3;\n}\n.has-warning .form-control-feedback {\n color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n color: #a94442;\n}\n.has-error .form-control {\n border-color: #a94442;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-error .form-control:focus {\n border-color: #843534;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n color: #a94442;\n border-color: #a94442;\n background-color: #f2dede;\n}\n.has-error .form-control-feedback {\n color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n top: 0;\n}\n.help-block {\n display: block;\n margin-top: 5px;\n margin-bottom: 10px;\n color: #737373;\n}\n@media (min-width: 768px) {\n .form-inline .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-static {\n display: inline-block;\n }\n .form-inline .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .form-inline .input-group .input-group-addon,\n .form-inline .input-group .input-group-btn,\n .form-inline .input-group .form-control {\n width: auto;\n }\n .form-inline .input-group > .form-control {\n width: 100%;\n }\n .form-inline .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio,\n .form-inline .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio label,\n .form-inline .checkbox label {\n padding-left: 0;\n }\n .form-inline .radio input[type=\"radio\"],\n .form-inline .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .form-inline .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: 7px;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n min-height: 27px;\n}\n.form-horizontal .form-group {\n margin-left: -15px;\n margin-right: -15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .control-label {\n text-align: right;\n margin-bottom: 0;\n padding-top: 7px;\n }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n right: 15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-lg .control-label {\n padding-top: 11px;\n font-size: 18px;\n }\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-sm .control-label {\n padding-top: 6px;\n font-size: 12px;\n }\n}\n.btn {\n display: inline-block;\n margin-bottom: 0;\n font-weight: normal;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none;\n border: 1px solid transparent;\n white-space: nowrap;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n border-radius: 4px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n color: #333;\n text-decoration: none;\n}\n.btn:active,\n.btn.active {\n outline: 0;\n background-image: none;\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n cursor: not-allowed;\n opacity: 0.65;\n filter: alpha(opacity=65);\n -webkit-box-shadow: none;\n box-shadow: none;\n}\na.btn.disabled,\nfieldset[disabled] a.btn {\n pointer-events: none;\n}\n.btn-default {\n color: #333;\n background-color: #fff;\n border-color: #ccc;\n}\n.btn-default:focus,\n.btn-default.focus {\n color: #333;\n background-color: #e6e6e6;\n border-color: #8c8c8c;\n}\n.btn-default:hover {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active:hover,\n.btn-default.active:hover,\n.open > .dropdown-toggle.btn-default:hover,\n.btn-default:active:focus,\n.btn-default.active:focus,\n.open > .dropdown-toggle.btn-default:focus,\n.btn-default:active.focus,\n.btn-default.active.focus,\n.open > .dropdown-toggle.btn-default.focus {\n color: #333;\n background-color: #d4d4d4;\n border-color: #8c8c8c;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n background-image: none;\n}\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus {\n background-color: #fff;\n border-color: #ccc;\n}\n.btn-default .badge {\n color: #fff;\n background-color: #333;\n}\n.btn-primary {\n color: #fff;\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary:focus,\n.btn-primary.focus {\n color: #fff;\n background-color: #286090;\n border-color: #122b40;\n}\n.btn-primary:hover {\n color: #fff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n color: #fff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active:hover,\n.btn-primary.active:hover,\n.open > .dropdown-toggle.btn-primary:hover,\n.btn-primary:active:focus,\n.btn-primary.active:focus,\n.open > .dropdown-toggle.btn-primary:focus,\n.btn-primary:active.focus,\n.btn-primary.active.focus,\n.open > .dropdown-toggle.btn-primary.focus {\n color: #fff;\n background-color: #204d74;\n border-color: #122b40;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n background-image: none;\n}\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus {\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.btn-success {\n color: #fff;\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success:focus,\n.btn-success.focus {\n color: #fff;\n background-color: #449d44;\n border-color: #255625;\n}\n.btn-success:hover {\n color: #fff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n color: #fff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active:hover,\n.btn-success.active:hover,\n.open > .dropdown-toggle.btn-success:hover,\n.btn-success:active:focus,\n.btn-success.active:focus,\n.open > .dropdown-toggle.btn-success:focus,\n.btn-success:active.focus,\n.btn-success.active.focus,\n.open > .dropdown-toggle.btn-success.focus {\n color: #fff;\n background-color: #398439;\n border-color: #255625;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n background-image: none;\n}\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus {\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success .badge {\n color: #5cb85c;\n background-color: #fff;\n}\n.btn-info {\n color: #fff;\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info:focus,\n.btn-info.focus {\n color: #fff;\n background-color: #31b0d5;\n border-color: #1b6d85;\n}\n.btn-info:hover {\n color: #fff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n color: #fff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active:hover,\n.btn-info.active:hover,\n.open > .dropdown-toggle.btn-info:hover,\n.btn-info:active:focus,\n.btn-info.active:focus,\n.open > .dropdown-toggle.btn-info:focus,\n.btn-info:active.focus,\n.btn-info.active.focus,\n.open > .dropdown-toggle.btn-info.focus {\n color: #fff;\n background-color: #269abc;\n border-color: #1b6d85;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n background-image: none;\n}\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus {\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info .badge {\n color: #5bc0de;\n background-color: #fff;\n}\n.btn-warning {\n color: #fff;\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning:focus,\n.btn-warning.focus {\n color: #fff;\n background-color: #ec971f;\n border-color: #985f0d;\n}\n.btn-warning:hover {\n color: #fff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n color: #fff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active:hover,\n.btn-warning.active:hover,\n.open > .dropdown-toggle.btn-warning:hover,\n.btn-warning:active:focus,\n.btn-warning.active:focus,\n.open > .dropdown-toggle.btn-warning:focus,\n.btn-warning:active.focus,\n.btn-warning.active.focus,\n.open > .dropdown-toggle.btn-warning.focus {\n color: #fff;\n background-color: #d58512;\n border-color: #985f0d;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n background-image: none;\n}\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus {\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning .badge {\n color: #f0ad4e;\n background-color: #fff;\n}\n.btn-danger {\n color: #fff;\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger:focus,\n.btn-danger.focus {\n color: #fff;\n background-color: #c9302c;\n border-color: #761c19;\n}\n.btn-danger:hover {\n color: #fff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n color: #fff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active:hover,\n.btn-danger.active:hover,\n.open > .dropdown-toggle.btn-danger:hover,\n.btn-danger:active:focus,\n.btn-danger.active:focus,\n.open > .dropdown-toggle.btn-danger:focus,\n.btn-danger:active.focus,\n.btn-danger.active.focus,\n.open > .dropdown-toggle.btn-danger.focus {\n color: #fff;\n background-color: #ac2925;\n border-color: #761c19;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n background-image: none;\n}\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus {\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger .badge {\n color: #d9534f;\n background-color: #fff;\n}\n.btn-link {\n color: #337ab7;\n font-weight: normal;\n border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n background-color: transparent;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n color: #23527c;\n text-decoration: underline;\n background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n color: #777777;\n text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n padding: 1px 5px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-block {\n display: block;\n width: 100%;\n}\n.btn-block + .btn-block {\n margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n.fade {\n opacity: 0;\n -webkit-transition: opacity 0.15s linear;\n -o-transition: opacity 0.15s linear;\n transition: opacity 0.15s linear;\n}\n.fade.in {\n opacity: 1;\n}\n.collapse {\n display: none;\n}\n.collapse.in {\n display: block;\n}\ntr.collapse.in {\n display: table-row;\n}\ntbody.collapse.in {\n display: table-row-group;\n}\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n -webkit-transition-property: height, visibility;\n transition-property: height, visibility;\n -webkit-transition-duration: 0.35s;\n transition-duration: 0.35s;\n -webkit-transition-timing-function: ease;\n transition-timing-function: ease;\n}\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px dashed;\n border-top: 4px solid \\9;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n position: relative;\n}\n.dropdown-toggle:focus {\n outline: 0;\n}\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0;\n list-style: none;\n font-size: 14px;\n text-align: left;\n background-color: #fff;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n background-clip: padding-box;\n}\n.dropdown-menu.pull-right {\n right: 0;\n left: auto;\n}\n.dropdown-menu .divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: 1.42857143;\n color: #333333;\n white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n text-decoration: none;\n color: #262626;\n background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n background-color: #337ab7;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n color: #777777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n cursor: not-allowed;\n}\n.open > .dropdown-menu {\n display: block;\n}\n.open > a {\n outline: 0;\n}\n.dropdown-menu-right {\n left: auto;\n right: 0;\n}\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: 12px;\n line-height: 1.42857143;\n color: #777777;\n white-space: nowrap;\n}\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: 990;\n}\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n border-top: 0;\n border-bottom: 4px dashed;\n border-bottom: 4px solid \\9;\n content: \"\";\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n .navbar-right .dropdown-menu {\n left: auto;\n right: 0;\n }\n .navbar-right .dropdown-menu-left {\n left: 0;\n right: auto;\n }\n}\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n margin-left: -1px;\n}\n.btn-toolbar {\n margin-left: -5px;\n}\n.btn-toolbar .btn,\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n.btn-group > .btn:first-child {\n margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n.btn-group.open .dropdown-toggle {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn .caret {\n margin-left: 0;\n}\n.btn-lg .caret {\n border-width: 5px 5px 0;\n border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.input-group {\n position: relative;\n display: table;\n border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n}\n.input-group .form-control {\n position: relative;\n z-index: 2;\n float: left;\n width: 100%;\n margin-bottom: 0;\n}\n.input-group .form-control:focus {\n z-index: 3;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle;\n}\n.input-group-addon {\n padding: 6px 12px;\n font-size: 14px;\n font-weight: normal;\n line-height: 1;\n color: #555555;\n text-align: center;\n background-color: #eeeeee;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\n.input-group-addon.input-sm {\n padding: 5px 10px;\n font-size: 12px;\n border-radius: 3px;\n}\n.input-group-addon.input-lg {\n padding: 10px 16px;\n font-size: 18px;\n border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n.input-group-btn {\n position: relative;\n font-size: 0;\n white-space: nowrap;\n}\n.input-group-btn > .btn {\n position: relative;\n}\n.input-group-btn > .btn + .btn {\n margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n z-index: 2;\n margin-left: -1px;\n}\n.nav {\n margin-bottom: 0;\n padding-left: 0;\n list-style: none;\n}\n.nav > li {\n position: relative;\n display: block;\n}\n.nav > li > a {\n position: relative;\n display: block;\n padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.nav > li.disabled > a {\n color: #777777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n color: #777777;\n text-decoration: none;\n background-color: transparent;\n cursor: not-allowed;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n background-color: #eeeeee;\n border-color: #337ab7;\n}\n.nav .nav-divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.nav > li > a > img {\n max-width: none;\n}\n.nav-tabs {\n border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n float: left;\n margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n margin-right: 2px;\n line-height: 1.42857143;\n border: 1px solid transparent;\n border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n border-color: #eeeeee #eeeeee #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n color: #555555;\n background-color: #fff;\n border: 1px solid #ddd;\n border-bottom-color: transparent;\n cursor: default;\n}\n.nav-tabs.nav-justified {\n width: 100%;\n border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n float: none;\n}\n.nav-tabs.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-tabs.nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs.nav-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs.nav-justified > .active > a,\n .nav-tabs.nav-justified > .active > a:hover,\n .nav-tabs.nav-justified > .active > a:focus {\n border-bottom-color: #fff;\n }\n}\n.nav-pills > li {\n float: left;\n}\n.nav-pills > li > a {\n border-radius: 4px;\n}\n.nav-pills > li + li {\n margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n color: #fff;\n background-color: #337ab7;\n}\n.nav-stacked > li {\n float: none;\n}\n.nav-stacked > li + li {\n margin-top: 2px;\n margin-left: 0;\n}\n.nav-justified {\n width: 100%;\n}\n.nav-justified > li {\n float: none;\n}\n.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs-justified {\n border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n .nav-tabs-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs-justified > .active > a,\n .nav-tabs-justified > .active > a:hover,\n .nav-tabs-justified > .active > a:focus {\n border-bottom-color: #fff;\n }\n}\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar {\n position: relative;\n min-height: 50px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n .navbar {\n border-radius: 4px;\n }\n}\n@media (min-width: 768px) {\n .navbar-header {\n float: left;\n }\n}\n.navbar-collapse {\n overflow-x: visible;\n padding-right: 15px;\n padding-left: 15px;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n -webkit-overflow-scrolling: touch;\n}\n.navbar-collapse.in {\n overflow-y: auto;\n}\n@media (min-width: 768px) {\n .navbar-collapse {\n width: auto;\n border-top: 0;\n box-shadow: none;\n }\n .navbar-collapse.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0;\n overflow: visible !important;\n }\n .navbar-collapse.in {\n overflow-y: visible;\n }\n .navbar-fixed-top .navbar-collapse,\n .navbar-static-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n padding-left: 0;\n padding-right: 0;\n }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n .navbar-fixed-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n max-height: 200px;\n }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n margin-right: -15px;\n margin-left: -15px;\n}\n@media (min-width: 768px) {\n .container > .navbar-header,\n .container-fluid > .navbar-header,\n .container > .navbar-collapse,\n .container-fluid > .navbar-collapse {\n margin-right: 0;\n margin-left: 0;\n }\n}\n.navbar-static-top {\n z-index: 1000;\n border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n .navbar-static-top {\n border-radius: 0;\n }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n@media (min-width: 768px) {\n .navbar-fixed-top,\n .navbar-fixed-bottom {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0;\n border-width: 1px 0 0;\n}\n.navbar-brand {\n float: left;\n padding: 15px 15px;\n font-size: 18px;\n line-height: 20px;\n height: 50px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n text-decoration: none;\n}\n.navbar-brand > img {\n display: block;\n}\n@media (min-width: 768px) {\n .navbar > .container .navbar-brand,\n .navbar > .container-fluid .navbar-brand {\n margin-left: -15px;\n }\n}\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: 15px;\n padding: 9px 10px;\n margin-top: 8px;\n margin-bottom: 8px;\n background-color: transparent;\n background-image: none;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.navbar-toggle:focus {\n outline: 0;\n}\n.navbar-toggle .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n margin-top: 4px;\n}\n@media (min-width: 768px) {\n .navbar-toggle {\n display: none;\n }\n}\n.navbar-nav {\n margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: 20px;\n}\n@media (max-width: 767px) {\n .navbar-nav .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n }\n .navbar-nav .open .dropdown-menu > li > a,\n .navbar-nav .open .dropdown-menu .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n .navbar-nav .open .dropdown-menu > li > a {\n line-height: 20px;\n }\n .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-nav .open .dropdown-menu > li > a:focus {\n background-image: none;\n }\n}\n@media (min-width: 768px) {\n .navbar-nav {\n float: left;\n margin: 0;\n }\n .navbar-nav > li {\n float: left;\n }\n .navbar-nav > li > a {\n padding-top: 15px;\n padding-bottom: 15px;\n }\n}\n.navbar-form {\n margin-left: -15px;\n margin-right: -15px;\n padding: 10px 15px;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n margin-top: 8px;\n margin-bottom: 8px;\n}\n@media (min-width: 768px) {\n .navbar-form .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .navbar-form .form-control-static {\n display: inline-block;\n }\n .navbar-form .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .navbar-form .input-group .input-group-addon,\n .navbar-form .input-group .input-group-btn,\n .navbar-form .input-group .form-control {\n width: auto;\n }\n .navbar-form .input-group > .form-control {\n width: 100%;\n }\n .navbar-form .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio,\n .navbar-form .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio label,\n .navbar-form .checkbox label {\n padding-left: 0;\n }\n .navbar-form .radio input[type=\"radio\"],\n .navbar-form .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .navbar-form .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n@media (max-width: 767px) {\n .navbar-form .form-group {\n margin-bottom: 5px;\n }\n .navbar-form .form-group:last-child {\n margin-bottom: 0;\n }\n}\n@media (min-width: 768px) {\n .navbar-form {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n}\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.navbar-btn {\n margin-top: 8px;\n margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n margin-top: 14px;\n margin-bottom: 14px;\n}\n.navbar-text {\n margin-top: 15px;\n margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n .navbar-text {\n float: left;\n margin-left: 15px;\n margin-right: 15px;\n }\n}\n@media (min-width: 768px) {\n .navbar-left {\n float: left !important;\n }\n .navbar-right {\n float: right !important;\n margin-right: -15px;\n }\n .navbar-right ~ .navbar-right {\n margin-right: 0;\n }\n}\n.navbar-default {\n background-color: #f8f8f8;\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n color: #777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n color: #5e5e5e;\n background-color: transparent;\n}\n.navbar-default .navbar-text {\n color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n color: #777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n color: #333;\n background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n color: #555;\n background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n color: #ccc;\n background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n background-color: #e7e7e7;\n color: #555;\n}\n@media (max-width: 767px) {\n .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n color: #777;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #333;\n background-color: transparent;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #555;\n background-color: #e7e7e7;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #ccc;\n background-color: transparent;\n }\n}\n.navbar-default .navbar-link {\n color: #777;\n}\n.navbar-default .navbar-link:hover {\n color: #333;\n}\n.navbar-default .btn-link {\n color: #777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n color: #333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n color: #ccc;\n}\n.navbar-inverse {\n background-color: #222;\n border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n color: #fff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n color: #fff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n color: #fff;\n background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n color: #444;\n background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n background-color: #080808;\n color: #fff;\n}\n@media (max-width: 767px) {\n .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n border-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n color: #9d9d9d;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #fff;\n background-color: transparent;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #444;\n background-color: transparent;\n }\n}\n.navbar-inverse .navbar-link {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n color: #fff;\n}\n.navbar-inverse .btn-link {\n color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n color: #fff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n color: #444;\n}\n.breadcrumb {\n padding: 8px 15px;\n margin-bottom: 20px;\n list-style: none;\n background-color: #f5f5f5;\n border-radius: 4px;\n}\n.breadcrumb > li {\n display: inline-block;\n}\n.breadcrumb > li + li:before {\n content: \"/\\00a0\";\n padding: 0 5px;\n color: #ccc;\n}\n.breadcrumb > .active {\n color: #777777;\n}\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: 20px 0;\n border-radius: 4px;\n}\n.pagination > li {\n display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n position: relative;\n float: left;\n padding: 6px 12px;\n line-height: 1.42857143;\n text-decoration: none;\n color: #337ab7;\n background-color: #fff;\n border: 1px solid #ddd;\n margin-left: -1px;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n margin-left: 0;\n border-bottom-left-radius: 4px;\n border-top-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n border-bottom-right-radius: 4px;\n border-top-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n z-index: 2;\n color: #23527c;\n background-color: #eeeeee;\n border-color: #ddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n z-index: 3;\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n cursor: default;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n color: #777777;\n background-color: #fff;\n border-color: #ddd;\n cursor: not-allowed;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n border-bottom-left-radius: 6px;\n border-top-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n border-bottom-right-radius: 6px;\n border-top-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n border-bottom-left-radius: 3px;\n border-top-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n border-bottom-right-radius: 3px;\n border-top-right-radius: 3px;\n}\n.pager {\n padding-left: 0;\n margin: 20px 0;\n list-style: none;\n text-align: center;\n}\n.pager li {\n display: inline;\n}\n.pager li > a,\n.pager li > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.pager .next > a,\n.pager .next > span {\n float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n color: #777777;\n background-color: #fff;\n cursor: not-allowed;\n}\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer;\n}\n.label:empty {\n display: none;\n}\n.btn .label {\n position: relative;\n top: -1px;\n}\n.label-default {\n background-color: #777777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n background-color: #5e5e5e;\n}\n.label-primary {\n background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n background-color: #286090;\n}\n.label-success {\n background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n background-color: #449d44;\n}\n.label-info {\n background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n background-color: #31b0d5;\n}\n.label-warning {\n background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n background-color: #ec971f;\n}\n.label-danger {\n background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n background-color: #c9302c;\n}\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: 12px;\n font-weight: bold;\n color: #fff;\n line-height: 1;\n vertical-align: middle;\n white-space: nowrap;\n text-align: center;\n background-color: #777777;\n border-radius: 10px;\n}\n.badge:empty {\n display: none;\n}\n.btn .badge {\n position: relative;\n top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n top: 0;\n padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.list-group-item > .badge {\n float: right;\n}\n.list-group-item > .badge + .badge {\n margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n margin-left: 3px;\n}\n.jumbotron {\n padding-top: 30px;\n padding-bottom: 30px;\n margin-bottom: 30px;\n color: inherit;\n background-color: #eeeeee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n color: inherit;\n}\n.jumbotron p {\n margin-bottom: 15px;\n font-size: 21px;\n font-weight: 200;\n}\n.jumbotron > hr {\n border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n border-radius: 6px;\n padding-left: 15px;\n padding-right: 15px;\n}\n.jumbotron .container {\n max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n .jumbotron {\n padding-top: 48px;\n padding-bottom: 48px;\n }\n .container .jumbotron,\n .container-fluid .jumbotron {\n padding-left: 60px;\n padding-right: 60px;\n }\n .jumbotron h1,\n .jumbotron .h1 {\n font-size: 63px;\n }\n}\n.thumbnail {\n display: block;\n padding: 4px;\n margin-bottom: 20px;\n line-height: 1.42857143;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n -webkit-transition: border 0.2s ease-in-out;\n -o-transition: border 0.2s ease-in-out;\n transition: border 0.2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n margin-left: auto;\n margin-right: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n border-color: #337ab7;\n}\n.thumbnail .caption {\n padding: 9px;\n color: #333333;\n}\n.alert {\n padding: 15px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.alert h4 {\n margin-top: 0;\n color: inherit;\n}\n.alert .alert-link {\n font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n margin-bottom: 0;\n}\n.alert > p + p {\n margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n}\n.alert-success {\n background-color: #dff0d8;\n border-color: #d6e9c6;\n color: #3c763d;\n}\n.alert-success hr {\n border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n color: #2b542c;\n}\n.alert-info {\n background-color: #d9edf7;\n border-color: #bce8f1;\n color: #31708f;\n}\n.alert-info hr {\n border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n color: #245269;\n}\n.alert-warning {\n background-color: #fcf8e3;\n border-color: #faebcc;\n color: #8a6d3b;\n}\n.alert-warning hr {\n border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n color: #66512c;\n}\n.alert-danger {\n background-color: #f2dede;\n border-color: #ebccd1;\n color: #a94442;\n}\n.alert-danger hr {\n border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n@keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n.progress {\n overflow: hidden;\n height: 20px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: 12px;\n line-height: 20px;\n color: #fff;\n text-align: center;\n background-color: #337ab7;\n -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n -webkit-transition: width 0.6s ease;\n -o-transition: width 0.6s ease;\n transition: width 0.6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n -webkit-animation: progress-bar-stripes 2s linear infinite;\n -o-animation: progress-bar-stripes 2s linear infinite;\n animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.media {\n margin-top: 15px;\n}\n.media:first-child {\n margin-top: 0;\n}\n.media,\n.media-body {\n zoom: 1;\n overflow: hidden;\n}\n.media-body {\n width: 10000px;\n}\n.media-object {\n display: block;\n}\n.media-object.img-thumbnail {\n max-width: none;\n}\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n.media-middle {\n vertical-align: middle;\n}\n.media-bottom {\n vertical-align: bottom;\n}\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n.list-group {\n margin-bottom: 20px;\n padding-left: 0;\n}\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n margin-bottom: -1px;\n background-color: #fff;\n border: 1px solid #ddd;\n}\n.list-group-item:first-child {\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n}\n.list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\na.list-group-item,\nbutton.list-group-item {\n color: #555;\n}\na.list-group-item .list-group-item-heading,\nbutton.list-group-item .list-group-item-heading {\n color: #333;\n}\na.list-group-item:hover,\nbutton.list-group-item:hover,\na.list-group-item:focus,\nbutton.list-group-item:focus {\n text-decoration: none;\n color: #555;\n background-color: #f5f5f5;\n}\nbutton.list-group-item {\n width: 100%;\n text-align: left;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n background-color: #eeeeee;\n color: #777777;\n cursor: not-allowed;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n color: #777777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n z-index: 2;\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n color: #c7ddef;\n}\n.list-group-item-success {\n color: #3c763d;\n background-color: #dff0d8;\n}\na.list-group-item-success,\nbutton.list-group-item-success {\n color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading,\nbutton.list-group-item-success .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-success:hover,\nbutton.list-group-item-success:hover,\na.list-group-item-success:focus,\nbutton.list-group-item-success:focus {\n color: #3c763d;\n background-color: #d0e9c6;\n}\na.list-group-item-success.active,\nbutton.list-group-item-success.active,\na.list-group-item-success.active:hover,\nbutton.list-group-item-success.active:hover,\na.list-group-item-success.active:focus,\nbutton.list-group-item-success.active:focus {\n color: #fff;\n background-color: #3c763d;\n border-color: #3c763d;\n}\n.list-group-item-info {\n color: #31708f;\n background-color: #d9edf7;\n}\na.list-group-item-info,\nbutton.list-group-item-info {\n color: #31708f;\n}\na.list-group-item-info .list-group-item-heading,\nbutton.list-group-item-info .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-info:hover,\nbutton.list-group-item-info:hover,\na.list-group-item-info:focus,\nbutton.list-group-item-info:focus {\n color: #31708f;\n background-color: #c4e3f3;\n}\na.list-group-item-info.active,\nbutton.list-group-item-info.active,\na.list-group-item-info.active:hover,\nbutton.list-group-item-info.active:hover,\na.list-group-item-info.active:focus,\nbutton.list-group-item-info.active:focus {\n color: #fff;\n background-color: #31708f;\n border-color: #31708f;\n}\n.list-group-item-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n}\na.list-group-item-warning,\nbutton.list-group-item-warning {\n color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading,\nbutton.list-group-item-warning .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-warning:hover,\nbutton.list-group-item-warning:hover,\na.list-group-item-warning:focus,\nbutton.list-group-item-warning:focus {\n color: #8a6d3b;\n background-color: #faf2cc;\n}\na.list-group-item-warning.active,\nbutton.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\nbutton.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus,\nbutton.list-group-item-warning.active:focus {\n color: #fff;\n background-color: #8a6d3b;\n border-color: #8a6d3b;\n}\n.list-group-item-danger {\n color: #a94442;\n background-color: #f2dede;\n}\na.list-group-item-danger,\nbutton.list-group-item-danger {\n color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading,\nbutton.list-group-item-danger .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-danger:hover,\nbutton.list-group-item-danger:hover,\na.list-group-item-danger:focus,\nbutton.list-group-item-danger:focus {\n color: #a94442;\n background-color: #ebcccc;\n}\na.list-group-item-danger.active,\nbutton.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\nbutton.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus,\nbutton.list-group-item-danger.active:focus {\n color: #fff;\n background-color: #a94442;\n border-color: #a94442;\n}\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n.panel {\n margin-bottom: 20px;\n background-color: #fff;\n border: 1px solid transparent;\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.panel-body {\n padding: 15px;\n}\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n color: inherit;\n}\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n color: inherit;\n}\n.panel-footer {\n padding: 10px 15px;\n background-color: #f5f5f5;\n border-top: 1px solid #ddd;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n border-top: 0;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n border-bottom: 0;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n border-top-width: 0;\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n padding-left: 15px;\n padding-right: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n border-bottom-left-radius: 3px;\n border-bottom-right-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n border-bottom: 0;\n}\n.panel > .table-responsive {\n border: 0;\n margin-bottom: 0;\n}\n.panel-group {\n margin-bottom: 20px;\n}\n.panel-group .panel {\n margin-bottom: 0;\n border-radius: 4px;\n}\n.panel-group .panel + .panel {\n margin-top: 5px;\n}\n.panel-group .panel-heading {\n border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n border-top: 1px solid #ddd;\n}\n.panel-group .panel-footer {\n border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n border-bottom: 1px solid #ddd;\n}\n.panel-default {\n border-color: #ddd;\n}\n.panel-default > .panel-heading {\n color: #333333;\n background-color: #f5f5f5;\n border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ddd;\n}\n.panel-default > .panel-heading .badge {\n color: #f5f5f5;\n background-color: #333333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ddd;\n}\n.panel-primary {\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #337ab7;\n}\n.panel-success {\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n color: #dff0d8;\n background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #d6e9c6;\n}\n.panel-info {\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n color: #d9edf7;\n background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #bce8f1;\n}\n.panel-warning {\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n color: #fcf8e3;\n background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #faebcc;\n}\n.panel-danger {\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n color: #f2dede;\n background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0;\n}\n.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border: 1px solid #e3e3e3;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.well blockquote {\n border-color: #ddd;\n border-color: rgba(0, 0, 0, 0.15);\n}\n.well-lg {\n padding: 24px;\n border-radius: 6px;\n}\n.well-sm {\n padding: 9px;\n border-radius: 3px;\n}\n.close {\n float: right;\n font-size: 21px;\n font-weight: bold;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n opacity: 0.2;\n filter: alpha(opacity=20);\n}\n.close:hover,\n.close:focus {\n color: #000;\n text-decoration: none;\n cursor: pointer;\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\nbutton.close {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n}\n.modal-open {\n overflow: hidden;\n}\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1050;\n -webkit-overflow-scrolling: touch;\n outline: 0;\n}\n.modal.fade .modal-dialog {\n -webkit-transform: translate(0, -25%);\n -ms-transform: translate(0, -25%);\n -o-transform: translate(0, -25%);\n transform: translate(0, -25%);\n -webkit-transition: -webkit-transform 0.3s ease-out;\n -moz-transition: -moz-transform 0.3s ease-out;\n -o-transition: -o-transform 0.3s ease-out;\n transition: transform 0.3s ease-out;\n}\n.modal.in .modal-dialog {\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n -o-transform: translate(0, 0);\n transform: translate(0, 0);\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n.modal-content {\n position: relative;\n background-color: #fff;\n border: 1px solid #999;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n background-clip: padding-box;\n outline: 0;\n}\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n background-color: #000;\n}\n.modal-backdrop.fade {\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.modal-backdrop.in {\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\n.modal-header {\n padding: 15px;\n border-bottom: 1px solid #e5e5e5;\n}\n.modal-header .close {\n margin-top: -2px;\n}\n.modal-title {\n margin: 0;\n line-height: 1.42857143;\n}\n.modal-body {\n position: relative;\n padding: 15px;\n}\n.modal-footer {\n padding: 15px;\n text-align: right;\n border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0;\n}\n.modal-footer .btn-group .btn + .btn {\n margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n margin-left: 0;\n}\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n@media (min-width: 768px) {\n .modal-dialog {\n width: 600px;\n margin: 30px auto;\n }\n .modal-content {\n -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n }\n .modal-sm {\n width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg {\n width: 900px;\n }\n}\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.42857143;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n font-size: 12px;\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.tooltip.in {\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.tooltip.top {\n margin-top: -3px;\n padding: 5px 0;\n}\n.tooltip.right {\n margin-left: 3px;\n padding: 0 5px;\n}\n.tooltip.bottom {\n margin-top: 3px;\n padding: 5px 0;\n}\n.tooltip.left {\n margin-left: -3px;\n padding: 0 5px;\n}\n.tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 4px;\n}\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.top-left .tooltip-arrow {\n bottom: 0;\n right: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.top-right .tooltip-arrow {\n bottom: 0;\n left: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n border-right-color: #000;\n}\n.tooltip.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n border-left-color: #000;\n}\n.tooltip.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n top: 0;\n right: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n top: 0;\n left: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: none;\n max-width: 276px;\n padding: 1px;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.42857143;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n font-size: 14px;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n}\n.popover.top {\n margin-top: -10px;\n}\n.popover.right {\n margin-left: 10px;\n}\n.popover.bottom {\n margin-top: 10px;\n}\n.popover.left {\n margin-left: -10px;\n}\n.popover-title {\n margin: 0;\n padding: 8px 14px;\n font-size: 14px;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-radius: 5px 5px 0 0;\n}\n.popover-content {\n padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.popover > .arrow {\n border-width: 11px;\n}\n.popover > .arrow:after {\n border-width: 10px;\n content: \"\";\n}\n.popover.top > .arrow {\n left: 50%;\n margin-left: -11px;\n border-bottom-width: 0;\n border-top-color: #999999;\n border-top-color: rgba(0, 0, 0, 0.25);\n bottom: -11px;\n}\n.popover.top > .arrow:after {\n content: \" \";\n bottom: 1px;\n margin-left: -10px;\n border-bottom-width: 0;\n border-top-color: #fff;\n}\n.popover.right > .arrow {\n top: 50%;\n left: -11px;\n margin-top: -11px;\n border-left-width: 0;\n border-right-color: #999999;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n.popover.right > .arrow:after {\n content: \" \";\n left: 1px;\n bottom: -10px;\n border-left-width: 0;\n border-right-color: #fff;\n}\n.popover.bottom > .arrow {\n left: 50%;\n margin-left: -11px;\n border-top-width: 0;\n border-bottom-color: #999999;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n top: -11px;\n}\n.popover.bottom > .arrow:after {\n content: \" \";\n top: 1px;\n margin-left: -10px;\n border-top-width: 0;\n border-bottom-color: #fff;\n}\n.popover.left > .arrow {\n top: 50%;\n right: -11px;\n margin-top: -11px;\n border-right-width: 0;\n border-left-color: #999999;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n.popover.left > .arrow:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: #fff;\n bottom: -10px;\n}\n.carousel {\n position: relative;\n}\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%;\n}\n.carousel-inner > .item {\n display: none;\n position: relative;\n -webkit-transition: 0.6s ease-in-out left;\n -o-transition: 0.6s ease-in-out left;\n transition: 0.6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n .carousel-inner > .item {\n -webkit-transition: -webkit-transform 0.6s ease-in-out;\n -moz-transition: -moz-transform 0.6s ease-in-out;\n -o-transition: -o-transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out;\n -webkit-backface-visibility: hidden;\n -moz-backface-visibility: hidden;\n backface-visibility: hidden;\n -webkit-perspective: 1000px;\n -moz-perspective: 1000px;\n perspective: 1000px;\n }\n .carousel-inner > .item.next,\n .carousel-inner > .item.active.right {\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.prev,\n .carousel-inner > .item.active.left {\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.next.left,\n .carousel-inner > .item.prev.right,\n .carousel-inner > .item.active {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n left: 0;\n }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n display: block;\n}\n.carousel-inner > .active {\n left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n}\n.carousel-inner > .next {\n left: 100%;\n}\n.carousel-inner > .prev {\n left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n left: 0;\n}\n.carousel-inner > .active.left {\n left: -100%;\n}\n.carousel-inner > .active.right {\n left: 100%;\n}\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 15%;\n opacity: 0.5;\n filter: alpha(opacity=50);\n font-size: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n background-color: rgba(0, 0, 0, 0);\n}\n.carousel-control.left {\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n}\n.carousel-control.right {\n left: auto;\n right: 0;\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n}\n.carousel-control:hover,\n.carousel-control:focus {\n outline: 0;\n color: #fff;\n text-decoration: none;\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n margin-top: -10px;\n z-index: 5;\n display: inline-block;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n width: 20px;\n height: 20px;\n line-height: 1;\n font-family: serif;\n}\n.carousel-control .icon-prev:before {\n content: '\\2039';\n}\n.carousel-control .icon-next:before {\n content: '\\203a';\n}\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center;\n}\n.carousel-indicators li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid #fff;\n border-radius: 10px;\n cursor: pointer;\n background-color: #000 \\9;\n background-color: rgba(0, 0, 0, 0);\n}\n.carousel-indicators .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: #fff;\n}\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-caption .btn {\n text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-prev,\n .carousel-control .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -10px;\n font-size: 30px;\n }\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .icon-prev {\n margin-left: -10px;\n }\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-next {\n margin-right: -10px;\n }\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px;\n }\n .carousel-indicators {\n bottom: 20px;\n }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-header:before,\n.modal-header:after,\n.modal-footer:before,\n.modal-footer:after {\n content: \" \";\n display: table;\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-header:after,\n.modal-footer:after {\n clear: both;\n}\n.center-block {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n.hidden {\n display: none !important;\n}\n.affix {\n position: fixed;\n}\n@-ms-viewport {\n width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n@media (max-width: 767px) {\n .visible-xs {\n display: block !important;\n }\n table.visible-xs {\n display: table !important;\n }\n tr.visible-xs {\n display: table-row !important;\n }\n th.visible-xs,\n td.visible-xs {\n display: table-cell !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-block {\n display: block !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline {\n display: inline !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm {\n display: block !important;\n }\n table.visible-sm {\n display: table !important;\n }\n tr.visible-sm {\n display: table-row !important;\n }\n th.visible-sm,\n td.visible-sm {\n display: table-cell !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-block {\n display: block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline {\n display: inline !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md {\n display: block !important;\n }\n table.visible-md {\n display: table !important;\n }\n tr.visible-md {\n display: table-row !important;\n }\n th.visible-md,\n td.visible-md {\n display: table-cell !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-block {\n display: block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline {\n display: inline !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg {\n display: block !important;\n }\n table.visible-lg {\n display: table !important;\n }\n tr.visible-lg {\n display: table-row !important;\n }\n th.visible-lg,\n td.visible-lg {\n display: table-cell !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-block {\n display: block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline {\n display: inline !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline-block {\n display: inline-block !important;\n }\n}\n@media (max-width: 767px) {\n .hidden-xs {\n display: none !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .hidden-sm {\n display: none !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .hidden-md {\n display: none !important;\n }\n}\n@media (min-width: 1200px) {\n .hidden-lg {\n display: none !important;\n }\n}\n.visible-print {\n display: none !important;\n}\n@media print {\n .visible-print {\n display: block !important;\n }\n table.visible-print {\n display: table !important;\n }\n tr.visible-print {\n display: table-row !important;\n }\n th.visible-print,\n td.visible-print {\n display: table-cell !important;\n }\n}\n.visible-print-block {\n display: none !important;\n}\n@media print {\n .visible-print-block {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n}\n@media print {\n .visible-print-inline {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n}\n@media print {\n .visible-print-inline-block {\n display: inline-block !important;\n }\n}\n@media print {\n .hidden-print {\n display: none !important;\n }\n}\n/*# sourceMappingURL=bootstrap.css.map */","/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS and IE text size adjust after device orientation change,\n// without disabling user zoom.\n//\n\nhtml {\n font-family: sans-serif; // 1\n -ms-text-size-adjust: 100%; // 2\n -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11\n// and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; // 1\n vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n background-color: transparent;\n}\n\n//\n// Improve readability of focused elements when they are also in an\n// active/hover state.\n//\n\na:active,\na:hover {\n outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n//\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n box-sizing: content-box;\n height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n// Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; // 1\n font: inherit; // 2\n margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n// and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n// `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; // 2\n cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; // 1\n padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome.\n//\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; // 1\n box-sizing: content-box; //2\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n border: 0; // 1\n padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n\n// ==========================================================================\n// Print styles.\n// Inlined to avoid the additional HTTP request: h5bp.com/r\n// ==========================================================================\n\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important; // Black prints faster: h5bp.com/s\n box-shadow: none !important;\n text-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n\n // Don't show links that are fragment identifiers,\n // or use the `javascript:` pseudo protocol\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group; // h5bp.com/t\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n img {\n max-width: 100% !important;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Bootstrap specific changes start\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .btn,\n .dropup > .btn {\n > .caret {\n border-top-color: #000 !important;\n }\n }\n .label {\n border: 1px solid #000;\n }\n\n .table {\n border-collapse: collapse !important;\n\n td,\n th {\n background-color: #fff !important;\n }\n }\n .table-bordered {\n th,\n td {\n border: 1px solid #ddd !important;\n }\n }\n\n // Bootstrap specific changes end\n}\n","//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// Star\n\n// Import the fonts\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('@{icon-font-path}@{icon-font-name}.eot');\n src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'),\n url('@{icon-font-path}@{icon-font-name}.woff2') format('woff2'),\n url('@{icon-font-path}@{icon-font-name}.woff') format('woff'),\n url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'),\n url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg');\n}\n\n// Catchall baseclass\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk { &:before { content: \"\\002a\"; } }\n.glyphicon-plus { &:before { content: \"\\002b\"; } }\n.glyphicon-euro,\n.glyphicon-eur { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil { &:before { content: \"\\270f\"; } }\n.glyphicon-glass { &:before { content: \"\\e001\"; } }\n.glyphicon-music { &:before { content: \"\\e002\"; } }\n.glyphicon-search { &:before { content: \"\\e003\"; } }\n.glyphicon-heart { &:before { content: \"\\e005\"; } }\n.glyphicon-star { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty { &:before { content: \"\\e007\"; } }\n.glyphicon-user { &:before { content: \"\\e008\"; } }\n.glyphicon-film { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large { &:before { content: \"\\e010\"; } }\n.glyphicon-th { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list { &:before { content: \"\\e012\"; } }\n.glyphicon-ok { &:before { content: \"\\e013\"; } }\n.glyphicon-remove { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out { &:before { content: \"\\e016\"; } }\n.glyphicon-off { &:before { content: \"\\e017\"; } }\n.glyphicon-signal { &:before { content: \"\\e018\"; } }\n.glyphicon-cog { &:before { content: \"\\e019\"; } }\n.glyphicon-trash { &:before { content: \"\\e020\"; } }\n.glyphicon-home { &:before { content: \"\\e021\"; } }\n.glyphicon-file { &:before { content: \"\\e022\"; } }\n.glyphicon-time { &:before { content: \"\\e023\"; } }\n.glyphicon-road { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt { &:before { content: \"\\e025\"; } }\n.glyphicon-download { &:before { content: \"\\e026\"; } }\n.glyphicon-upload { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt { &:before { content: \"\\e032\"; } }\n.glyphicon-lock { &:before { content: \"\\e033\"; } }\n.glyphicon-flag { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode { &:before { content: \"\\e040\"; } }\n.glyphicon-tag { &:before { content: \"\\e041\"; } }\n.glyphicon-tags { &:before { content: \"\\e042\"; } }\n.glyphicon-book { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark { &:before { content: \"\\e044\"; } }\n.glyphicon-print { &:before { content: \"\\e045\"; } }\n.glyphicon-camera { &:before { content: \"\\e046\"; } }\n.glyphicon-font { &:before { content: \"\\e047\"; } }\n.glyphicon-bold { &:before { content: \"\\e048\"; } }\n.glyphicon-italic { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify { &:before { content: \"\\e055\"; } }\n.glyphicon-list { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video { &:before { content: \"\\e059\"; } }\n.glyphicon-picture { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust { &:before { content: \"\\e063\"; } }\n.glyphicon-tint { &:before { content: \"\\e064\"; } }\n.glyphicon-edit { &:before { content: \"\\e065\"; } }\n.glyphicon-share { &:before { content: \"\\e066\"; } }\n.glyphicon-check { &:before { content: \"\\e067\"; } }\n.glyphicon-move { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward { &:before { content: \"\\e070\"; } }\n.glyphicon-backward { &:before { content: \"\\e071\"; } }\n.glyphicon-play { &:before { content: \"\\e072\"; } }\n.glyphicon-pause { &:before { content: \"\\e073\"; } }\n.glyphicon-stop { &:before { content: \"\\e074\"; } }\n.glyphicon-forward { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward { &:before { content: \"\\e077\"; } }\n.glyphicon-eject { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign { &:before { content: \"\\e101\"; } }\n.glyphicon-gift { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf { &:before { content: \"\\e103\"; } }\n.glyphicon-fire { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign { &:before { content: \"\\e107\"; } }\n.glyphicon-plane { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar { &:before { content: \"\\e109\"; } }\n.glyphicon-random { &:before { content: \"\\e110\"; } }\n.glyphicon-comment { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn { &:before { content: \"\\e122\"; } }\n.glyphicon-bell { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down { &:before { content: \"\\e134\"; } }\n.glyphicon-globe { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks { &:before { content: \"\\e137\"; } }\n.glyphicon-filter { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty { &:before { content: \"\\e143\"; } }\n.glyphicon-link { &:before { content: \"\\e144\"; } }\n.glyphicon-phone { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin { &:before { content: \"\\e146\"; } }\n.glyphicon-usd { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp { &:before { content: \"\\e149\"; } }\n.glyphicon-sort { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked { &:before { content: \"\\e157\"; } }\n.glyphicon-expand { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in { &:before { content: \"\\e161\"; } }\n.glyphicon-flash { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window { &:before { content: \"\\e164\"; } }\n.glyphicon-record { &:before { content: \"\\e165\"; } }\n.glyphicon-save { &:before { content: \"\\e166\"; } }\n.glyphicon-open { &:before { content: \"\\e167\"; } }\n.glyphicon-saved { &:before { content: \"\\e168\"; } }\n.glyphicon-import { &:before { content: \"\\e169\"; } }\n.glyphicon-export { &:before { content: \"\\e170\"; } }\n.glyphicon-send { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery { &:before { content: \"\\e179\"; } }\n.glyphicon-header { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt { &:before { content: \"\\e183\"; } }\n.glyphicon-tower { &:before { content: \"\\e184\"; } }\n.glyphicon-stats { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1 { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1 { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1 { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous { &:before { content: \"\\e200\"; } }\n.glyphicon-cd { &:before { content: \"\\e201\"; } }\n.glyphicon-save-file { &:before { content: \"\\e202\"; } }\n.glyphicon-open-file { &:before { content: \"\\e203\"; } }\n.glyphicon-level-up { &:before { content: \"\\e204\"; } }\n.glyphicon-copy { &:before { content: \"\\e205\"; } }\n.glyphicon-paste { &:before { content: \"\\e206\"; } }\n// The following 2 Glyphicons are omitted for the time being because\n// they currently use Unicode codepoints that are outside the\n// Basic Multilingual Plane (BMP). Older buggy versions of WebKit can't handle\n// non-BMP codepoints in CSS string escapes, and thus can't display these two icons.\n// Notably, the bug affects some older versions of the Android Browser.\n// More info: https://github.com/twbs/bootstrap/issues/10106\n// .glyphicon-door { &:before { content: \"\\1f6aa\"; } }\n// .glyphicon-key { &:before { content: \"\\1f511\"; } }\n.glyphicon-alert { &:before { content: \"\\e209\"; } }\n.glyphicon-equalizer { &:before { content: \"\\e210\"; } }\n.glyphicon-king { &:before { content: \"\\e211\"; } }\n.glyphicon-queen { &:before { content: \"\\e212\"; } }\n.glyphicon-pawn { &:before { content: \"\\e213\"; } }\n.glyphicon-bishop { &:before { content: \"\\e214\"; } }\n.glyphicon-knight { &:before { content: \"\\e215\"; } }\n.glyphicon-baby-formula { &:before { content: \"\\e216\"; } }\n.glyphicon-tent { &:before { content: \"\\26fa\"; } }\n.glyphicon-blackboard { &:before { content: \"\\e218\"; } }\n.glyphicon-bed { &:before { content: \"\\e219\"; } }\n.glyphicon-apple { &:before { content: \"\\f8ff\"; } }\n.glyphicon-erase { &:before { content: \"\\e221\"; } }\n.glyphicon-hourglass { &:before { content: \"\\231b\"; } }\n.glyphicon-lamp { &:before { content: \"\\e223\"; } }\n.glyphicon-duplicate { &:before { content: \"\\e224\"; } }\n.glyphicon-piggy-bank { &:before { content: \"\\e225\"; } }\n.glyphicon-scissors { &:before { content: \"\\e226\"; } }\n.glyphicon-bitcoin { &:before { content: \"\\e227\"; } }\n.glyphicon-btc { &:before { content: \"\\e227\"; } }\n.glyphicon-xbt { &:before { content: \"\\e227\"; } }\n.glyphicon-yen { &:before { content: \"\\00a5\"; } }\n.glyphicon-jpy { &:before { content: \"\\00a5\"; } }\n.glyphicon-ruble { &:before { content: \"\\20bd\"; } }\n.glyphicon-rub { &:before { content: \"\\20bd\"; } }\n.glyphicon-scale { &:before { content: \"\\e230\"; } }\n.glyphicon-ice-lolly { &:before { content: \"\\e231\"; } }\n.glyphicon-ice-lolly-tasted { &:before { content: \"\\e232\"; } }\n.glyphicon-education { &:before { content: \"\\e233\"; } }\n.glyphicon-option-horizontal { &:before { content: \"\\e234\"; } }\n.glyphicon-option-vertical { &:before { content: \"\\e235\"; } }\n.glyphicon-menu-hamburger { &:before { content: \"\\e236\"; } }\n.glyphicon-modal-window { &:before { content: \"\\e237\"; } }\n.glyphicon-oil { &:before { content: \"\\e238\"; } }\n.glyphicon-grain { &:before { content: \"\\e239\"; } }\n.glyphicon-sunglasses { &:before { content: \"\\e240\"; } }\n.glyphicon-text-size { &:before { content: \"\\e241\"; } }\n.glyphicon-text-color { &:before { content: \"\\e242\"; } }\n.glyphicon-text-background { &:before { content: \"\\e243\"; } }\n.glyphicon-object-align-top { &:before { content: \"\\e244\"; } }\n.glyphicon-object-align-bottom { &:before { content: \"\\e245\"; } }\n.glyphicon-object-align-horizontal{ &:before { content: \"\\e246\"; } }\n.glyphicon-object-align-left { &:before { content: \"\\e247\"; } }\n.glyphicon-object-align-vertical { &:before { content: \"\\e248\"; } }\n.glyphicon-object-align-right { &:before { content: \"\\e249\"; } }\n.glyphicon-triangle-right { &:before { content: \"\\e250\"; } }\n.glyphicon-triangle-left { &:before { content: \"\\e251\"; } }\n.glyphicon-triangle-bottom { &:before { content: \"\\e252\"; } }\n.glyphicon-triangle-top { &:before { content: \"\\e253\"; } }\n.glyphicon-console { &:before { content: \"\\e254\"; } }\n.glyphicon-superscript { &:before { content: \"\\e255\"; } }\n.glyphicon-subscript { &:before { content: \"\\e256\"; } }\n.glyphicon-menu-left { &:before { content: \"\\e257\"; } }\n.glyphicon-menu-right { &:before { content: \"\\e258\"; } }\n.glyphicon-menu-down { &:before { content: \"\\e259\"; } }\n.glyphicon-menu-up { &:before { content: \"\\e260\"; } }\n","//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// http://getbootstrap.com/getting-started/#third-box-sizing\n* {\n .box-sizing(border-box);\n}\n*:before,\n*:after {\n .box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n}\n\nbody {\n font-family: @font-family-base;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @text-color;\n background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n\n// Links\n\na {\n color: @link-color;\n text-decoration: none;\n\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n }\n\n &:focus {\n .tab-focus();\n }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n margin: 0;\n}\n\n\n// Images\n\nimg {\n vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n padding: @thumbnail-padding;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(all .2s ease-in-out);\n\n // Keep them at most 100% wide\n .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n margin-top: @line-height-computed;\n margin-bottom: @line-height-computed;\n border: 0;\n border-top: 1px solid @hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0,0,0,0);\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n// Useful for \"Skip to main content\" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n }\n}\n\n\n// iOS \"clickable elements\" fix for role=\"button\"\n//\n// Fixes \"clickability\" issue (and more generally, the firing of events such as focus as well)\n// for traditionally non-focusable elements with role=\"button\"\n// see https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n[role=\"button\"] {\n cursor: pointer;\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// WebKit-style focus\n\n.tab-focus() {\n // WebKit-specific. Other browsers will keep their default outline style.\n // (Initially tried to also force default via `outline: initial`,\n // but that seems to erroneously remove the outline in Firefox altogether.)\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n.img-responsive(@display: block) {\n display: @display;\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size. Note that the\n// spelling of `min--moz-device-pixel-ratio` is intentional.\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n","//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n font-family: @headings-font-family;\n font-weight: @headings-font-weight;\n line-height: @headings-line-height;\n color: @headings-color;\n\n small,\n .small {\n font-weight: normal;\n line-height: 1;\n color: @headings-small-color;\n }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n margin-top: @line-height-computed;\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 65%;\n }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n margin-top: (@line-height-computed / 2);\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 75%;\n }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n margin-bottom: @line-height-computed;\n font-size: floor((@font-size-base * 1.15));\n font-weight: 300;\n line-height: 1.4;\n\n @media (min-width: @screen-sm-min) {\n font-size: (@font-size-base * 1.5);\n }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: (12px small font / 14px base font) * 100% = about 85%\nsmall,\n.small {\n font-size: floor((100% * @font-size-small / @font-size-base));\n}\n\nmark,\n.mark {\n background-color: @state-warning-bg;\n padding: .2em;\n}\n\n// Alignment\n.text-left { text-align: left; }\n.text-right { text-align: right; }\n.text-center { text-align: center; }\n.text-justify { text-align: justify; }\n.text-nowrap { white-space: nowrap; }\n\n// Transformation\n.text-lowercase { text-transform: lowercase; }\n.text-uppercase { text-transform: uppercase; }\n.text-capitalize { text-transform: capitalize; }\n\n// Contextual colors\n.text-muted {\n color: @text-muted;\n}\n.text-primary {\n .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n // Given the contrast here, this is the only class to have its color inverted\n // automatically.\n color: #fff;\n .bg-variant(@brand-primary);\n}\n.bg-success {\n .bg-variant(@state-success-bg);\n}\n.bg-info {\n .bg-variant(@state-info-bg);\n}\n.bg-warning {\n .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n padding-bottom: ((@line-height-computed / 2) - 1);\n margin: (@line-height-computed * 2) 0 @line-height-computed;\n border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// -------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n margin-top: 0;\n margin-bottom: (@line-height-computed / 2);\n ul,\n ol {\n margin-bottom: 0;\n }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n .list-unstyled();\n margin-left: -5px;\n\n > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n }\n}\n\n// Description Lists\ndl {\n margin-top: 0; // Remove browser default\n margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n line-height: @line-height-base;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n.dl-horizontal {\n dd {\n &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n }\n\n @media (min-width: @dl-horizontal-breakpoint) {\n dt {\n float: left;\n width: (@dl-horizontal-offset - 20);\n clear: left;\n text-align: right;\n .text-overflow();\n }\n dd {\n margin-left: @dl-horizontal-offset;\n }\n }\n}\n\n\n// Misc\n// -------------------------\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted @abbr-border-color;\n}\n.initialism {\n font-size: 90%;\n .text-uppercase();\n}\n\n// Blockquotes\nblockquote {\n padding: (@line-height-computed / 2) @line-height-computed;\n margin: 0 0 @line-height-computed;\n font-size: @blockquote-font-size;\n border-left: 5px solid @blockquote-border-color;\n\n p,\n ul,\n ol {\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n // Note: Deprecated small and .small as of v3.1.0\n // Context: https://github.com/twbs/bootstrap/issues/11660\n footer,\n small,\n .small {\n display: block;\n font-size: 80%; // back to default font-size\n line-height: @line-height-base;\n color: @blockquote-small-color;\n\n &:before {\n content: '\\2014 \\00A0'; // em dash, nbsp\n }\n }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid @blockquote-border-color;\n border-left: 0;\n text-align: right;\n\n // Account for citation\n footer,\n small,\n .small {\n &:before { content: ''; }\n &:after {\n content: '\\00A0 \\2014'; // nbsp, em dash\n }\n }\n}\n\n// Addresses\naddress {\n margin-bottom: @line-height-computed;\n font-style: normal;\n line-height: @line-height-base;\n}\n","// Typography\n\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover,\n a&:focus {\n color: darken(@color, 10%);\n }\n}\n","// Contextual backgrounds\n\n.bg-variant(@color) {\n background-color: @color;\n a&:hover,\n a&:focus {\n background-color: darken(@color, 10%);\n }\n}\n","// Text overflow\n// Requires inline-block or block for proper styling\n\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: @code-color;\n background-color: @code-bg;\n border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: @kbd-color;\n background-color: @kbd-bg;\n border-radius: @border-radius-small;\n box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n\n kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n }\n}\n\n// Blocks of code\npre {\n display: block;\n padding: ((@line-height-computed - 1) / 2);\n margin: 0 0 (@line-height-computed / 2);\n font-size: (@font-size-base - 1); // 14px to 13px\n line-height: @line-height-base;\n word-break: break-all;\n word-wrap: break-word;\n color: @pre-color;\n background-color: @pre-bg;\n border: 1px solid @pre-border-color;\n border-radius: @border-radius-base;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: @pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n .container-fixed();\n\n @media (min-width: @screen-sm-min) {\n width: @container-sm;\n }\n @media (min-width: @screen-md-min) {\n width: @container-md;\n }\n @media (min-width: @screen-lg-min) {\n width: @container-lg;\n }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n .make-row();\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n .make-grid(lg);\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n.container-fixed(@gutter: @grid-gutter-width) {\n margin-right: auto;\n margin-left: auto;\n padding-left: floor((@gutter / 2));\n padding-right: ceil((@gutter / 2));\n &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-left: ceil((@gutter / -2));\n margin-right: floor((@gutter / -2));\n &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n margin-left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-push(@columns) {\n left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-pull(@columns) {\n right: percentage((@columns / @grid-columns));\n}\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-md-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: ceil((@grid-gutter-width / 2));\n padding-right: floor((@grid-gutter-width / 2));\n }\n }\n .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n .col(@index) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {\n .col-@{class}-push-0 {\n left: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {\n .col-@{class}-pull-0 {\n right: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n .calc-grid-column(@index, @class, @type);\n // next iteration\n .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n .float-grid-columns(@class);\n .loop-grid-columns(@grid-columns, @class, width);\n .loop-grid-columns(@grid-columns, @class, pull);\n .loop-grid-columns(@grid-columns, @class, push);\n .loop-grid-columns(@grid-columns, @class, offset);\n}\n","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n background-color: @table-bg;\n}\ncaption {\n padding-top: @table-cell-padding;\n padding-bottom: @table-cell-padding;\n color: @text-muted;\n text-align: left;\n}\nth {\n text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: @line-height-computed;\n // Cells\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-cell-padding;\n line-height: @line-height-base;\n vertical-align: top;\n border-top: 1px solid @table-border-color;\n }\n }\n }\n // Bottom align for column headings\n > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid @table-border-color;\n }\n // Remove top border from thead by default\n > caption + thead,\n > colgroup + thead,\n > thead:first-child {\n > tr:first-child {\n > th,\n > td {\n border-top: 0;\n }\n }\n }\n // Account for multiple tbody instances\n > tbody + tbody {\n border-top: 2px solid @table-border-color;\n }\n\n // Nesting\n .table {\n background-color: @body-bg;\n }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-condensed-cell-padding;\n }\n }\n }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n border: 1px solid @table-border-color;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n border: 1px solid @table-border-color;\n }\n }\n }\n > thead > tr {\n > th,\n > td {\n border-bottom-width: 2px;\n }\n }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n > tbody > tr:nth-of-type(odd) {\n background-color: @table-bg-accent;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover {\n background-color: @table-bg-hover;\n }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-column;\n}\ntable {\n td,\n th {\n &[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-cell;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%; // Workaround for IE9 bug (see https://github.com/twbs/bootstrap/issues/14837)\n\n @media screen and (max-width: @screen-xs-max) {\n width: 100%;\n margin-bottom: (@line-height-computed * 0.75);\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid @table-border-color;\n\n // Tighten up spacing\n > .table {\n margin-bottom: 0;\n\n // Ensure the content doesn't wrap\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n white-space: nowrap;\n }\n }\n }\n }\n\n // Special overrides for the bordered tables\n > .table-bordered {\n border: 0;\n\n // Nuke the appropriate borders so that the parent can handle them\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n\n // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n // chances are there will be only one `tr` in a `thead` and that would\n // remove the border altogether.\n > tbody,\n > tfoot {\n > tr:last-child {\n > th,\n > td {\n border-bottom: 0;\n }\n }\n }\n\n }\n }\n}\n","// Tables\n\n.table-row-variant(@state; @background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{state}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &:hover > .@{state},\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n // so we reset that to ensure it behaves more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359.\n min-width: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: @line-height-computed;\n font-size: (@font-size-base * 1.5);\n line-height: inherit;\n color: @legend-color;\n border: 0;\n border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n display: inline-block;\n max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n margin-bottom: 5px;\n font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9; // IE8-9\n line-height: normal;\n}\n\ninput[type=\"file\"] {\n display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n .tab-focus();\n}\n\n// Adjust output element\noutput {\n display: block;\n padding-top: (@padding-base-vertical + 1);\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n display: block;\n width: 100%;\n height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n background-color: @input-bg;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid @input-border;\n border-radius: @input-border-radius; // Note: This has no effect on s in CSS.\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n // Customize the `:focus` state to imitate native WebKit styles.\n .form-control-focus();\n\n // Placeholder\n .placeholder();\n\n // Unstyle the caret on ``\n// element gets special love because it's special, and that's a fact!\n.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n height: @input-height;\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n\n select& {\n height: @input-height;\n line-height: @input-height;\n }\n\n textarea&,\n select[multiple]& {\n height: auto;\n }\n}\n","//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n.btn {\n display: inline-block;\n margin-bottom: 0; // For input.btn\n font-weight: @btn-font-weight;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n white-space: nowrap;\n .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @btn-border-radius-base);\n .user-select(none);\n\n &,\n &:active,\n &.active {\n &:focus,\n &.focus {\n .tab-focus();\n }\n }\n\n &:hover,\n &:focus,\n &.focus {\n color: @btn-default-color;\n text-decoration: none;\n }\n\n &:active,\n &.active {\n outline: 0;\n background-image: none;\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n .opacity(.65);\n .box-shadow(none);\n }\n\n a& {\n &.disabled,\n fieldset[disabled] & {\n pointer-events: none; // Future-proof disabling of clicks on `` elements\n }\n }\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);\n}\n.btn-primary {\n .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);\n}\n// Success appears as green\n.btn-success {\n .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);\n}\n// Warning appears as orange\n.btn-warning {\n .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n color: @link-color;\n font-weight: normal;\n border-radius: 0;\n\n &,\n &:active,\n &.active,\n &[disabled],\n fieldset[disabled] & {\n background-color: transparent;\n .box-shadow(none);\n }\n &,\n &:hover,\n &:focus,\n &:active {\n border-color: transparent;\n }\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n background-color: transparent;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @btn-link-disabled-color;\n text-decoration: none;\n }\n }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n // line-height: ensure even-numbered height of button next to large input\n .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @btn-border-radius-large);\n}\n.btn-sm {\n // line-height: ensure proper height of button next to small input\n .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small);\n}\n.btn-xs {\n .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small);\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n &.btn-block {\n width: 100%;\n }\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n.button-variant(@color; @background; @border) {\n color: @color;\n background-color: @background;\n border-color: @border;\n\n &:focus,\n &.focus {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 25%);\n }\n &:hover {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 12%);\n }\n &:active,\n &.active,\n .open > .dropdown-toggle& {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 12%);\n\n &:hover,\n &:focus,\n &.focus {\n color: @color;\n background-color: darken(@background, 17%);\n border-color: darken(@border, 25%);\n }\n }\n &:active,\n &.active,\n .open > .dropdown-toggle& {\n background-image: none;\n }\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus,\n &.focus {\n background-color: @background;\n border-color: @border;\n }\n }\n\n .badge {\n color: @background;\n background-color: @color;\n }\n}\n\n// Button sizes\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n}\n","// Opacity\n\n.opacity(@opacity) {\n opacity: @opacity;\n // IE8 filter\n @opacity-ie: (@opacity * 100);\n filter: ~\"alpha(opacity=@{opacity-ie})\";\n}\n","//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.\n\n.fade {\n opacity: 0;\n .transition(opacity .15s linear);\n &.in {\n opacity: 1;\n }\n}\n\n.collapse {\n display: none;\n\n &.in { display: block; }\n tr&.in { display: table-row; }\n tbody&.in { display: table-row-group; }\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n .transition-property(~\"height, visibility\");\n .transition-duration(.35s);\n .transition-timing-function(ease);\n}\n","//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: @caret-width-base dashed;\n border-top: @caret-width-base solid ~\"\\9\"; // IE8\n border-right: @caret-width-base solid transparent;\n border-left: @caret-width-base solid transparent;\n}\n\n// The dropdown wrapper (div)\n.dropup,\n.dropdown {\n position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: @zindex-dropdown;\n display: none; // none by default, but block on \"open\" of the menu\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0; // override default ul\n list-style: none;\n font-size: @font-size-base;\n text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n background-color: @dropdown-bg;\n border: 1px solid @dropdown-fallback-border; // IE8 fallback\n border: 1px solid @dropdown-border;\n border-radius: @border-radius-base;\n .box-shadow(0 6px 12px rgba(0,0,0,.175));\n background-clip: padding-box;\n\n // Aligns the dropdown menu to right\n //\n // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`\n &.pull-right {\n right: 0;\n left: auto;\n }\n\n // Dividers (basically an hr) within the dropdown\n .divider {\n .nav-divider(@dropdown-divider-bg);\n }\n\n // Links within the dropdown menu\n > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: @line-height-base;\n color: @dropdown-link-color;\n white-space: nowrap; // prevent links from randomly breaking onto new lines\n }\n}\n\n// Hover/Focus state\n.dropdown-menu > li > a {\n &:hover,\n &:focus {\n text-decoration: none;\n color: @dropdown-link-hover-color;\n background-color: @dropdown-link-hover-bg;\n }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-active-color;\n text-decoration: none;\n outline: 0;\n background-color: @dropdown-link-active-bg;\n }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-disabled-color;\n }\n\n // Nuke hover/focus effects\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none; // Remove CSS gradient\n .reset-filter();\n cursor: @cursor-disabled;\n }\n}\n\n// Open state for the dropdown\n.open {\n // Show the menu\n > .dropdown-menu {\n display: block;\n }\n\n // Remove the outline when :focus is triggered\n > a {\n outline: 0;\n }\n}\n\n// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n left: auto; // Reset the default from `.dropdown-menu`\n right: 0;\n}\n// With v3, we enabled auto-flipping if you have a dropdown within a right\n// aligned nav component. To enable the undoing of that, we provide an override\n// to restore the default dropdown menu alignment.\n//\n// This is only for left-aligning a dropdown menu within a `.navbar-right` or\n// `.pull-right` nav component.\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n\n// Dropdown section headers\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: @font-size-small;\n line-height: @line-height-base;\n color: @dropdown-header-color;\n white-space: nowrap; // as with > li > a\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: (@zindex-dropdown - 10);\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n // Reverse the caret\n .caret {\n border-top: 0;\n border-bottom: @caret-width-base dashed;\n border-bottom: @caret-width-base solid ~\"\\9\"; // IE8\n content: \"\";\n }\n // Different positioning for bottom up menu\n .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-right {\n .dropdown-menu {\n .dropdown-menu-right();\n }\n // Necessary for overrides of the default right aligned menu.\n // Will remove come v4 in all likelihood.\n .dropdown-menu-left {\n .dropdown-menu-left();\n }\n }\n}\n","// Horizontal dividers\n//\n// Dividers (basically an hr) within dropdowns and nav lists\n\n.nav-divider(@color: #e5e5e5) {\n height: 1px;\n margin: ((@line-height-computed / 2) - 1) 0;\n overflow: hidden;\n background-color: @color;\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n","//\n// Button groups\n// --------------------------------------------------\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle; // match .btn alignment given font-size hack above\n > .btn {\n position: relative;\n float: left;\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active,\n &.active {\n z-index: 2;\n }\n }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n .btn + .btn,\n .btn + .btn-group,\n .btn-group + .btn,\n .btn-group + .btn-group {\n margin-left: -1px;\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n margin-left: -5px; // Offset the first child's margin\n &:extend(.clearfix all);\n\n .btn,\n .btn-group,\n .input-group {\n float: left;\n }\n > .btn,\n > .btn-group,\n > .input-group {\n margin-left: 5px;\n }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n margin-left: 0;\n &:not(:last-child):not(.dropdown-toggle) {\n .border-right-radius(0);\n }\n}\n// Need .dropdown-toggle since :last-child doesn't apply, given that a .dropdown-menu is used immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n .border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-right-radius(0);\n }\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n .border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { &:extend(.btn-xs); }\n.btn-group-sm > .btn { &:extend(.btn-sm); }\n.btn-group-lg > .btn { &:extend(.btn-lg); }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n .box-shadow(none);\n }\n}\n\n\n// Reposition the caret\n.btn .caret {\n margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n border-width: @caret-width-large @caret-width-large 0;\n border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n border-width: 0 @caret-width-large @caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n > .btn,\n > .btn-group,\n > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n }\n\n // Clear floats so dropdown menus can be properly placed\n > .btn-group {\n &:extend(.clearfix all);\n > .btn {\n float: none;\n }\n }\n\n > .btn + .btn,\n > .btn + .btn-group,\n > .btn-group + .btn,\n > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n }\n}\n\n.btn-group-vertical > .btn {\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n &:first-child:not(:last-child) {\n .border-top-radius(@btn-border-radius-base);\n .border-bottom-radius(0);\n }\n &:last-child:not(:first-child) {\n .border-top-radius(0);\n .border-bottom-radius(@btn-border-radius-base);\n }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-bottom-radius(0);\n }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n .border-top-radius(0);\n}\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n > .btn,\n > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n }\n > .btn-group .btn {\n width: 100%;\n }\n\n > .btn-group .dropdown-menu {\n left: auto;\n }\n}\n\n\n// Checkbox and radio options\n//\n// In order to support the browser's form validation feedback, powered by the\n// `required` attribute, we have to \"hide\" the inputs via `clip`. We cannot use\n// `display: none;` or `visibility: hidden;` as that also hides the popover.\n// Simply visually hiding the inputs via `opacity` would leave them clickable in\n// certain cases which is prevented by using `clip` and `pointer-events`.\n// This way, we ensure a DOM element is visible to position the popover from.\n//\n// See https://github.com/twbs/bootstrap/pull/12794 and\n// https://github.com/twbs/bootstrap/pull/14559 for more information.\n\n[data-toggle=\"buttons\"] {\n > .btn,\n > .btn-group > .btn {\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0,0,0,0);\n pointer-events: none;\n }\n }\n}\n","// Single side border-radius\n\n.border-top-radius(@radius) {\n border-top-right-radius: @radius;\n border-top-left-radius: @radius;\n}\n.border-right-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-top-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n border-bottom-left-radius: @radius;\n border-top-left-radius: @radius;\n}\n","//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n position: relative; // For dropdowns\n display: table;\n border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n // Undo padding and float of grid classes\n &[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n }\n\n .form-control {\n // Ensure that the input is always above the *appended* addon button for\n // proper border colors.\n position: relative;\n z-index: 2;\n\n // IE9 fubars the placeholder attribute in text inputs and the arrows on\n // select elements in input groups. To fix it, we float the input. Details:\n // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855\n float: left;\n\n width: 100%;\n margin-bottom: 0;\n\n &:focus {\n z-index: 3;\n }\n }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n .input-lg();\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n .input-sm();\n}\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n font-weight: normal;\n line-height: 1;\n color: @input-color;\n text-align: center;\n background-color: @input-group-addon-bg;\n border: 1px solid @input-group-addon-border-color;\n border-radius: @input-border-radius;\n\n // Sizing\n &.input-sm {\n padding: @padding-small-vertical @padding-small-horizontal;\n font-size: @font-size-small;\n border-radius: @input-border-radius-small;\n }\n &.input-lg {\n padding: @padding-large-vertical @padding-large-horizontal;\n font-size: @font-size-large;\n border-radius: @input-border-radius-large;\n }\n\n // Nuke default margins from checkboxes and radios to vertically center within.\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n margin-top: 0;\n }\n}\n\n// Reset rounded corners\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n .border-right-radius(0);\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n .border-left-radius(0);\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n position: relative;\n // Jankily prevent input button groups from wrapping with `white-space` and\n // `font-size` in combination with `inline-block` on buttons.\n font-size: 0;\n white-space: nowrap;\n\n // Negative margin for spacing, position for bringing hovered/focused/actived\n // element above the siblings.\n > .btn {\n position: relative;\n + .btn {\n margin-left: -1px;\n }\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active {\n z-index: 2;\n }\n }\n\n // Negative margin to only have a 1px border between the two\n &:first-child {\n > .btn,\n > .btn-group {\n margin-right: -1px;\n }\n }\n &:last-child {\n > .btn,\n > .btn-group {\n z-index: 2;\n margin-left: -1px;\n }\n }\n}\n","//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n margin-bottom: 0;\n padding-left: 0; // Override default ul/ol\n list-style: none;\n &:extend(.clearfix all);\n\n > li {\n position: relative;\n display: block;\n\n > a {\n position: relative;\n display: block;\n padding: @nav-link-padding;\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: @nav-link-hover-bg;\n }\n }\n\n // Disabled state sets text to gray and nukes hover/tab effects\n &.disabled > a {\n color: @nav-disabled-link-color;\n\n &:hover,\n &:focus {\n color: @nav-disabled-link-hover-color;\n text-decoration: none;\n background-color: transparent;\n cursor: @cursor-disabled;\n }\n }\n }\n\n // Open dropdowns\n .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @nav-link-hover-bg;\n border-color: @link-color;\n }\n }\n\n // Nav dividers (deprecated with v3.0.1)\n //\n // This should have been removed in v3 with the dropping of `.nav-list`, but\n // we missed it. We don't currently support this anywhere, but in the interest\n // of maintaining backward compatibility in case you use it, it's deprecated.\n .nav-divider {\n .nav-divider();\n }\n\n // Prevent IE8 from misplacing imgs\n //\n // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n > li > a > img {\n max-width: none;\n }\n}\n\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n border-bottom: 1px solid @nav-tabs-border-color;\n > li {\n float: left;\n // Make the list-items overlay the bottom border\n margin-bottom: -1px;\n\n // Actual tabs (as links)\n > a {\n margin-right: 2px;\n line-height: @line-height-base;\n border: 1px solid transparent;\n border-radius: @border-radius-base @border-radius-base 0 0;\n &:hover {\n border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;\n }\n }\n\n // Active state, and its :hover to override normal :hover\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-tabs-active-link-hover-color;\n background-color: @nav-tabs-active-link-hover-bg;\n border: 1px solid @nav-tabs-active-link-hover-border-color;\n border-bottom-color: transparent;\n cursor: default;\n }\n }\n }\n // pulling this in mainly for less shorthand\n &.nav-justified {\n .nav-justified();\n .nav-tabs-justified();\n }\n}\n\n\n// Pills\n// -------------------------\n.nav-pills {\n > li {\n float: left;\n\n // Links rendered as pills\n > a {\n border-radius: @nav-pills-border-radius;\n }\n + li {\n margin-left: 2px;\n }\n\n // Active state\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-pills-active-link-hover-color;\n background-color: @nav-pills-active-link-hover-bg;\n }\n }\n }\n}\n\n\n// Stacked pills\n.nav-stacked {\n > li {\n float: none;\n + li {\n margin-top: 2px;\n margin-left: 0; // no need for this gap between nav items\n }\n }\n}\n\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n width: 100%;\n\n > li {\n float: none;\n > a {\n text-align: center;\n margin-bottom: 5px;\n }\n }\n\n > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n }\n\n @media (min-width: @screen-sm-min) {\n > li {\n display: table-cell;\n width: 1%;\n > a {\n margin-bottom: 0;\n }\n }\n }\n}\n\n// Move borders to anchors instead of bottom of list\n//\n// Mixin for adding on top the shared `.nav-justified` styles for our tabs\n.nav-tabs-justified {\n border-bottom: 0;\n\n > li > a {\n // Override margin from .nav-tabs\n margin-right: 0;\n border-radius: @border-radius-base;\n }\n\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border: 1px solid @nav-tabs-justified-link-border-color;\n }\n\n @media (min-width: @screen-sm-min) {\n > li > a {\n border-bottom: 1px solid @nav-tabs-justified-link-border-color;\n border-radius: @border-radius-base @border-radius-base 0 0;\n }\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border-bottom-color: @nav-tabs-justified-active-link-border-color;\n }\n }\n}\n\n\n// Tabbable tabs\n// -------------------------\n\n// Hide tabbable panes to start, show them when `.active`\n.tab-content {\n > .tab-pane {\n display: none;\n }\n > .active {\n display: block;\n }\n}\n\n\n// Dropdowns\n// -------------------------\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n // make dropdown border overlap tab border\n margin-top: -1px;\n // Remove the top rounded corners here since there is a hard edge above the menu\n .border-top-radius(0);\n}\n","//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n position: relative;\n min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n margin-bottom: @navbar-margin-bottom;\n border: 1px solid transparent;\n\n // Prevent floats from breaking the navbar\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: @navbar-border-radius;\n }\n}\n\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n }\n}\n\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n overflow-x: visible;\n padding-right: @navbar-padding-horizontal;\n padding-left: @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255,255,255,.1);\n &:extend(.clearfix all);\n -webkit-overflow-scrolling: touch;\n\n &.in {\n overflow-y: auto;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border-top: 0;\n box-shadow: none;\n\n &.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0; // Override default setting\n overflow: visible !important;\n }\n\n &.in {\n overflow-y: visible;\n }\n\n // Undo the collapse side padding for navbars with containers to ensure\n // alignment of right-aligned contents.\n .navbar-fixed-top &,\n .navbar-static-top &,\n .navbar-fixed-bottom & {\n padding-left: 0;\n padding-right: 0;\n }\n }\n}\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n .navbar-collapse {\n max-height: @navbar-collapse-max-height;\n\n @media (max-device-width: @screen-xs-min) and (orientation: landscape) {\n max-height: 200px;\n }\n }\n}\n\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container,\n.container-fluid {\n > .navbar-header,\n > .navbar-collapse {\n margin-right: -@navbar-padding-horizontal;\n margin-left: -@navbar-padding-horizontal;\n\n @media (min-width: @grid-float-breakpoint) {\n margin-right: 0;\n margin-left: 0;\n }\n }\n}\n\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirety of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n z-index: @zindex-navbar;\n border-width: 0 0 1px;\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n\n// Fix the top/bottom navbars when screen real estate supports it\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: @zindex-navbar-fixed;\n\n // Undo the rounded corners\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0; // override .navbar defaults\n border-width: 1px 0 0;\n}\n\n\n// Brand/project name\n\n.navbar-brand {\n float: left;\n padding: @navbar-padding-vertical @navbar-padding-horizontal;\n font-size: @font-size-large;\n line-height: @line-height-computed;\n height: @navbar-height;\n\n &:hover,\n &:focus {\n text-decoration: none;\n }\n\n > img {\n display: block;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n .navbar > .container &,\n .navbar > .container-fluid & {\n margin-left: -@navbar-padding-horizontal;\n }\n }\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: @navbar-padding-horizontal;\n padding: 9px 10px;\n .navbar-vertical-align(34px);\n background-color: transparent;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n border-radius: @border-radius-base;\n\n // We remove the `outline` here, but later compensate by attaching `:hover`\n // styles to `:focus`.\n &:focus {\n outline: 0;\n }\n\n // Bars\n .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n }\n .icon-bar + .icon-bar {\n margin-top: 4px;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n display: none;\n }\n}\n\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with its own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;\n\n > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: @line-height-computed;\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n > li > a,\n .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n > li > a {\n line-height: @line-height-computed;\n &:hover,\n &:focus {\n background-image: none;\n }\n }\n }\n }\n\n // Uncollapse the nav\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin: 0;\n\n > li {\n float: left;\n > a {\n padding-top: @navbar-padding-vertical;\n padding-bottom: @navbar-padding-vertical;\n }\n }\n }\n}\n\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n margin-left: -@navbar-padding-horizontal;\n margin-right: -@navbar-padding-horizontal;\n padding: 10px @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n\n // Mixin behavior for optimum display\n .form-inline();\n\n .form-group {\n @media (max-width: @grid-float-breakpoint-max) {\n margin-bottom: 5px;\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n }\n\n // Vertically center in expanded, horizontal navbar\n .navbar-vertical-align(@input-height-base);\n\n // Undo 100% width for pull classes\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n .box-shadow(none);\n }\n}\n\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n .border-top-radius(0);\n}\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n .border-top-radius(@navbar-border-radius);\n .border-bottom-radius(0);\n}\n\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n .navbar-vertical-align(@input-height-base);\n\n &.btn-sm {\n .navbar-vertical-align(@input-height-small);\n }\n &.btn-xs {\n .navbar-vertical-align(22);\n }\n}\n\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n .navbar-vertical-align(@line-height-computed);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin-left: @navbar-padding-horizontal;\n margin-right: @navbar-padding-horizontal;\n }\n}\n\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specificity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n//\n// Declared after the navbar components to ensure more specificity on the margins.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-left { .pull-left(); }\n .navbar-right {\n .pull-right();\n margin-right: -@navbar-padding-horizontal;\n\n ~ .navbar-right {\n margin-right: 0;\n }\n }\n}\n\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n background-color: @navbar-default-bg;\n border-color: @navbar-default-border;\n\n .navbar-brand {\n color: @navbar-default-brand-color;\n &:hover,\n &:focus {\n color: @navbar-default-brand-hover-color;\n background-color: @navbar-default-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-default-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-default-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n\n .navbar-toggle {\n border-color: @navbar-default-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-default-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-default-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: @navbar-default-border;\n }\n\n // Dropdown menu items\n .navbar-nav {\n // Remove background color from open dropdown\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-default-link-active-bg;\n color: @navbar-default-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n > li > a {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n }\n }\n\n\n // Links in navbars\n //\n // Add a class to ensure links outside the navbar nav are colored correctly.\n\n .navbar-link {\n color: @navbar-default-link-color;\n &:hover {\n color: @navbar-default-link-hover-color;\n }\n }\n\n .btn-link {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n }\n }\n }\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n background-color: @navbar-inverse-bg;\n border-color: @navbar-inverse-border;\n\n .navbar-brand {\n color: @navbar-inverse-brand-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-brand-hover-color;\n background-color: @navbar-inverse-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-inverse-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-inverse-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n\n // Darken the responsive nav toggle\n .navbar-toggle {\n border-color: @navbar-inverse-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-inverse-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-inverse-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: darken(@navbar-inverse-bg, 7%);\n }\n\n // Dropdowns\n .navbar-nav {\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-inverse-link-active-bg;\n color: @navbar-inverse-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display\n .open .dropdown-menu {\n > .dropdown-header {\n border-color: @navbar-inverse-border;\n }\n .divider {\n background-color: @navbar-inverse-border;\n }\n > li > a {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n }\n }\n\n .navbar-link {\n color: @navbar-inverse-link-color;\n &:hover {\n color: @navbar-inverse-link-hover-color;\n }\n }\n\n .btn-link {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n }\n }\n }\n}\n","// Navbar vertical align\n//\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n\n.navbar-vertical-align(@element-height) {\n margin-top: ((@navbar-height - @element-height) / 2);\n margin-bottom: ((@navbar-height - @element-height) / 2);\n}\n","//\n// Utility classes\n// --------------------------------------------------\n\n\n// Floats\n// -------------------------\n\n.clearfix {\n .clearfix();\n}\n.center-block {\n .center-block();\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n\n\n// Toggling content\n// -------------------------\n\n// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n .text-hide();\n}\n\n\n// Hide from screenreaders and browsers\n//\n// Credit: HTML5 Boilerplate\n\n.hidden {\n display: none !important;\n}\n\n\n// For Affix plugin\n// -------------------------\n\n.affix {\n position: fixed;\n}\n","//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;\n margin-bottom: @line-height-computed;\n list-style: none;\n background-color: @breadcrumb-bg;\n border-radius: @border-radius-base;\n\n > li {\n display: inline-block;\n\n + li:before {\n content: \"@{breadcrumb-separator}\\00a0\"; // Unicode space added since inline-block means non-collapsing white-space\n padding: 0 5px;\n color: @breadcrumb-color;\n }\n }\n\n > .active {\n color: @breadcrumb-active-color;\n }\n}\n","//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: @line-height-computed 0;\n border-radius: @border-radius-base;\n\n > li {\n display: inline; // Remove list-style and block-level defaults\n > a,\n > span {\n position: relative;\n float: left; // Collapse white-space\n padding: @padding-base-vertical @padding-base-horizontal;\n line-height: @line-height-base;\n text-decoration: none;\n color: @pagination-color;\n background-color: @pagination-bg;\n border: 1px solid @pagination-border;\n margin-left: -1px;\n }\n &:first-child {\n > a,\n > span {\n margin-left: 0;\n .border-left-radius(@border-radius-base);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius-base);\n }\n }\n }\n\n > li > a,\n > li > span {\n &:hover,\n &:focus {\n z-index: 2;\n color: @pagination-hover-color;\n background-color: @pagination-hover-bg;\n border-color: @pagination-hover-border;\n }\n }\n\n > .active > a,\n > .active > span {\n &,\n &:hover,\n &:focus {\n z-index: 3;\n color: @pagination-active-color;\n background-color: @pagination-active-bg;\n border-color: @pagination-active-border;\n cursor: default;\n }\n }\n\n > .disabled {\n > span,\n > span:hover,\n > span:focus,\n > a,\n > a:hover,\n > a:focus {\n color: @pagination-disabled-color;\n background-color: @pagination-disabled-bg;\n border-color: @pagination-disabled-border;\n cursor: @cursor-disabled;\n }\n }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n\n// Small\n.pagination-sm {\n .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n","// Pagination\n\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n > li {\n > a,\n > span {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n }\n &:first-child {\n > a,\n > span {\n .border-left-radius(@border-radius);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius);\n }\n }\n }\n}\n","//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n padding-left: 0;\n margin: @line-height-computed 0;\n list-style: none;\n text-align: center;\n &:extend(.clearfix all);\n li {\n display: inline;\n > a,\n > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: @pager-bg;\n border: 1px solid @pager-border;\n border-radius: @pager-border-radius;\n }\n\n > a:hover,\n > a:focus {\n text-decoration: none;\n background-color: @pager-hover-bg;\n }\n }\n\n .next {\n > a,\n > span {\n float: right;\n }\n }\n\n .previous {\n > a,\n > span {\n float: left;\n }\n }\n\n .disabled {\n > a,\n > a:hover,\n > a:focus,\n > span {\n color: @pager-disabled-color;\n background-color: @pager-bg;\n cursor: @cursor-disabled;\n }\n }\n}\n","//\n// Labels\n// --------------------------------------------------\n\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: @label-color;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n\n // Add hover effects, but only for links\n a& {\n &:hover,\n &:focus {\n color: @label-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Empty labels collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for labels in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n .label-variant(@label-default-bg);\n}\n\n.label-primary {\n .label-variant(@label-primary-bg);\n}\n\n.label-success {\n .label-variant(@label-success-bg);\n}\n\n.label-info {\n .label-variant(@label-info-bg);\n}\n\n.label-warning {\n .label-variant(@label-warning-bg);\n}\n\n.label-danger {\n .label-variant(@label-danger-bg);\n}\n","// Labels\n\n.label-variant(@color) {\n background-color: @color;\n\n &[href] {\n &:hover,\n &:focus {\n background-color: darken(@color, 10%);\n }\n }\n}\n","//\n// Badges\n// --------------------------------------------------\n\n\n// Base class\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: @font-size-small;\n font-weight: @badge-font-weight;\n color: @badge-color;\n line-height: @badge-line-height;\n vertical-align: middle;\n white-space: nowrap;\n text-align: center;\n background-color: @badge-bg;\n border-radius: @badge-border-radius;\n\n // Empty badges collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for badges in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n\n .btn-xs &,\n .btn-group-xs > .btn & {\n top: 0;\n padding: 1px 5px;\n }\n\n // Hover state, but only for links\n a& {\n &:hover,\n &:focus {\n color: @badge-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Account for badges in navs\n .list-group-item.active > &,\n .nav-pills > .active > a > & {\n color: @badge-active-color;\n background-color: @badge-active-bg;\n }\n\n .list-group-item > & {\n float: right;\n }\n\n .list-group-item > & + & {\n margin-right: 5px;\n }\n\n .nav-pills > li > a > & {\n margin-left: 3px;\n }\n}\n","//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n padding-top: @jumbotron-padding;\n padding-bottom: @jumbotron-padding;\n margin-bottom: @jumbotron-padding;\n color: @jumbotron-color;\n background-color: @jumbotron-bg;\n\n h1,\n .h1 {\n color: @jumbotron-heading-color;\n }\n\n p {\n margin-bottom: (@jumbotron-padding / 2);\n font-size: @jumbotron-font-size;\n font-weight: 200;\n }\n\n > hr {\n border-top-color: darken(@jumbotron-bg, 10%);\n }\n\n .container &,\n .container-fluid & {\n border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n }\n\n .container {\n max-width: 100%;\n }\n\n @media screen and (min-width: @screen-sm-min) {\n padding-top: (@jumbotron-padding * 1.6);\n padding-bottom: (@jumbotron-padding * 1.6);\n\n .container &,\n .container-fluid & {\n padding-left: (@jumbotron-padding * 2);\n padding-right: (@jumbotron-padding * 2);\n }\n\n h1,\n .h1 {\n font-size: @jumbotron-heading-font-size;\n }\n }\n}\n","//\n// Thumbnails\n// --------------------------------------------------\n\n\n// Mixin and adjust the regular image class\n.thumbnail {\n display: block;\n padding: @thumbnail-padding;\n margin-bottom: @line-height-computed;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(border .2s ease-in-out);\n\n > img,\n a > img {\n &:extend(.img-responsive);\n margin-left: auto;\n margin-right: auto;\n }\n\n // Add a hover state for linked versions only\n a&:hover,\n a&:focus,\n a&.active {\n border-color: @link-color;\n }\n\n // Image captions\n .caption {\n padding: @thumbnail-caption-padding;\n color: @thumbnail-caption-color;\n }\n}\n","//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n padding: @alert-padding;\n margin-bottom: @line-height-computed;\n border: 1px solid transparent;\n border-radius: @alert-border-radius;\n\n // Headings for larger alerts\n h4 {\n margin-top: 0;\n // Specified for the h4 to prevent conflicts of changing @headings-color\n color: inherit;\n }\n\n // Provide class for links that match alerts\n .alert-link {\n font-weight: @alert-link-font-weight;\n }\n\n // Improve alignment and spacing of inner content\n > p,\n > ul {\n margin-bottom: 0;\n }\n\n > p + p {\n margin-top: 5px;\n }\n}\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0.\n.alert-dismissible {\n padding-right: (@alert-padding + 20);\n\n // Adjust close link position\n .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);\n}\n\n.alert-info {\n .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);\n}\n\n.alert-warning {\n .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);\n}\n\n.alert-danger {\n .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);\n}\n","// Alerts\n\n.alert-variant(@background; @border; @text-color) {\n background-color: @background;\n border-color: @border;\n color: @text-color;\n\n hr {\n border-top-color: darken(@border, 5%);\n }\n .alert-link {\n color: darken(@text-color, 10%);\n }\n}\n","//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -------------------------\n\n// WebKit\n@-webkit-keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n overflow: hidden;\n height: @line-height-computed;\n margin-bottom: @line-height-computed;\n background-color: @progress-bg;\n border-radius: @progress-border-radius;\n .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));\n}\n\n// Bar of progress\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: @font-size-small;\n line-height: @line-height-computed;\n color: @progress-bar-color;\n text-align: center;\n background-color: @progress-bar-bg;\n .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));\n .transition(width .6s ease);\n}\n\n// Striped bars\n//\n// `.progress-striped .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar-striped` class, which you just add to an existing\n// `.progress-bar`.\n.progress-striped .progress-bar,\n.progress-bar-striped {\n #gradient > .striped();\n background-size: 40px 40px;\n}\n\n// Call animation for the active one\n//\n// `.progress.active .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar.active` approach.\n.progress.active .progress-bar,\n.progress-bar.active {\n .animation(progress-bar-stripes 2s linear infinite);\n}\n\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n .progress-bar-variant(@progress-bar-success-bg);\n}\n\n.progress-bar-info {\n .progress-bar-variant(@progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n .progress-bar-variant(@progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n .progress-bar-variant(@progress-bar-danger-bg);\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Progress bars\n\n.progress-bar-variant(@color) {\n background-color: @color;\n\n // Deprecated parent class requirement as of v3.2.0\n .progress-striped & {\n #gradient > .striped();\n }\n}\n",".media {\n // Proper spacing between instances of .media\n margin-top: 15px;\n\n &:first-child {\n margin-top: 0;\n }\n}\n\n.media,\n.media-body {\n zoom: 1;\n overflow: hidden;\n}\n\n.media-body {\n width: 10000px;\n}\n\n.media-object {\n display: block;\n\n // Fix collapse in webkit from max-width: 100% and display: table-cell.\n &.img-thumbnail {\n max-width: none;\n }\n}\n\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n\n.media-middle {\n vertical-align: middle;\n}\n\n.media-bottom {\n vertical-align: bottom;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n\n// Media list variation\n//\n// Undo default ul/ol styles\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n","//\n// List groups\n// --------------------------------------------------\n\n\n// Base class\n//\n// Easily usable on
    ,
      , or
      .\n\n.list-group {\n // No need to set list-style: none; since .list-group-item is block level\n margin-bottom: 20px;\n padding-left: 0; // reset padding because ul and ol\n}\n\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n // Place the border on the list items and negative margin up for better styling\n margin-bottom: -1px;\n background-color: @list-group-bg;\n border: 1px solid @list-group-border;\n\n // Round the first and last items\n &:first-child {\n .border-top-radius(@list-group-border-radius);\n }\n &:last-child {\n margin-bottom: 0;\n .border-bottom-radius(@list-group-border-radius);\n }\n}\n\n\n// Interactive list items\n//\n// Use anchor or button elements instead of `li`s or `div`s to create interactive items.\n// Includes an extra `.active` modifier class for showing selected items.\n\na.list-group-item,\nbutton.list-group-item {\n color: @list-group-link-color;\n\n .list-group-item-heading {\n color: @list-group-link-heading-color;\n }\n\n // Hover state\n &:hover,\n &:focus {\n text-decoration: none;\n color: @list-group-link-hover-color;\n background-color: @list-group-hover-bg;\n }\n}\n\nbutton.list-group-item {\n width: 100%;\n text-align: left;\n}\n\n.list-group-item {\n // Disabled state\n &.disabled,\n &.disabled:hover,\n &.disabled:focus {\n background-color: @list-group-disabled-bg;\n color: @list-group-disabled-color;\n cursor: @cursor-disabled;\n\n // Force color to inherit for custom content\n .list-group-item-heading {\n color: inherit;\n }\n .list-group-item-text {\n color: @list-group-disabled-text-color;\n }\n }\n\n // Active class on item itself, not parent\n &.active,\n &.active:hover,\n &.active:focus {\n z-index: 2; // Place active items above their siblings for proper border styling\n color: @list-group-active-color;\n background-color: @list-group-active-bg;\n border-color: @list-group-active-border;\n\n // Force color to inherit for custom content\n .list-group-item-heading,\n .list-group-item-heading > small,\n .list-group-item-heading > .small {\n color: inherit;\n }\n .list-group-item-text {\n color: @list-group-active-text-color;\n }\n }\n}\n\n\n// Contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n.list-group-item-variant(success; @state-success-bg; @state-success-text);\n.list-group-item-variant(info; @state-info-bg; @state-info-text);\n.list-group-item-variant(warning; @state-warning-bg; @state-warning-text);\n.list-group-item-variant(danger; @state-danger-bg; @state-danger-text);\n\n\n// Custom content options\n//\n// Extra classes for creating well-formatted content within `.list-group-item`s.\n\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n","// List Groups\n\n.list-group-item-variant(@state; @background; @color) {\n .list-group-item-@{state} {\n color: @color;\n background-color: @background;\n\n a&,\n button& {\n color: @color;\n\n .list-group-item-heading {\n color: inherit;\n }\n\n &:hover,\n &:focus {\n color: @color;\n background-color: darken(@background, 5%);\n }\n &.active,\n &.active:hover,\n &.active:focus {\n color: #fff;\n background-color: @color;\n border-color: @color;\n }\n }\n }\n}\n","//\n// Panels\n// --------------------------------------------------\n\n\n// Base class\n.panel {\n margin-bottom: @line-height-computed;\n background-color: @panel-bg;\n border: 1px solid transparent;\n border-radius: @panel-border-radius;\n .box-shadow(0 1px 1px rgba(0,0,0,.05));\n}\n\n// Panel contents\n.panel-body {\n padding: @panel-body-padding;\n &:extend(.clearfix all);\n}\n\n// Optional heading\n.panel-heading {\n padding: @panel-heading-padding;\n border-bottom: 1px solid transparent;\n .border-top-radius((@panel-border-radius - 1));\n\n > .dropdown .dropdown-toggle {\n color: inherit;\n }\n}\n\n// Within heading, strip any `h*` tag of its default margins for spacing.\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: ceil((@font-size-base * 1.125));\n color: inherit;\n\n > a,\n > small,\n > .small,\n > small > a,\n > .small > a {\n color: inherit;\n }\n}\n\n// Optional footer (stays gray in every modifier class)\n.panel-footer {\n padding: @panel-footer-padding;\n background-color: @panel-footer-bg;\n border-top: 1px solid @panel-inner-border;\n .border-bottom-radius((@panel-border-radius - 1));\n}\n\n\n// List groups in panels\n//\n// By default, space out list group content from panel headings to account for\n// any kind of custom content between the two.\n\n.panel {\n > .list-group,\n > .panel-collapse > .list-group {\n margin-bottom: 0;\n\n .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n }\n\n // Add border top radius for first one\n &:first-child {\n .list-group-item:first-child {\n border-top: 0;\n .border-top-radius((@panel-border-radius - 1));\n }\n }\n\n // Add border bottom radius for last one\n &:last-child {\n .list-group-item:last-child {\n border-bottom: 0;\n .border-bottom-radius((@panel-border-radius - 1));\n }\n }\n }\n > .panel-heading + .panel-collapse > .list-group {\n .list-group-item:first-child {\n .border-top-radius(0);\n }\n }\n}\n// Collapse space between when there's no additional content.\n.panel-heading + .list-group {\n .list-group-item:first-child {\n border-top-width: 0;\n }\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n\n// Tables in panels\n//\n// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and\n// watch it go full width.\n\n.panel {\n > .table,\n > .table-responsive > .table,\n > .panel-collapse > .table {\n margin-bottom: 0;\n\n caption {\n padding-left: @panel-body-padding;\n padding-right: @panel-body-padding;\n }\n }\n // Add border top radius for first one\n > .table:first-child,\n > .table-responsive:first-child > .table:first-child {\n .border-top-radius((@panel-border-radius - 1));\n\n > thead:first-child,\n > tbody:first-child {\n > tr:first-child {\n border-top-left-radius: (@panel-border-radius - 1);\n border-top-right-radius: (@panel-border-radius - 1);\n\n td:first-child,\n th:first-child {\n border-top-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-top-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n // Add border bottom radius for last one\n > .table:last-child,\n > .table-responsive:last-child > .table:last-child {\n .border-bottom-radius((@panel-border-radius - 1));\n\n > tbody:last-child,\n > tfoot:last-child {\n > tr:last-child {\n border-bottom-left-radius: (@panel-border-radius - 1);\n border-bottom-right-radius: (@panel-border-radius - 1);\n\n td:first-child,\n th:first-child {\n border-bottom-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-bottom-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n > .panel-body + .table,\n > .panel-body + .table-responsive,\n > .table + .panel-body,\n > .table-responsive + .panel-body {\n border-top: 1px solid @table-border-color;\n }\n > .table > tbody:first-child > tr:first-child th,\n > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n }\n > .table-bordered,\n > .table-responsive > .table-bordered {\n border: 0;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n > thead,\n > tbody {\n > tr:first-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n > tbody,\n > tfoot {\n > tr:last-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n }\n > .table-responsive {\n border: 0;\n margin-bottom: 0;\n }\n}\n\n\n// Collapsible panels (aka, accordion)\n//\n// Wrap a series of panels in `.panel-group` to turn them into an accordion with\n// the help of our collapse JavaScript plugin.\n\n.panel-group {\n margin-bottom: @line-height-computed;\n\n // Tighten up margin so it's only between panels\n .panel {\n margin-bottom: 0;\n border-radius: @panel-border-radius;\n\n + .panel {\n margin-top: 5px;\n }\n }\n\n .panel-heading {\n border-bottom: 0;\n\n + .panel-collapse > .panel-body,\n + .panel-collapse > .list-group {\n border-top: 1px solid @panel-inner-border;\n }\n }\n\n .panel-footer {\n border-top: 0;\n + .panel-collapse .panel-body {\n border-bottom: 1px solid @panel-inner-border;\n }\n }\n}\n\n\n// Contextual variations\n.panel-default {\n .panel-variant(@panel-default-border; @panel-default-text; @panel-default-heading-bg; @panel-default-border);\n}\n.panel-primary {\n .panel-variant(@panel-primary-border; @panel-primary-text; @panel-primary-heading-bg; @panel-primary-border);\n}\n.panel-success {\n .panel-variant(@panel-success-border; @panel-success-text; @panel-success-heading-bg; @panel-success-border);\n}\n.panel-info {\n .panel-variant(@panel-info-border; @panel-info-text; @panel-info-heading-bg; @panel-info-border);\n}\n.panel-warning {\n .panel-variant(@panel-warning-border; @panel-warning-text; @panel-warning-heading-bg; @panel-warning-border);\n}\n.panel-danger {\n .panel-variant(@panel-danger-border; @panel-danger-text; @panel-danger-heading-bg; @panel-danger-border);\n}\n","// Panels\n\n.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) {\n border-color: @border;\n\n & > .panel-heading {\n color: @heading-text-color;\n background-color: @heading-bg-color;\n border-color: @heading-border;\n\n + .panel-collapse > .panel-body {\n border-top-color: @border;\n }\n .badge {\n color: @heading-bg-color;\n background-color: @heading-text-color;\n }\n }\n & > .panel-footer {\n + .panel-collapse > .panel-body {\n border-bottom-color: @border;\n }\n }\n}\n","// Embeds responsive\n//\n// Credit: Nicolas Gallagher and SUIT CSS.\n\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n\n .embed-responsive-item,\n iframe,\n embed,\n object,\n video {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0;\n }\n}\n\n// Modifier class for 16:9 aspect ratio\n.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n\n// Modifier class for 4:3 aspect ratio\n.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n","//\n// Wells\n// --------------------------------------------------\n\n\n// Base class\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: @well-bg;\n border: 1px solid @well-border;\n border-radius: @border-radius-base;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));\n blockquote {\n border-color: #ddd;\n border-color: rgba(0,0,0,.15);\n }\n}\n\n// Sizes\n.well-lg {\n padding: 24px;\n border-radius: @border-radius-large;\n}\n.well-sm {\n padding: 9px;\n border-radius: @border-radius-small;\n}\n","//\n// Close icons\n// --------------------------------------------------\n\n\n.close {\n float: right;\n font-size: (@font-size-base * 1.5);\n font-weight: @close-font-weight;\n line-height: 1;\n color: @close-color;\n text-shadow: @close-text-shadow;\n .opacity(.2);\n\n &:hover,\n &:focus {\n color: @close-color;\n text-decoration: none;\n cursor: pointer;\n .opacity(.5);\n }\n\n // Additional properties for button version\n // iOS requires the button element instead of an anchor tag.\n // If you want the anchor version, it requires `href=\"#\"`.\n // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n button& {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n }\n}\n","//\n// Modals\n// --------------------------------------------------\n\n// .modal-open - body class for killing the scroll\n// .modal - container to scroll within\n// .modal-dialog - positioning shell for the actual modal\n// .modal-content - actual modal w/ bg and corners and shit\n\n// Kill the scroll on the body\n.modal-open {\n overflow: hidden;\n}\n\n// Container that the modal scrolls within\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal;\n -webkit-overflow-scrolling: touch;\n\n // Prevent Chrome on Windows from adding a focus outline. For details, see\n // https://github.com/twbs/bootstrap/pull/10951.\n outline: 0;\n\n // When fading in the modal, animate it to slide down\n &.fade .modal-dialog {\n .translate(0, -25%);\n .transition-transform(~\"0.3s ease-out\");\n }\n &.in .modal-dialog { .translate(0, 0) }\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n\n// Actual modal\n.modal-content {\n position: relative;\n background-color: @modal-content-bg;\n border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc)\n border: 1px solid @modal-content-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 3px 9px rgba(0,0,0,.5));\n background-clip: padding-box;\n // Remove focus outline from opened modal\n outline: 0;\n}\n\n// Modal background\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal-background;\n background-color: @modal-backdrop-bg;\n // Fade for backdrop\n &.fade { .opacity(0); }\n &.in { .opacity(@modal-backdrop-opacity); }\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n padding: @modal-title-padding;\n border-bottom: 1px solid @modal-header-border-color;\n &:extend(.clearfix all);\n}\n// Close icon\n.modal-header .close {\n margin-top: -2px;\n}\n\n// Title text within header\n.modal-title {\n margin: 0;\n line-height: @modal-title-line-height;\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n position: relative;\n padding: @modal-inner-padding;\n}\n\n// Footer (for actions)\n.modal-footer {\n padding: @modal-inner-padding;\n text-align: right; // right align buttons\n border-top: 1px solid @modal-footer-border-color;\n &:extend(.clearfix all); // clear it in case folks use .pull-* classes on buttons\n\n // Properly space out buttons\n .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0; // account for input[type=\"submit\"] which gets the bottom margin like all other inputs\n }\n // but override that for button groups\n .btn-group .btn + .btn {\n margin-left: -1px;\n }\n // and override it for block buttons as well\n .btn-block + .btn-block {\n margin-left: 0;\n }\n}\n\n// Measure scrollbar width for padding body during modal show/hide\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n// Scale up the modal\n@media (min-width: @screen-sm-min) {\n // Automatically set modal's width for larger viewports\n .modal-dialog {\n width: @modal-md;\n margin: 30px auto;\n }\n .modal-content {\n .box-shadow(0 5px 15px rgba(0,0,0,.5));\n }\n\n // Modal sizes\n .modal-sm { width: @modal-sm; }\n}\n\n@media (min-width: @screen-md-min) {\n .modal-lg { width: @modal-lg; }\n}\n","//\n// Tooltips\n// --------------------------------------------------\n\n\n// Base class\n.tooltip {\n position: absolute;\n z-index: @zindex-tooltip;\n display: block;\n // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n .reset-text();\n font-size: @font-size-small;\n\n .opacity(0);\n\n &.in { .opacity(@tooltip-opacity); }\n &.top { margin-top: -3px; padding: @tooltip-arrow-width 0; }\n &.right { margin-left: 3px; padding: 0 @tooltip-arrow-width; }\n &.bottom { margin-top: 3px; padding: @tooltip-arrow-width 0; }\n &.left { margin-left: -3px; padding: 0 @tooltip-arrow-width; }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n max-width: @tooltip-max-width;\n padding: 3px 8px;\n color: @tooltip-color;\n text-align: center;\n background-color: @tooltip-bg;\n border-radius: @border-radius-base;\n}\n\n// Arrows\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n// Note: Deprecated .top-left, .top-right, .bottom-left, and .bottom-right as of v3.3.1\n.tooltip {\n &.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-left .tooltip-arrow {\n bottom: 0;\n right: @tooltip-arrow-width;\n margin-bottom: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-right .tooltip-arrow {\n bottom: 0;\n left: @tooltip-arrow-width;\n margin-bottom: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0;\n border-right-color: @tooltip-arrow-color;\n }\n &.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-left-color: @tooltip-arrow-color;\n }\n &.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-left .tooltip-arrow {\n top: 0;\n right: @tooltip-arrow-width;\n margin-top: -@tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-right .tooltip-arrow {\n top: 0;\n left: @tooltip-arrow-width;\n margin-top: -@tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n}\n",".reset-text() {\n font-family: @font-family-base;\n // We deliberately do NOT reset font-size.\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: @line-height-base;\n text-align: left; // Fallback for where `start` is not supported\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n}\n","//\n// Popovers\n// --------------------------------------------------\n\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: @zindex-popover;\n display: none;\n max-width: @popover-max-width;\n padding: 1px;\n // Our parent element can be arbitrary since popovers are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n .reset-text();\n font-size: @font-size-base;\n\n background-color: @popover-bg;\n background-clip: padding-box;\n border: 1px solid @popover-fallback-border-color;\n border: 1px solid @popover-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 5px 10px rgba(0,0,0,.2));\n\n // Offset the popover to account for the popover arrow\n &.top { margin-top: -@popover-arrow-width; }\n &.right { margin-left: @popover-arrow-width; }\n &.bottom { margin-top: @popover-arrow-width; }\n &.left { margin-left: -@popover-arrow-width; }\n}\n\n.popover-title {\n margin: 0; // reset heading margin\n padding: 8px 14px;\n font-size: @font-size-base;\n background-color: @popover-title-bg;\n border-bottom: 1px solid darken(@popover-title-bg, 5%);\n border-radius: (@border-radius-large - 1) (@border-radius-large - 1) 0 0;\n}\n\n.popover-content {\n padding: 9px 14px;\n}\n\n// Arrows\n//\n// .arrow is outer, .arrow:after is inner\n\n.popover > .arrow {\n &,\n &:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n }\n}\n.popover > .arrow {\n border-width: @popover-arrow-outer-width;\n}\n.popover > .arrow:after {\n border-width: @popover-arrow-width;\n content: \"\";\n}\n\n.popover {\n &.top > .arrow {\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-bottom-width: 0;\n border-top-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-top-color: @popover-arrow-outer-color;\n bottom: -@popover-arrow-outer-width;\n &:after {\n content: \" \";\n bottom: 1px;\n margin-left: -@popover-arrow-width;\n border-bottom-width: 0;\n border-top-color: @popover-arrow-color;\n }\n }\n &.right > .arrow {\n top: 50%;\n left: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-left-width: 0;\n border-right-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-right-color: @popover-arrow-outer-color;\n &:after {\n content: \" \";\n left: 1px;\n bottom: -@popover-arrow-width;\n border-left-width: 0;\n border-right-color: @popover-arrow-color;\n }\n }\n &.bottom > .arrow {\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-top-width: 0;\n border-bottom-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-bottom-color: @popover-arrow-outer-color;\n top: -@popover-arrow-outer-width;\n &:after {\n content: \" \";\n top: 1px;\n margin-left: -@popover-arrow-width;\n border-top-width: 0;\n border-bottom-color: @popover-arrow-color;\n }\n }\n\n &.left > .arrow {\n top: 50%;\n right: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-right-width: 0;\n border-left-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-left-color: @popover-arrow-outer-color;\n &:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: @popover-arrow-color;\n bottom: -@popover-arrow-width;\n }\n }\n}\n","//\n// Carousel\n// --------------------------------------------------\n\n\n// Wrapper for the slide container and indicators\n.carousel {\n position: relative;\n}\n\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%;\n\n > .item {\n display: none;\n position: relative;\n .transition(.6s ease-in-out left);\n\n // Account for jankitude on images\n > img,\n > a > img {\n &:extend(.img-responsive);\n line-height: 1;\n }\n\n // WebKit CSS3 transforms for supported devices\n @media all and (transform-3d), (-webkit-transform-3d) {\n .transition-transform(~'0.6s ease-in-out');\n .backface-visibility(~'hidden');\n .perspective(1000px);\n\n &.next,\n &.active.right {\n .translate3d(100%, 0, 0);\n left: 0;\n }\n &.prev,\n &.active.left {\n .translate3d(-100%, 0, 0);\n left: 0;\n }\n &.next.left,\n &.prev.right,\n &.active {\n .translate3d(0, 0, 0);\n left: 0;\n }\n }\n }\n\n > .active,\n > .next,\n > .prev {\n display: block;\n }\n\n > .active {\n left: 0;\n }\n\n > .next,\n > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n }\n\n > .next {\n left: 100%;\n }\n > .prev {\n left: -100%;\n }\n > .next.left,\n > .prev.right {\n left: 0;\n }\n\n > .active.left {\n left: -100%;\n }\n > .active.right {\n left: 100%;\n }\n\n}\n\n// Left/right controls for nav\n// ---------------------------\n\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: @carousel-control-width;\n .opacity(@carousel-control-opacity);\n font-size: @carousel-control-font-size;\n color: @carousel-control-color;\n text-align: center;\n text-shadow: @carousel-text-shadow;\n background-color: rgba(0, 0, 0, 0); // Fix IE9 click-thru bug\n // We can't have this transition here because WebKit cancels the carousel\n // animation if you trip this while in the middle of another animation.\n\n // Set gradients for backgrounds\n &.left {\n #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));\n }\n &.right {\n left: auto;\n right: 0;\n #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));\n }\n\n // Hover/focus state\n &:hover,\n &:focus {\n outline: 0;\n color: @carousel-control-color;\n text-decoration: none;\n .opacity(.9);\n }\n\n // Toggles\n .icon-prev,\n .icon-next,\n .glyphicon-chevron-left,\n .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n margin-top: -10px;\n z-index: 5;\n display: inline-block;\n }\n .icon-prev,\n .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n }\n .icon-next,\n .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n }\n .icon-prev,\n .icon-next {\n width: 20px;\n height: 20px;\n line-height: 1;\n font-family: serif;\n }\n\n\n .icon-prev {\n &:before {\n content: '\\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)\n }\n }\n .icon-next {\n &:before {\n content: '\\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)\n }\n }\n}\n\n// Optional indicator pips\n//\n// Add an unordered list with the following class and add a list item for each\n// slide your carousel holds.\n\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center;\n\n li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid @carousel-indicator-border-color;\n border-radius: 10px;\n cursor: pointer;\n\n // IE8-9 hack for event handling\n //\n // Internet Explorer 8-9 does not support clicks on elements without a set\n // `background-color`. We cannot use `filter` since that's not viewed as a\n // background color by the browser. Thus, a hack is needed.\n // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Internet_Explorer\n //\n // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we\n // set alpha transparency for the best results possible.\n background-color: #000 \\9; // IE8\n background-color: rgba(0,0,0,0); // IE9\n }\n .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: @carousel-indicator-active-bg;\n }\n}\n\n// Optional captions\n// -----------------------------\n// Hidden by default for smaller viewports\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: @carousel-caption-color;\n text-align: center;\n text-shadow: @carousel-text-shadow;\n & .btn {\n text-shadow: none; // No shadow for button elements in carousel-caption\n }\n}\n\n\n// Scale up controls for tablets and up\n@media screen and (min-width: @screen-sm-min) {\n\n // Scale up the controls a smidge\n .carousel-control {\n .glyphicon-chevron-left,\n .glyphicon-chevron-right,\n .icon-prev,\n .icon-next {\n width: (@carousel-control-font-size * 1.5);\n height: (@carousel-control-font-size * 1.5);\n margin-top: (@carousel-control-font-size / -2);\n font-size: (@carousel-control-font-size * 1.5);\n }\n .glyphicon-chevron-left,\n .icon-prev {\n margin-left: (@carousel-control-font-size / -2);\n }\n .glyphicon-chevron-right,\n .icon-next {\n margin-right: (@carousel-control-font-size / -2);\n }\n }\n\n // Show and left align the captions\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px;\n }\n\n // Move up the indicators\n .carousel-indicators {\n bottom: 20px;\n }\n}\n","// Clearfix\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n// contenteditable attribute is included anywhere else in the document.\n// Otherwise it causes space to appear at the top and bottom of elements\n// that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n// `:before` to contain the top-margins of child elements.\n//\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n\n.clearfix() {\n &:before,\n &:after {\n content: \" \"; // 1\n display: table; // 2\n }\n &:after {\n clear: both;\n }\n}\n","// Center-align a block level element\n\n.center-block() {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n","// CSS image replacement\n//\n// Heads up! v3 launched with only `.hide-text()`, but per our pattern for\n// mixins being reused as classes with the same name, this doesn't hold up. As\n// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`.\n//\n// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757\n\n// Deprecated as of v3.0.1 (has been removed in v4)\n.hide-text() {\n font: ~\"0/0\" a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n\n// New mixin to use as of v3.0.1\n.text-hide() {\n .hide-text();\n}\n","//\n// Responsive: Utility classes\n// --------------------------------------------------\n\n\n// IE10 in Windows (Phone) 8\n//\n// Support for responsive views via media queries is kind of borked in IE10, for\n// Surface/desktop in split view and for Windows Phone 8. This particular fix\n// must be accompanied by a snippet of JavaScript to sniff the user agent and\n// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at\n// our Getting Started page for more information on this bug.\n//\n// For more information, see the following:\n//\n// Issue: https://github.com/twbs/bootstrap/issues/10497\n// Docs: http://getbootstrap.com/getting-started/#support-ie10-width\n// Source: http://timkadlec.com/2013/01/windows-phone-8-and-device-width/\n// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/\n\n@-ms-viewport {\n width: device-width;\n}\n\n\n// Visibility utilities\n// Note: Deprecated .visible-xs, .visible-sm, .visible-md, and .visible-lg as of v3.2.0\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n .responsive-invisibility();\n}\n\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n\n.visible-xs {\n @media (max-width: @screen-xs-max) {\n .responsive-visibility();\n }\n}\n.visible-xs-block {\n @media (max-width: @screen-xs-max) {\n display: block !important;\n }\n}\n.visible-xs-inline {\n @media (max-width: @screen-xs-max) {\n display: inline !important;\n }\n}\n.visible-xs-inline-block {\n @media (max-width: @screen-xs-max) {\n display: inline-block !important;\n }\n}\n\n.visible-sm {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-visibility();\n }\n}\n.visible-sm-block {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: block !important;\n }\n}\n.visible-sm-inline {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: inline !important;\n }\n}\n.visible-sm-inline-block {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: inline-block !important;\n }\n}\n\n.visible-md {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-visibility();\n }\n}\n.visible-md-block {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: block !important;\n }\n}\n.visible-md-inline {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: inline !important;\n }\n}\n.visible-md-inline-block {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: inline-block !important;\n }\n}\n\n.visible-lg {\n @media (min-width: @screen-lg-min) {\n .responsive-visibility();\n }\n}\n.visible-lg-block {\n @media (min-width: @screen-lg-min) {\n display: block !important;\n }\n}\n.visible-lg-inline {\n @media (min-width: @screen-lg-min) {\n display: inline !important;\n }\n}\n.visible-lg-inline-block {\n @media (min-width: @screen-lg-min) {\n display: inline-block !important;\n }\n}\n\n.hidden-xs {\n @media (max-width: @screen-xs-max) {\n .responsive-invisibility();\n }\n}\n.hidden-sm {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-invisibility();\n }\n}\n.hidden-md {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-invisibility();\n }\n}\n.hidden-lg {\n @media (min-width: @screen-lg-min) {\n .responsive-invisibility();\n }\n}\n\n\n// Print utilities\n//\n// Media queries are placed on the inside to be mixin-friendly.\n\n// Note: Deprecated .visible-print as of v3.2.0\n.visible-print {\n .responsive-invisibility();\n\n @media print {\n .responsive-visibility();\n }\n}\n.visible-print-block {\n display: none !important;\n\n @media print {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n\n @media print {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n\n @media print {\n display: inline-block !important;\n }\n}\n\n.hidden-print {\n @media print {\n .responsive-invisibility();\n }\n}\n","// Responsive utilities\n\n//\n// More easily include all the states for responsive-utilities.less.\n.responsive-visibility() {\n display: block !important;\n table& { display: table !important; }\n tr& { display: table-row !important; }\n th&,\n td& { display: table-cell !important; }\n}\n\n.responsive-invisibility() {\n display: none !important;\n}\n"]} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/bootstrap.min.css b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/bootstrap.min.css new file mode 100644 index 000000000..ed3905e0e --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/bootstrap.min.css @@ -0,0 +1,6 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/bootstrap.min.css.map b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/bootstrap.min.css.map new file mode 100644 index 000000000..6c7fa40b9 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/bootstrap.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["less/normalize.less","less/print.less","bootstrap.css","dist/css/bootstrap.css","less/glyphicons.less","less/scaffolding.less","less/mixins/vendor-prefixes.less","less/mixins/tab-focus.less","less/mixins/image.less","less/type.less","less/mixins/text-emphasis.less","less/mixins/background-variant.less","less/mixins/text-overflow.less","less/code.less","less/grid.less","less/mixins/grid.less","less/mixins/grid-framework.less","less/tables.less","less/mixins/table-row.less","less/forms.less","less/mixins/forms.less","less/buttons.less","less/mixins/buttons.less","less/mixins/opacity.less","less/component-animations.less","less/dropdowns.less","less/mixins/nav-divider.less","less/mixins/reset-filter.less","less/button-groups.less","less/mixins/border-radius.less","less/input-groups.less","less/navs.less","less/navbar.less","less/mixins/nav-vertical-align.less","less/utilities.less","less/breadcrumbs.less","less/pagination.less","less/mixins/pagination.less","less/pager.less","less/labels.less","less/mixins/labels.less","less/badges.less","less/jumbotron.less","less/thumbnails.less","less/alerts.less","less/mixins/alerts.less","less/progress-bars.less","less/mixins/gradients.less","less/mixins/progress-bar.less","less/media.less","less/list-group.less","less/mixins/list-group.less","less/panels.less","less/mixins/panels.less","less/responsive-embed.less","less/wells.less","less/close.less","less/modals.less","less/tooltip.less","less/mixins/reset-text.less","less/popovers.less","less/carousel.less","less/mixins/clearfix.less","less/mixins/center-block.less","less/mixins/hide-text.less","less/responsive-utilities.less","less/mixins/responsive-visibility.less"],"names":[],"mappings":";;;;4EAQA,KACE,YAAA,WACA,yBAAA,KACA,qBAAA,KAOF,KACE,OAAA,EAaF,QAAA,MAAA,QAAA,WAAA,OAAA,OAAA,OAAA,OAAA,KAAA,KAAA,IAAA,QAAA,QAaE,QAAA,MAQF,MAAA,OAAA,SAAA,MAIE,QAAA,aACA,eAAA,SAQF,sBACE,QAAA,KACA,OAAA,EAQF,SAAA,SAEE,QAAA,KAUF,EACE,iBAAA,YAQF,SAAA,QAEE,QAAA,EAUF,YACE,cAAA,IAAA,OAOF,EAAA,OAEE,YAAA,IAOF,IACE,WAAA,OAQF,GACE,OAAA,MAAA,EACA,UAAA,IAOF,KACE,MAAA,KACA,WAAA,KAOF,MACE,UAAA,IAOF,IAAA,IAEE,SAAA,SACA,UAAA,IACA,YAAA,EACA,eAAA,SAGF,IACE,IAAA,MAGF,IACE,OAAA,OAUF,IACE,OAAA,EAOF,eACE,SAAA,OAUF,OACE,OAAA,IAAA,KAOF,GACE,OAAA,EAAA,mBAAA,YAAA,gBAAA,YACA,WAAA,YAOF,IACE,SAAA,KAOF,KAAA,IAAA,IAAA,KAIE,YAAA,UAAA,UACA,UAAA,IAkBF,OAAA,MAAA,SAAA,OAAA,SAKE,OAAA,EACA,KAAA,QACA,MAAA,QAOF,OACE,SAAA,QAUF,OAAA,OAEE,eAAA,KAWF,OAAA,wBAAA,kBAAA,mBAIE,mBAAA,OACA,OAAA,QAOF,iBAAA,qBAEE,OAAA,QAOF,yBAAA,wBAEE,QAAA,EACA,OAAA,EAQF,MACE,YAAA,OAWF,qBAAA,kBAEE,mBAAA,WAAA,gBAAA,WAAA,WAAA,WACA,QAAA,EASF,8CAAA,8CAEE,OAAA,KAQF,mBACE,mBAAA,YACA,gBAAA,YAAA,WAAA,YAAA,mBAAA,UASF,iDAAA,8CAEE,mBAAA,KAOF,SACE,QAAA,MAAA,OAAA,MACA,OAAA,EAAA,IACA,OAAA,IAAA,MAAA,OAQF,OACE,QAAA,EACA,OAAA,EAOF,SACE,SAAA,KAQF,SACE,YAAA,IAUF,MACE,eAAA,EACA,gBAAA,SAGF,GAAA,GAEE,QAAA,uFCjUF,aA7FI,EAAA,OAAA,QAGI,MAAA,eACA,YAAA,eACA,WAAA,cAAA,mBAAA,eACA,WAAA,eAGJ,EAAA,UAEI,gBAAA,UAGJ,cACI,QAAA,KAAA,WAAA,IAGJ,kBACI,QAAA,KAAA,YAAA,IAKJ,6BAAA,mBAEI,QAAA,GAGJ,WAAA,IAEI,OAAA,IAAA,MAAA,KC4KL,kBAAA,MDvKK,MC0KL,QAAA,mBDrKK,IE8KN,GDLC,kBAAA,MDrKK,ICwKL,UAAA,eCUD,GF5KM,GE2KN,EF1KM,QAAA,ECuKL,OAAA,ECSD,GF3KM,GCsKL,iBAAA,MD/JK,QCkKL,QAAA,KCSD,YFtKU,oBCiKT,iBAAA,eD7JK,OCgKL,OAAA,IAAA,MAAA,KD5JK,OC+JL,gBAAA,mBCSD,UFpKU,UC+JT,iBAAA,eDzJS,mBEkKV,mBDLC,OAAA,IAAA,MAAA,gBEjPD,WACA,YAAA,uBFsPD,IAAA,+CE7OC,IAAK,sDAAuD,4BAA6B,iDAAkD,gBAAiB,gDAAiD,eAAgB,+CAAgD,mBAAoB,2EAA4E,cAE7W,WACA,SAAA,SACA,IAAA,IACA,QAAA,aACA,YAAA,uBACA,WAAA,OACA,YAAA,IACA,YAAA,EAIkC,uBAAA,YAAW,wBAAA,UACX,2BAAW,QAAA,QAEX,uBDuPlC,QAAS,QCtPyB,sBFiPnC,uBEjP8C,QAAA,QACX,wBAAW,QAAA,QACX,wBAAW,QAAA,QACX,2BAAW,QAAA,QACX,yBAAW,QAAA,QACX,wBAAW,QAAA,QACX,wBAAW,QAAA,QACX,yBAAW,QAAA,QACX,wBAAW,QAAA,QACX,uBAAW,QAAA,QACX,6BAAW,QAAA,QACX,uBAAW,QAAA,QACX,uBAAW,QAAA,QACX,2BAAW,QAAA,QACX,qBAAW,QAAA,QACX,0BAAW,QAAA,QACX,qBAAW,QAAA,QACX,yBAAW,QAAA,QACX,0BAAW,QAAA,QACX,2BAAW,QAAA,QACX,sBAAW,QAAA,QACX,yBAAW,QAAA,QACX,sBAAW,QAAA,QACX,wBAAW,QAAA,QACX,uBAAW,QAAA,QACX,uBAAW,QAAA,QACX,uBAAW,QAAA,QACX,uBAAW,QAAA,QACX,+BAAW,QAAA,QACX,2BAAW,QAAA,QACX,yBAAW,QAAA,QACX,wBAAW,QAAA,QACX,8BAAW,QAAA,QACX,yBAAW,QAAA,QACX,0BAAW,QAAA,QACX,2BAAW,QAAA,QACX,uBAAW,QAAA,QACX,uBAAW,QAAA,QACX,6BAAW,QAAA,QACX,6BAAW,QAAA,QACX,8BAAW,QAAA,QACX,4BAAW,QAAA,QACX,yBAAW,QAAA,QACX,0BAAW,QAAA,QACX,sBAAW,QAAA,QACX,uBAAW,QAAA,QACX,uBAAW,QAAA,QACX,2BAAW,QAAA,QACX,wBAAW,QAAA,QACX,yBAAW,QAAA,QACX,uBAAW,QAAA,QACX,uBAAW,QAAA,QACX,yBAAW,QAAA,QACX,8BAAW,QAAA,QACX,6BAAW,QAAA,QACX,6BAAW,QAAA,QACX,+BAAW,QAAA,QACX,8BAAW,QAAA,QACX,gCAAW,QAAA,QACX,uBAAW,QAAA,QACX,8BAAW,QAAA,QACX,+BAAW,QAAA,QACX,iCAAW,QAAA,QACX,0BAAW,QAAA,QACX,6BAAW,QAAA,QACX,yBAAW,QAAA,QACX,uBAAW,QAAA,QACX,uBAAW,QAAA,QACX,wBAAW,QAAA,QACX,wBAAW,QAAA,QACX,uBAAW,QAAA,QACX,gCAAW,QAAA,QACX,gCAAW,QAAA,QACX,2BAAW,QAAA,QACX,uBAAW,QAAA,QACX,wBAAW,QAAA,QACX,uBAAW,QAAA,QACX,0BAAW,QAAA,QACX,+BAAW,QAAA,QACX,+BAAW,QAAA,QACX,wBAAW,QAAA,QACX,+BAAW,QAAA,QACX,gCAAW,QAAA,QACX,4BAAW,QAAA,QACX,6BAAW,QAAA,QACX,8BAAW,QAAA,QACX,0BAAW,QAAA,QACX,gCAAW,QAAA,QACX,4BAAW,QAAA,QACX,6BAAW,QAAA,QACX,gCAAW,QAAA,QACX,4BAAW,QAAA,QACX,6BAAW,QAAA,QACX,6BAAW,QAAA,QACX,8BAAW,QAAA,QACX,2BAAW,QAAA,QACX,6BAAW,QAAA,QACX,4BAAW,QAAA,QACX,8BAAW,QAAA,QACX,+BAAW,QAAA,QACX,mCAAW,QAAA,QACX,uBAAW,QAAA,QACX,uBAAW,QAAA,QACX,uBAAW,QAAA,QACX,2BAAW,QAAA,QACX,4BAAW,QAAA,QACX,+BAAW,QAAA,QACX,wBAAW,QAAA,QACX,2BAAW,QAAA,QACX,yBAAW,QAAA,QACX,0BAAW,QAAA,QACX,yBAAW,QAAA,QACX,6BAAW,QAAA,QACX,+BAAW,QAAA,QACX,0BAAW,QAAA,QACX,gCAAW,QAAA,QACX,+BAAW,QAAA,QACX,8BAAW,QAAA,QACX,kCAAW,QAAA,QACX,oCAAW,QAAA,QACX,sBAAW,QAAA,QACX,2BAAW,QAAA,QACX,uBAAW,QAAA,QACX,8BAAW,QAAA,QACX,4BAAW,QAAA,QACX,8BAAW,QAAA,QACX,6BAAW,QAAA,QACX,4BAAW,QAAA,QACX,0BAAW,QAAA,QACX,4BAAW,QAAA,QACX,qCAAW,QAAA,QACX,oCAAW,QAAA,QACX,kCAAW,QAAA,QACX,oCAAW,QAAA,QACX,wBAAW,QAAA,QACX,yBAAW,QAAA,QACX,wBAAW,QAAA,QACX,yBAAW,QAAA,QACX,4BAAW,QAAA,QACX,6BAAW,QAAA,QACX,4BAAW,QAAA,QACX,4BAAW,QAAA,QACX,8BAAW,QAAA,QACX,uBAAW,QAAA,QACX,wBAAW,QAAA,QACX,0BAAW,QAAA,QACX,sBAAW,QAAA,QACX,sBAAW,QAAA,QACX,uBAAW,QAAA,QACX,mCAAW,QAAA,QACX,uCAAW,QAAA,QACX,gCAAW,QAAA,QACX,oCAAW,QAAA,QACX,qCAAW,QAAA,QACX,yCAAW,QAAA,QACX,4BAAW,QAAA,QACX,yBAAW,QAAA,QACX,gCAAW,QAAA,QACX,8BAAW,QAAA,QACX,yBAAW,QAAA,QACX,wBAAW,QAAA,QACX,0BAAW,QAAA,QACX,6BAAW,QAAA,QACX,yBAAW,QAAA,QACX,uBAAW,QAAA,QACX,uBAAW,QAAA,QACX,wBAAW,QAAA,QACX,yBAAW,QAAA,QACX,yBAAW,QAAA,QACX,uBAAW,QAAA,QACX,8BAAW,QAAA,QACX,+BAAW,QAAA,QACX,gCAAW,QAAA,QACX,8BAAW,QAAA,QACX,8BAAW,QAAA,QACX,8BAAW,QAAA,QACX,2BAAW,QAAA,QACX,0BAAW,QAAA,QACX,yBAAW,QAAA,QACX,6BAAW,QAAA,QACX,2BAAW,QAAA,QACX,4BAAW,QAAA,QACX,wBAAW,QAAA,QACX,wBAAW,QAAA,QACX,2BAAW,QAAA,QACX,2BAAW,QAAA,QACX,4BAAW,QAAA,QACX,+BAAW,QAAA,QACX,8BAAW,QAAA,QACX,4BAAW,QAAA,QACX,4BAAW,QAAA,QACX,4BAAW,QAAA,QACX,iCAAW,QAAA,QACX,oCAAW,QAAA,QACX,iCAAW,QAAA,QACX,+BAAW,QAAA,QACX,+BAAW,QAAA,QACX,iCAAW,QAAA,QACX,qBAAW,QAAA,QACX,4BAAW,QAAA,QACX,4BAAW,QAAA,QACX,2BAAW,QAAA,QACX,uBAAW,QAAA,QASX,wBAAW,QAAA,QACX,wBAAW,QAAA,QACX,4BAAW,QAAA,QACX,uBAAW,QAAA,QACX,wBAAW,QAAA,QACX,uBAAW,QAAA,QACX,yBAAW,QAAA,QACX,yBAAW,QAAA,QACX,+BAAW,QAAA,QACX,uBAAW,QAAA,QACX,6BAAW,QAAA,QACX,sBAAW,QAAA,QACX,wBAAW,QAAA,QACX,wBAAW,QAAA,QACX,4BAAW,QAAA,QACX,uBAAW,QAAA,QACX,4BAAW,QAAA,QACX,6BAAW,QAAA,QACX,2BAAW,QAAA,QACX,0BAAW,QAAA,QACX,sBAAW,QAAA,QACX,sBAAW,QAAA,QACX,sBAAW,QAAA,QACX,sBAAW,QAAA,QACX,wBAAW,QAAA,QACX,sBAAW,QAAA,QACX,wBAAW,QAAA,QACX,4BAAW,QAAA,QACX,mCAAW,QAAA,QACX,4BAAW,QAAA,QACX,oCAAW,QAAA,QACX,kCAAW,QAAA,QACX,iCAAW,QAAA,QACX,+BAAW,QAAA,QACX,sBAAW,QAAA,QACX,wBAAW,QAAA,QACX,6BAAW,QAAA,QACX,4BAAW,QAAA,QACX,6BAAW,QAAA,QACX,kCAAW,QAAA,QACX,mCAAW,QAAA,QACX,sCAAW,QAAA,QACX,0CAAW,QAAA,QACX,oCAAW,QAAA,QACX,wCAAW,QAAA,QACX,qCAAW,QAAA,QACX,iCAAW,QAAA,QACX,gCAAW,QAAA,QACX,kCAAW,QAAA,QACX,+BAAW,QAAA,QACX,0BAAW,QAAA,QACX,8BAAW,QAAA,QACX,4BAAW,QAAA,QACX,4BAAW,QAAA,QACX,6BAAW,QAAA,QACX,4BAAW,QAAA,QCtS/C,0BCgEE,QAAA,QHi+BF,EDNC,mBAAA,WGxhCI,gBAAiB,WFiiCZ,WAAY,WGl+BZ,OADL,QJg+BJ,mBAAA,WGthCI,gBAAiB,WACpB,WAAA,WHyhCD,KGrhCC,UAAW,KAEX,4BAAA,cAEA,KACA,YAAA,iBAAA,UAAA,MAAA,WHuhCD,UAAA,KGnhCC,YAAa,WF4hCb,MAAO,KACP,iBAAkB,KExhClB,OADA,MAEA,OHqhCD,SG/gCC,YAAa,QACb,UAAA,QACA,YAAA,QAEA,EFwhCA,MAAO,QEthCL,gBAAA,KAIF,QH8gCD,QKjkCC,MAAA,QACA,gBAAA,UF6DF,QACE,QAAA,IAAA,KAAA,yBHygCD,eAAA,KGlgCC,OHqgCD,OAAA,ECSD,IACE,eAAgB,ODDjB,4BM/kCC,0BLklCF,gBKnlCE,iBADA,eH4EA,QAAS,MACT,UAAA,KHugCD,OAAA,KGhgCC,aACA,cAAA,IAEA,eACA,QAAA,aC6FA,UAAA,KACK,OAAA,KACG,QAAA,IEvLR,YAAA,WACA,iBAAA,KACA,OAAA,IAAA,MAAA,KN+lCD,cAAA,IGjgCC,mBAAoB,IAAI,IAAI,YAC5B,cAAA,IAAA,IAAA,YHmgCD,WAAA,IAAA,IAAA,YG5/BC,YACA,cAAA,IAEA,GH+/BD,WAAA,KGv/BC,cAAe,KACf,OAAA,EACA,WAAA,IAAA,MAAA,KAEA,SACA,SAAA,SACA,MAAA,IACA,OAAA,IACA,QAAA,EHy/BD,OAAA,KGj/BC,SAAA,OF0/BA,KAAM,cEx/BJ,OAAA,EAEA,0BACA,yBACA,SAAA,OACA,MAAA,KHm/BH,OAAA,KGx+BC,OAAQ,EACR,SAAA,QH0+BD,KAAA,KCSD,cACE,OAAQ,QAQV,IACA,IMlpCE,IACA,IACA,IACA,INwoCF,GACA,GACA,GACA,GACA,GACA,GDAC,YAAA,QOlpCC,YAAa,IN2pCb,YAAa,IACb,MAAO,QAoBT,WAZA,UAaA,WAZA,UM5pCI,WN6pCJ,UM5pCI,WN6pCJ,UM5pCI,WN6pCJ,UDMC,WCLD,UACA,UAZA,SAaA,UAZA,SAaA,UAZA,SAaA,UAZA,SAaA,UAZA,SAaA,UAZA,SMppCE,YAAa,INwqCb,YAAa,EACb,MAAO,KAGT,IMxqCE,IAJF,IN2qCA,GAEA,GDLC,GCSC,WAAY,KACZ,cAAe,KASjB,WANA,UDCC,WCCD,UM5qCA,WN8qCA,UACA,UANA,SM5qCI,UN8qCJ,SM3qCA,UN6qCA,SAQE,UAAW,IAGb,IMprCE,IAJF,INurCA,GAEA,GDLC,GCSC,WAAY,KACZ,cAAe,KASjB,WANA,UDCC,WCCD,UMvrCA,WNyrCA,UACA,UANA,SMxrCI,UN0rCJ,SMtrCA,UNwrCA,SMxrCU,UAAA,IACV,IAAA,GAAU,UAAA,KACV,IAAA,GAAU,UAAA,KACV,IAAA,GAAU,UAAA,KACV,IAAA,GAAU,UAAA,KACV,IAAA,GAAU,UAAA,KAOR,IADF,GPssCC,UAAA,KCSD,EMzsCE,OAAA,EAAA,EAAA,KAEA,MPosCD,cAAA,KO/rCC,UAAW,KAwOX,YAAa,IA1OX,YAAA,IPssCH,yBO7rCC,MNssCE,UAAW,MMjsCf,OAAA,MAEE,UAAA,IAKF,MP0rCC,KO1rCsB,QAAA,KP6rCtB,iBAAA,QO5rCsB,WP+rCtB,WAAA,KO9rCsB,YPisCtB,WAAA,MOhsCsB,aPmsCtB,WAAA,OOlsCsB,cPqsCtB,WAAA,QOlsCsB,aPqsCtB,YAAA,OOpsCsB,gBPusCtB,eAAA,UOtsCsB,gBPysCtB,eAAA,UOrsCC,iBPwsCD,eAAA,WQ3yCC,YR8yCD,MAAA,KCSD,cOpzCI,MAAA,QAHF,qBDwGF,qBP6sCC,MAAA,QCSD,cO3zCI,MAAA,QAHF,qBD2GF,qBPitCC,MAAA,QCSD,WOl0CI,MAAA,QAHF,kBD8GF,kBPqtCC,MAAA,QCSD,cOz0CI,MAAA,QAHF,qBDiHF,qBPytCC,MAAA,QCSD,aOh1CI,MAAA,QDwHF,oBAHF,oBExHE,MAAA,QACA,YR01CA,MAAO,KQx1CL,iBAAA,QAHF,mBF8HF,mBP2tCC,iBAAA,QCSD,YQ/1CI,iBAAA,QAHF,mBFiIF,mBP+tCC,iBAAA,QCSD,SQt2CI,iBAAA,QAHF,gBFoIF,gBPmuCC,iBAAA,QCSD,YQ72CI,iBAAA,QAHF,mBFuIF,mBPuuCC,iBAAA,QCSD,WQp3CI,iBAAA,QF6IF,kBADF,kBAEE,iBAAA,QPsuCD,aO7tCC,eAAgB,INsuChB,OAAQ,KAAK,EAAE,KMpuCf,cAAA,IAAA,MAAA,KAFF,GPkuCC,GCSC,WAAY,EACZ,cAAe,KM9tCf,MP0tCD,MO3tCD,MAPI,MASF,cAAA,EAIF,eALE,aAAA,EACA,WAAA,KPkuCD,aO9tCC,aAAc,EAKZ,YAAA,KACA,WAAA,KP6tCH,gBOvtCC,QAAS,aACT,cAAA,IACA,aAAA,IAEF,GNguCE,WAAY,EM9tCZ,cAAA,KAGA,GADF,GP0tCC,YAAA,WOttCC,GPytCD,YAAA,IOnnCD,GAvFM,YAAA,EAEA,yBACA,kBGtNJ,MAAA,KACA,MAAA,MACA,SAAA,OVq6CC,MAAA,KO7nCC,WAAY,MAhFV,cAAA,SPgtCH,YAAA,OOtsCD,kBNgtCE,YAAa,OM1sCjB,0BPssCC,YOrsCC,OAAA,KA9IqB,cAAA,IAAA,OAAA,KAmJvB,YACE,UAAA,IACA,eAAA,UAEA,WPssCD,QAAA,KAAA,KOjsCG,OAAA,EAAA,EAAA,KN0sCF,UAAW,OACX,YAAa,IAAI,MAAM,KMptCzB,yBP+sCC,wBO/sCD,yBNytCE,cAAe,EMnsCb,kBAFA,kBACA,iBPksCH,QAAA,MO/rCG,UAAA,INwsCF,YAAa,WACb,MAAO,KMhsCT,yBP2rCC,yBO3rCD,wBAEE,QAAA,cAEA,oBACA,sBACA,cAAA,KP6rCD,aAAA,EOvrCG,WAAA,MNgsCF,aAAc,IAAI,MAAM,KACxB,YAAa,EMhsCX,kCNksCJ,kCMnsCe,iCACX,oCNmsCJ,oCDLC,mCCUC,QAAS,GMjsCX,iCNmsCA,iCMzsCM,gCAOJ,mCNmsCF,mCDLC,kCO7rCC,QAAA,cPksCD,QWv+CC,cAAe,KVg/Cf,WAAY,OACZ,YAAa,WU7+Cb,KXy+CD,IWr+CD,IACE,KACA,YAAA,MAAA,OAAA,SAAA,cAAA,UAEA,KACA,QAAA,IAAA,IXu+CD,UAAA,IWn+CC,MAAO,QACP,iBAAA,QACA,cAAA,IAEA,IACA,QAAA,IAAA,IACA,UAAA,IV4+CA,MU5+CA,KXq+CD,iBAAA,KW3+CC,cAAe,IASb,mBAAA,MAAA,EAAA,KAAA,EAAA,gBACA,WAAA,MAAA,EAAA,KAAA,EAAA,gBAEA,QV6+CF,QU7+CE,EXq+CH,UAAA,KWh+CC,YAAa,IACb,mBAAA,KACA,WAAA,KAEA,IACA,QAAA,MACA,QAAA,MACA,OAAA,EAAA,EAAA,KACA,UAAA,KACA,YAAA,WACA,MAAA,KACA,WAAA,UXk+CD,UAAA,WW7+CC,iBAAkB,QAehB,OAAA,IAAA,MAAA,KACA,cAAA,IAEA,SACA,QAAA,EACA,UAAA,QXi+CH,MAAA,QW59CC,YAAa,SACb,iBAAA,YACA,cAAA,EC1DF,gBCHE,WAAA,MACA,WAAA,OAEA,Wb8hDD,cAAA,KYxhDC,aAAA,KAqEA,aAAc,KAvEZ,YAAA,KZ+hDH,yBY1hDC,WAkEE,MAAO,OZ69CV,yBY5hDC,WA+DE,MAAO,OZk+CV,0BYzhDC,WCvBA,MAAA,QAGA,iBbmjDD,cAAA,KYthDC,aAAc,KCvBd,aAAA,KACA,YAAA,KCAE,KACE,aAAA,MAEA,YAAA,MAGA,UAAA,WAAA,WAAA,WAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,WAAA,WAAA,WAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,WAAA,WAAA,WAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,WAAA,WAAA,WAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UdgjDL,SAAA,SchiDG,WAAA,IACE,cAAA,KdkiDL,aAAA,Kc1hDG,UAAA,WAAA,WAAA,WAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,Ud6hDH,MAAA,Kc7hDG,WdgiDH,MAAA,KchiDG,WdmiDH,MAAA,acniDG,WdsiDH,MAAA,actiDG,UdyiDH,MAAA,IcziDG,Ud4iDH,MAAA,ac5iDG,Ud+iDH,MAAA,ac/iDG,UdkjDH,MAAA,IcljDG,UdqjDH,MAAA,acrjDG,UdwjDH,MAAA,acxjDG,Ud2jDH,MAAA,Ic3jDG,Ud8jDH,MAAA,ac/iDG,UdkjDH,MAAA,YcljDG,gBdqjDH,MAAA,KcrjDG,gBdwjDH,MAAA,acxjDG,gBd2jDH,MAAA,ac3jDG,ed8jDH,MAAA,Ic9jDG,edikDH,MAAA,acjkDG,edokDH,MAAA,acpkDG,edukDH,MAAA,IcvkDG,ed0kDH,MAAA,ac1kDG,ed6kDH,MAAA,ac7kDG,edglDH,MAAA,IchlDG,edmlDH,MAAA,ac9kDG,edilDH,MAAA,YchmDG,edmmDH,MAAA,KcnmDG,gBdsmDH,KAAA,KctmDG,gBdymDH,KAAA,aczmDG,gBd4mDH,KAAA,ac5mDG,ed+mDH,KAAA,Ic/mDG,edknDH,KAAA,aclnDG,edqnDH,KAAA,acrnDG,edwnDH,KAAA,IcxnDG,ed2nDH,KAAA,ac3nDG,ed8nDH,KAAA,ac9nDG,edioDH,KAAA,IcjoDG,edooDH,KAAA,ac/nDG,edkoDH,KAAA,YcnnDG,edsnDH,KAAA,KctnDG,kBdynDH,YAAA,KcznDG,kBd4nDH,YAAA,ac5nDG,kBd+nDH,YAAA,ac/nDG,iBdkoDH,YAAA,IcloDG,iBdqoDH,YAAA,acroDG,iBdwoDH,YAAA,acxoDG,iBd2oDH,YAAA,Ic3oDG,iBd8oDH,YAAA,ac9oDG,iBdipDH,YAAA,acjpDG,iBdopDH,YAAA,IcppDG,iBdupDH,YAAA,acvpDG,iBd0pDH,YAAA,Yc5rDG,iBACE,YAAA,EAOJ,yBACE,UAAA,WAAA,WAAA,WAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,Ud0rDD,MAAA,Kc1rDC,Wd6rDD,MAAA,Kc7rDC,WdgsDD,MAAA,achsDC,WdmsDD,MAAA,acnsDC,UdssDD,MAAA,IctsDC,UdysDD,MAAA,aczsDC,Ud4sDD,MAAA,ac5sDC,Ud+sDD,MAAA,Ic/sDC,UdktDD,MAAA,acltDC,UdqtDD,MAAA,acrtDC,UdwtDD,MAAA,IcxtDC,Ud2tDD,MAAA,ac5sDC,Ud+sDD,MAAA,Yc/sDC,gBdktDD,MAAA,KcltDC,gBdqtDD,MAAA,acrtDC,gBdwtDD,MAAA,acxtDC,ed2tDD,MAAA,Ic3tDC,ed8tDD,MAAA,ac9tDC,ediuDD,MAAA,acjuDC,edouDD,MAAA,IcpuDC,eduuDD,MAAA,acvuDC,ed0uDD,MAAA,ac1uDC,ed6uDD,MAAA,Ic7uDC,edgvDD,MAAA,ac3uDC,ed8uDD,MAAA,Yc7vDC,edgwDD,MAAA,KchwDC,gBdmwDD,KAAA,KcnwDC,gBdswDD,KAAA,actwDC,gBdywDD,KAAA,aczwDC,ed4wDD,KAAA,Ic5wDC,ed+wDD,KAAA,ac/wDC,edkxDD,KAAA,aclxDC,edqxDD,KAAA,IcrxDC,edwxDD,KAAA,acxxDC,ed2xDD,KAAA,ac3xDC,ed8xDD,KAAA,Ic9xDC,ediyDD,KAAA,ac5xDC,ed+xDD,KAAA,YchxDC,edmxDD,KAAA,KcnxDC,kBdsxDD,YAAA,KctxDC,kBdyxDD,YAAA,aczxDC,kBd4xDD,YAAA,ac5xDC,iBd+xDD,YAAA,Ic/xDC,iBdkyDD,YAAA,aclyDC,iBdqyDD,YAAA,acryDC,iBdwyDD,YAAA,IcxyDC,iBd2yDD,YAAA,ac3yDC,iBd8yDD,YAAA,ac9yDC,iBdizDD,YAAA,IcjzDC,iBdozDD,YAAA,acpzDC,iBduzDD,YAAA,YY9yDD,iBE3CE,YAAA,GAQF,yBACE,UAAA,WAAA,WAAA,WAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,Udw1DD,MAAA,Kcx1DC,Wd21DD,MAAA,Kc31DC,Wd81DD,MAAA,ac91DC,Wdi2DD,MAAA,acj2DC,Udo2DD,MAAA,Icp2DC,Udu2DD,MAAA,acv2DC,Ud02DD,MAAA,ac12DC,Ud62DD,MAAA,Ic72DC,Udg3DD,MAAA,ach3DC,Udm3DD,MAAA,acn3DC,Uds3DD,MAAA,Ict3DC,Udy3DD,MAAA,ac12DC,Ud62DD,MAAA,Yc72DC,gBdg3DD,MAAA,Kch3DC,gBdm3DD,MAAA,acn3DC,gBds3DD,MAAA,act3DC,edy3DD,MAAA,Icz3DC,ed43DD,MAAA,ac53DC,ed+3DD,MAAA,ac/3DC,edk4DD,MAAA,Icl4DC,edq4DD,MAAA,acr4DC,edw4DD,MAAA,acx4DC,ed24DD,MAAA,Ic34DC,ed84DD,MAAA,acz4DC,ed44DD,MAAA,Yc35DC,ed85DD,MAAA,Kc95DC,gBdi6DD,KAAA,Kcj6DC,gBdo6DD,KAAA,acp6DC,gBdu6DD,KAAA,acv6DC,ed06DD,KAAA,Ic16DC,ed66DD,KAAA,ac76DC,edg7DD,KAAA,ach7DC,edm7DD,KAAA,Icn7DC,eds7DD,KAAA,act7DC,edy7DD,KAAA,acz7DC,ed47DD,KAAA,Ic57DC,ed+7DD,KAAA,ac17DC,ed67DD,KAAA,Yc96DC,edi7DD,KAAA,Kcj7DC,kBdo7DD,YAAA,Kcp7DC,kBdu7DD,YAAA,acv7DC,kBd07DD,YAAA,ac17DC,iBd67DD,YAAA,Ic77DC,iBdg8DD,YAAA,ach8DC,iBdm8DD,YAAA,acn8DC,iBds8DD,YAAA,Ict8DC,iBdy8DD,YAAA,acz8DC,iBd48DD,YAAA,ac58DC,iBd+8DD,YAAA,Ic/8DC,iBdk9DD,YAAA,acl9DC,iBdq9DD,YAAA,YYz8DD,iBE9CE,YAAA,GAQF,0BACE,UAAA,WAAA,WAAA,WAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,Uds/DD,MAAA,Kct/DC,Wdy/DD,MAAA,Kcz/DC,Wd4/DD,MAAA,ac5/DC,Wd+/DD,MAAA,ac//DC,UdkgED,MAAA,IclgEC,UdqgED,MAAA,acrgEC,UdwgED,MAAA,acxgEC,Ud2gED,MAAA,Ic3gEC,Ud8gED,MAAA,ac9gEC,UdihED,MAAA,acjhEC,UdohED,MAAA,IcphEC,UduhED,MAAA,acxgEC,Ud2gED,MAAA,Yc3gEC,gBd8gED,MAAA,Kc9gEC,gBdihED,MAAA,acjhEC,gBdohED,MAAA,acphEC,eduhED,MAAA,IcvhEC,ed0hED,MAAA,ac1hEC,ed6hED,MAAA,ac7hEC,edgiED,MAAA,IchiEC,edmiED,MAAA,acniEC,edsiED,MAAA,actiEC,edyiED,MAAA,IcziEC,ed4iED,MAAA,acviEC,ed0iED,MAAA,YczjEC,ed4jED,MAAA,Kc5jEC,gBd+jED,KAAA,Kc/jEC,gBdkkED,KAAA,aclkEC,gBdqkED,KAAA,acrkEC,edwkED,KAAA,IcxkEC,ed2kED,KAAA,ac3kEC,ed8kED,KAAA,ac9kEC,edilED,KAAA,IcjlEC,edolED,KAAA,acplEC,edulED,KAAA,acvlEC,ed0lED,KAAA,Ic1lEC,ed6lED,KAAA,acxlEC,ed2lED,KAAA,Yc5kEC,ed+kED,KAAA,Kc/kEC,kBdklED,YAAA,KcllEC,kBdqlED,YAAA,acrlEC,kBdwlED,YAAA,acxlEC,iBd2lED,YAAA,Ic3lEC,iBd8lED,YAAA,ac9lEC,iBdimED,YAAA,acjmEC,iBdomED,YAAA,IcpmEC,iBdumED,YAAA,acvmEC,iBd0mED,YAAA,ac1mEC,iBd6mED,YAAA,Ic7mEC,iBdgnED,YAAA,achnEC,iBdmnED,YAAA,YetrED,iBACA,YAAA,GAGA,MACA,iBAAA,YAEA,QfyrED,YAAA,IevrEC,eAAgB,IAChB,MAAA,KfyrED,WAAA,KelrEC,GACA,WAAA,KfsrED,OexrEC,MAAO,KdmsEP,UAAW,KACX,cAAe,KcvrET,mBd0rER,mBczrEQ,mBAHA,mBACA,mBd0rER,mBDHC,QAAA,IensEC,YAAa,WAoBX,eAAA,IACA,WAAA,IAAA,MAAA,KArBJ,mBdktEE,eAAgB,OAChB,cAAe,IAAI,MAAM,KDJ1B,uCCMD,uCcrtEA,wCdstEA,wCclrEI,2CANI,2CforEP,WAAA,EezqEG,mBf4qEH,WAAA,IAAA,MAAA,KCWD,cACE,iBAAkB,Kc/pEpB,6BdkqEA,6BcjqEE,6BAZM,6BfsqEP,6BCMD,6BDHC,QAAA,ICWD,gBACE,OAAQ,IAAI,MAAM,Kc1qEpB,4Bd6qEA,4Bc7qEA,4BAQQ,4Bf8pEP,4BCMD,4Bc7pEM,OAAA,IAAA,MAAA,KAYF,4BAFJ,4BfopEC,oBAAA,IevoEG,yCf0oEH,iBAAA,QehoEC,4BACA,iBAAA,QfooED,uBe9nEG,SAAA,OdyoEF,QAAS,acxoEL,MAAA,KAEA,sBfioEL,sBgB7wEC,SAAA,OfwxEA,QAAS,WACT,MAAO,KAST,0BerxEE,0Bf+wEF,0BAGA,0BexxEM,0BAMJ,0BfgxEF,0BAGA,0BACA,0BDNC,0BCAD,0BAGA,0BASE,iBAAkB,QDLnB,sCgBlyEC,sCAAA,oCfyyEF,sCetxEM,sCf2xEJ,iBAAkB,QASpB,2Be1yEE,2BfoyEF,2BAGA,2Be7yEM,2BAMJ,2BfqyEF,2BAGA,2BACA,2BDNC,2BCAD,2BAGA,2BASE,iBAAkB,QDLnB,uCgBvzEC,uCAAA,qCf8zEF,uCe3yEM,uCfgzEJ,iBAAkB,QASpB,wBe/zEE,wBfyzEF,wBAGA,wBel0EM,wBAMJ,wBf0zEF,wBAGA,wBACA,wBDNC,wBCAD,wBAGA,wBASE,iBAAkB,QDLnB,oCgB50EC,oCAAA,kCfm1EF,oCeh0EM,oCfq0EJ,iBAAkB,QASpB,2Bep1EE,2Bf80EF,2BAGA,2Bev1EM,2BAMJ,2Bf+0EF,2BAGA,2BACA,2BDNC,2BCAD,2BAGA,2BASE,iBAAkB,QDLnB,uCgBj2EC,uCAAA,qCfw2EF,uCer1EM,uCf01EJ,iBAAkB,QASpB,0Bez2EE,0Bfm2EF,0BAGA,0Be52EM,0BAMJ,0Bfo2EF,0BAGA,0BACA,0BDNC,0BCAD,0BAGA,0BASE,iBAAkB,QDLnB,sCehtEC,sCADF,oCdwtEA,sCe12EM,sCDoJJ,iBAAA,QA6DF,kBACE,WAAY,KA3DV,WAAA,KAEA,oCACA,kBACA,MAAA,KfotED,cAAA,Ke7pEC,WAAY,OAnDV,mBAAA,yBfmtEH,OAAA,IAAA,MAAA,KCWD,yBACE,cAAe,Ec5qEjB,qCd+qEA,qCcjtEI,qCARM,qCfktET,qCCMD,qCDHC,YAAA,OCWD,kCACE,OAAQ,EcvrEV,0Dd0rEA,0Dc1rEA,0DAzBU,0Df4sET,0DCMD,0DAME,YAAa,Ec/rEf,yDdksEA,yDclsEA,yDArBU,yDfgtET,yDCMD,yDAME,aAAc,EDLjB,yDe1sEW,yDEzNV,yDjBk6EC,yDiBj6ED,cAAA,GAMA,SjBk6ED,UAAA,EiB/5EC,QAAS,EACT,OAAA,EACA,OAAA,EAEA,OACA,QAAA,MACA,MAAA,KACA,QAAA,EACA,cAAA,KACA,UAAA,KjBi6ED,YAAA,QiB95EC,MAAO,KACP,OAAA,EACA,cAAA,IAAA,MAAA,QAEA,MjBg6ED,QAAA,aiBr5EC,UAAW,Kb4BX,cAAA,IACG,YAAA,IJ63EJ,mBiBr5EC,mBAAoB,WhBg6EjB,gBAAiB,WgB95EpB,WAAA,WjBy5ED,qBiBv5EC,kBAGA,OAAQ,IAAI,EAAE,EACd,WAAA,MjBs5ED,YAAA,OiBj5EC,iBACA,QAAA,MAIF,kBhB25EE,QAAS,MgBz5ET,MAAA,KAIF,iBAAA,ahB05EE,OAAQ,KI99ER,uBY2EF,2BjB64EC,wBiB54EC,QAAA,IAAA,KAAA,yBACA,eAAA,KAEA,OACA,QAAA,MjB+4ED,YAAA,IiBr3EC,UAAW,KACX,YAAA,WACA,MAAA,KAEA,cACA,QAAA,MACA,MAAA,KACA,OAAA,KACA,QAAA,IAAA,KACA,UAAA,KACA,YAAA,WACA,MAAA,KbxDA,iBAAA,KACQ,iBAAA,KAyHR,OAAA,IAAA,MAAA,KACK,cAAA,IACG,mBAAA,MAAA,EAAA,IAAA,IAAA,iBJwzET,WAAA,MAAA,EAAA,IAAA,IAAA,iBkBh8EC,mBAAA,aAAA,YAAA,KAAA,mBAAA,YAAA,KACE,cAAA,aAAA,YAAA,KAAA,WAAA,YAAA,KACA,WAAA,aAAA,YAAA,KAAA,WAAA,YAAA,KdWM,oBJy7ET,aAAA,QIx5EC,QAAA,EACE,mBAAA,MAAA,EAAA,IAAA,IAAA,iBAAA,EAAA,EAAA,IAAA,qBACA,WAAA,MAAA,EAAA,IAAA,IAAA,iBAAA,EAAA,EAAA,IAAA,qBAEF,gCAA0B,MAAA,KJ25E3B,QAAA,EI15EiC,oCJ65EjC,MAAA,KiBh4EG,yCACA,MAAA,KAQF,0BhBs4EA,iBAAkB,YAClB,OAAQ,EgBn4EN,wBjB63EH,wBiB13EC,iChBq4EA,iBAAkB,KgBn4EhB,QAAA,EAIF,wBACE,iCjB03EH,OAAA,YiB72EC,sBjBg3ED,OAAA,KiB91EG,mBhB02EF,mBAAoB,KAEtB,qDgB32EM,8BjBo2EH,8BiBj2EC,wCAAA,+BhB62EA,YAAa,KgB32EX,iCjBy2EH,iCiBt2EC,2CAAA,kChB02EF,0BACA,0BACA,oCACA,2BAKE,YAAa,KgBh3EX,iCjB82EH,iCACF,2CiBp2EC,kChBu2EA,0BACA,0BACA,oCACA,2BgBz2EA,YAAA,MhBi3EF,YgBv2EE,cAAA,KAGA,UADA,OjBi2ED,SAAA,SiBr2EC,QAAS,MhBg3ET,WAAY,KgBx2EV,cAAA,KAGA,gBADA,aAEA,WAAA,KjBi2EH,aAAA,KiB91EC,cAAe,EhBy2Ef,YAAa,IACb,OAAQ,QgBp2ER,+BjBg2ED,sCiBl2EC,yBACA,gCAIA,SAAU,ShBw2EV,WAAY,MgBt2EZ,YAAA,MAIF,oBAAA,cAEE,WAAA,KAGA,iBADA,cAEA,SAAA,SACA,QAAA,aACA,aAAA,KjB61ED,cAAA,EiB31EC,YAAa,IhBs2Eb,eAAgB,OgBp2EhB,OAAA,QAUA,kCjBo1ED,4BCWC,WAAY,EACZ,YAAa,KgBv1Eb,wCAAA,qCjBm1ED,8BCOD,+BgBh2EI,2BhB+1EJ,4BAME,OAAQ,YDNT,0BiBv1EG,uBAMF,oCAAA,iChB61EA,OAAQ,YDNT,yBiBp1EK,sBAaJ,mCAFF,gCAGE,OAAA,YAGA,qBjBy0ED,WAAA,KiBv0EC,YAAA,IhBk1EA,eAAgB,IgBh1Ed,cAAA,EjB00EH,8BiB5zED,8BCnQE,cAAA,EACA,aAAA,EAEA,UACA,OAAA,KlBkkFD,QAAA,IAAA,KkBhkFC,UAAA,KACE,YAAA,IACA,cAAA,IAGF,gBjB0kFA,OAAQ,KiBxkFN,YAAA,KD2PA,0BAFJ,kBAGI,OAAA,KAEA,6BACA,OAAA,KjBy0EH,QAAA,IAAA,KiB/0EC,UAAW,KAST,YAAA,IACA,cAAA,IAVJ,mChB81EE,OAAQ,KgBh1EN,YAAA,KAGA,6CAjBJ,qCAkBI,OAAA,KAEA,oCACA,OAAA,KjBy0EH,WAAA,KiBr0EC,QAAS,IAAI,KC/Rb,UAAA,KACA,YAAA,IAEA,UACA,OAAA,KlBumFD,QAAA,KAAA,KkBrmFC,UAAA,KACE,YAAA,UACA,cAAA,IAGF,gBjB+mFA,OAAQ,KiB7mFN,YAAA,KDuRA,0BAFJ,kBAGI,OAAA,KAEA,6BACA,OAAA,KjBk1EH,QAAA,KAAA,KiBx1EC,UAAW,KAST,YAAA,UACA,cAAA,IAVJ,mChBu2EE,OAAQ,KgBz1EN,YAAA,KAGA,6CAjBJ,qCAkBI,OAAA,KAEA,oCACA,OAAA,KjBk1EH,WAAA,KiBz0EC,QAAS,KAAK,KAEd,UAAA,KjB00ED,YAAA,UiBt0EG,cjBy0EH,SAAA,SiBp0EC,4BACA,cAAA,OAEA,uBACA,SAAA,SACA,IAAA,EACA,MAAA,EACA,QAAA,EACA,QAAA,MACA,MAAA,KjBu0ED,OAAA,KiBr0EC,YAAa,KhBg1Eb,WAAY,OACZ,eAAgB,KDLjB,oDiBv0EC,uCADA,iCAGA,MAAO,KhBg1EP,OAAQ,KACR,YAAa,KDLd,oDiBv0EC,uCADA,iCAKA,MAAO,KhB80EP,OAAQ,KACR,YAAa,KAKf,uBAEA,8BAJA,4BADA,yBAEA,oBAEA,2BDNC,4BkBruFG,mCAJA,yBD0ZJ,gCbvWE,MAAA,QJ2rFD,2BkBxuFG,aAAA,QACE,mBAAA,MAAA,EAAA,IAAA,IAAA,iBd4CJ,WAAA,MAAA,EAAA,IAAA,IAAA,iBJgsFD,iCiBz1EC,aAAc,QC5YZ,mBAAA,MAAA,EAAA,IAAA,IAAA,iBAAA,EAAA,EAAA,IAAA,QACA,WAAA,MAAA,EAAA,IAAA,IAAA,iBAAA,EAAA,EAAA,IAAA,QlByuFH,gCiB91EC,MAAO,QCtYL,iBAAA,QlBuuFH,aAAA,QCWD,oCACE,MAAO,QAKT,uBAEA,8BAJA,4BADA,yBAEA,oBAEA,2BDNC,4BkBnwFG,mCAJA,yBD6ZJ,gCb1WE,MAAA,QJytFD,2BkBtwFG,aAAA,QACE,mBAAA,MAAA,EAAA,IAAA,IAAA,iBd4CJ,WAAA,MAAA,EAAA,IAAA,IAAA,iBJ8tFD,iCiBp3EC,aAAc,QC/YZ,mBAAA,MAAA,EAAA,IAAA,IAAA,iBAAA,EAAA,EAAA,IAAA,QACA,WAAA,MAAA,EAAA,IAAA,IAAA,iBAAA,EAAA,EAAA,IAAA,QlBuwFH,gCiBz3EC,MAAO,QCzYL,iBAAA,QlBqwFH,aAAA,QCWD,oCACE,MAAO,QAKT,qBAEA,4BAJA,0BADA,uBAEA,kBAEA,yBDNC,0BkBjyFG,iCAJA,uBDgaJ,8Bb7WE,MAAA,QJuvFD,yBkBpyFG,aAAA,QACE,mBAAA,MAAA,EAAA,IAAA,IAAA,iBd4CJ,WAAA,MAAA,EAAA,IAAA,IAAA,iBJ4vFD,+BiB/4EC,aAAc,QClZZ,mBAAA,MAAA,EAAA,IAAA,IAAA,iBAAA,EAAA,EAAA,IAAA,QACA,WAAA,MAAA,EAAA,IAAA,IAAA,iBAAA,EAAA,EAAA,IAAA,QlBqyFH,8BiBp5EC,MAAO,QC5YL,iBAAA,QlBmyFH,aAAA,QiB/4EG,kCjBk5EH,MAAA,QiB/4EG,2CjBk5EH,IAAA,KiBv4EC,mDACA,IAAA,EAEA,YjB04ED,QAAA,MiBvzEC,WAAY,IAwEZ,cAAe,KAtIX,MAAA,QAEA,yBjBy3EH,yBiBrvEC,QAAS,aA/HP,cAAA,EACA,eAAA,OjBw3EH,2BiB1vEC,QAAS,aAxHP,MAAA,KjBq3EH,eAAA,OiBj3EG,kCACA,QAAA,aAmHJ,0BhB4wEE,QAAS,aACT,eAAgB,OgBr3Ed,wCjB82EH,6CiBtwED,2CjBywEC,MAAA,KiB72EG,wCACA,MAAA,KAmGJ,4BhBwxEE,cAAe,EgBp3Eb,eAAA,OAGA,uBADA,oBjB82EH,QAAA,aiBpxEC,WAAY,EhB+xEZ,cAAe,EgBr3EX,eAAA,OAsFN,6BAAA,0BAjFI,aAAA,EAiFJ,4CjB6xEC,sCiBx2EG,SAAA,SjB22EH,YAAA,EiBh2ED,kDhB42EE,IAAK,GgBl2EL,2BjB+1EH,kCiBh2EG,wBAEA,+BAXF,YAAa,IhBo3Eb,WAAY,EgBn2EV,cAAA,EJviBF,2BIshBF,wBJrhBE,WAAA,KI4jBA,6BAyBA,aAAc,MAnCV,YAAA,MAEA,yBjBw1EH,gCACF,YAAA,IiBx3EG,cAAe,EAwCf,WAAA,OAwBJ,sDAdQ,MAAA,KjB80EL,yBACF,+CiBn0EC,YAAA,KAEE,UAAW,MjBs0EZ,yBACF,+CmBp6FG,YAAa,IACf,UAAA,MAGA,KACA,QAAA,aACA,QAAA,IAAA,KAAA,cAAA,EACA,UAAA,KACA,YAAA,IACA,YAAA,WACA,WAAA,OC0CA,YAAA,OACA,eAAA,OACA,iBAAA,aACA,aAAA,ahB+JA,OAAA,QACG,oBAAA,KACC,iBAAA,KACI,gBAAA,KJ+tFT,YAAA,KmBv6FG,iBAAA,KlBm7FF,OAAQ,IAAI,MAAM,YAClB,cAAe,IkB96Ff,kBdzBA,kBACA,WLk8FD,kBCOD,kBADA,WAME,QAAS,IAAI,KAAK,yBAClB,eAAgB,KkBh7FhB,WnBy6FD,WmB56FG,WlBw7FF,MAAO,KkBn7FL,gBAAA,Kf6BM,YADR,YJk5FD,iBAAA,KmBz6FC,QAAA,ElBq7FA,mBAAoB,MAAM,EAAE,IAAI,IAAI,iBAC5B,WAAY,MAAM,EAAE,IAAI,IAAI,iBoBh+FpC,cAGA,ejB8DA,wBACQ,OAAA,YJ05FT,OAAA,kBmBz6FG,mBAAA,KlBq7FM,WAAY,KkBn7FhB,QAAA,IASN,eC3DE,yBACA,eAAA,KpBi+FD,aoB99FC,MAAA,KnB0+FA,iBAAkB,KmBx+FhB,aAAA,KpBk+FH,mBoBh+FO,mBAEN,MAAA,KACE,iBAAA,QACA,aAAA,QpBi+FH,mBoB99FC,MAAA,KnB0+FA,iBAAkB,QAClB,aAAc,QmBt+FR,oBADJ,oBpBi+FH,mCoB99FG,MAAA,KnB0+FF,iBAAkB,QAClB,aAAc,QmBt+FN,0BnB4+FV,0BAHA,0BmB1+FM,0BnB4+FN,0BAHA,0BDFC,yCoBx+FK,yCnB4+FN,yCmBv+FE,MAAA,KnB++FA,iBAAkB,QAClB,aAAc,QmBx+FZ,oBpBg+FH,oBoBh+FG,mCnB6+FF,iBAAkB,KmBz+FV,4BnB8+FV,4BAHA,4BDHC,6BCOD,6BAHA,6BkB39FA,sCClBM,sCnB8+FN,sCmBx+FI,iBAAA,KACA,aAAA,KDcJ,oBC9DE,MAAA,KACA,iBAAA,KpB0hGD,aoBvhGC,MAAA,KnBmiGA,iBAAkB,QmBjiGhB,aAAA,QpB2hGH,mBoBzhGO,mBAEN,MAAA,KACE,iBAAA,QACA,aAAA,QpB0hGH,mBoBvhGC,MAAA,KnBmiGA,iBAAkB,QAClB,aAAc,QmB/hGR,oBADJ,oBpB0hGH,mCoBvhGG,MAAA,KnBmiGF,iBAAkB,QAClB,aAAc,QmB/hGN,0BnBqiGV,0BAHA,0BmBniGM,0BnBqiGN,0BAHA,0BDFC,yCoBjiGK,yCnBqiGN,yCmBhiGE,MAAA,KnBwiGA,iBAAkB,QAClB,aAAc,QmBjiGZ,oBpByhGH,oBoBzhGG,mCnBsiGF,iBAAkB,KmBliGV,4BnBuiGV,4BAHA,4BDHC,6BCOD,6BAHA,6BkBjhGA,sCCrBM,sCnBuiGN,sCmBjiGI,iBAAA,QACA,aAAA,QDkBJ,oBClEE,MAAA,QACA,iBAAA,KpBmlGD,aoBhlGC,MAAA,KnB4lGA,iBAAkB,QmB1lGhB,aAAA,QpBolGH,mBoBllGO,mBAEN,MAAA,KACE,iBAAA,QACA,aAAA,QpBmlGH,mBoBhlGC,MAAA,KnB4lGA,iBAAkB,QAClB,aAAc,QmBxlGR,oBADJ,oBpBmlGH,mCoBhlGG,MAAA,KnB4lGF,iBAAkB,QAClB,aAAc,QmBxlGN,0BnB8lGV,0BAHA,0BmB5lGM,0BnB8lGN,0BAHA,0BDFC,yCoB1lGK,yCnB8lGN,yCmBzlGE,MAAA,KnBimGA,iBAAkB,QAClB,aAAc,QmB1lGZ,oBpBklGH,oBoBllGG,mCnB+lGF,iBAAkB,KmB3lGV,4BnBgmGV,4BAHA,4BDHC,6BCOD,6BAHA,6BkBtkGA,sCCzBM,sCnBgmGN,sCmB1lGI,iBAAA,QACA,aAAA,QDsBJ,oBCtEE,MAAA,QACA,iBAAA,KpB4oGD,UoBzoGC,MAAA,KnBqpGA,iBAAkB,QmBnpGhB,aAAA,QpB6oGH,gBoB3oGO,gBAEN,MAAA,KACE,iBAAA,QACA,aAAA,QpB4oGH,gBoBzoGC,MAAA,KnBqpGA,iBAAkB,QAClB,aAAc,QmBjpGR,iBADJ,iBpB4oGH,gCoBzoGG,MAAA,KnBqpGF,iBAAkB,QAClB,aAAc,QmBjpGN,uBnBupGV,uBAHA,uBmBrpGM,uBnBupGN,uBAHA,uBDFC,sCoBnpGK,sCnBupGN,sCmBlpGE,MAAA,KnB0pGA,iBAAkB,QAClB,aAAc,QmBnpGZ,iBpB2oGH,iBoB3oGG,gCnBwpGF,iBAAkB,KmBppGV,yBnBypGV,yBAHA,yBDHC,0BCOD,0BAHA,0BkB3nGA,mCC7BM,mCnBypGN,mCmBnpGI,iBAAA,QACA,aAAA,QD0BJ,iBC1EE,MAAA,QACA,iBAAA,KpBqsGD,aoBlsGC,MAAA,KnB8sGA,iBAAkB,QmB5sGhB,aAAA,QpBssGH,mBoBpsGO,mBAEN,MAAA,KACE,iBAAA,QACA,aAAA,QpBqsGH,mBoBlsGC,MAAA,KnB8sGA,iBAAkB,QAClB,aAAc,QmB1sGR,oBADJ,oBpBqsGH,mCoBlsGG,MAAA,KnB8sGF,iBAAkB,QAClB,aAAc,QmB1sGN,0BnBgtGV,0BAHA,0BmB9sGM,0BnBgtGN,0BAHA,0BDFC,yCoB5sGK,yCnBgtGN,yCmB3sGE,MAAA,KnBmtGA,iBAAkB,QAClB,aAAc,QmB5sGZ,oBpBosGH,oBoBpsGG,mCnBitGF,iBAAkB,KmB7sGV,4BnBktGV,4BAHA,4BDHC,6BCOD,6BAHA,6BkBhrGA,sCCjCM,sCnBktGN,sCmB5sGI,iBAAA,QACA,aAAA,QD8BJ,oBC9EE,MAAA,QACA,iBAAA,KpB8vGD,YoB3vGC,MAAA,KnBuwGA,iBAAkB,QmBrwGhB,aAAA,QpB+vGH,kBoB7vGO,kBAEN,MAAA,KACE,iBAAA,QACA,aAAA,QpB8vGH,kBoB3vGC,MAAA,KnBuwGA,iBAAkB,QAClB,aAAc,QmBnwGR,mBADJ,mBpB8vGH,kCoB3vGG,MAAA,KnBuwGF,iBAAkB,QAClB,aAAc,QmBnwGN,yBnBywGV,yBAHA,yBmBvwGM,yBnBywGN,yBAHA,yBDFC,wCoBrwGK,wCnBywGN,wCmBpwGE,MAAA,KnB4wGA,iBAAkB,QAClB,aAAc,QmBrwGZ,mBpB6vGH,mBoB7vGG,kCnB0wGF,iBAAkB,KmBtwGV,2BnB2wGV,2BAHA,2BDHC,4BCOD,4BAHA,4BkBruGA,qCCrCM,qCnB2wGN,qCmBrwGI,iBAAA,QACA,aAAA,QDuCJ,mBACE,MAAA,QACA,iBAAA,KnB+tGD,UmB5tGC,YAAA,IlBwuGA,MAAO,QACP,cAAe,EAEjB,UGzwGE,iBemCE,iBflCM,oBJkwGT,6BmB7tGC,iBAAA,YlByuGA,mBAAoB,KACZ,WAAY,KkBtuGlB,UAEF,iBAAA,gBnB6tGD,gBmB3tGG,aAAA,YnBiuGH,gBmB/tGG,gBAIA,MAAA,QlBuuGF,gBAAiB,UACjB,iBAAkB,YDNnB,0BmBhuGK,0BAUN,mCATM,mClB2uGJ,MAAO,KmB1yGP,gBAAA,KAGA,mBADA,QpBmyGD,QAAA,KAAA,KmBztGC,UAAW,KlBquGX,YAAa,UmBjzGb,cAAA,IAGA,mBADA,QpB0yGD,QAAA,IAAA,KmB5tGC,UAAW,KlBwuGX,YAAa,ImBxzGb,cAAA,IAGA,mBADA,QpBizGD,QAAA,IAAA,ImB3tGC,UAAW,KACX,YAAA,IACA,cAAA,IAIF,WACE,QAAA,MnB2tGD,MAAA,KCYD,sBACE,WAAY,IqBz3GZ,6BADF,4BtBk3GC,6BI7rGC,MAAA,KAEQ,MJisGT,QAAA,EsBr3GC,mBAAA,QAAA,KAAA,OACE,cAAA,QAAA,KAAA,OtBu3GH,WAAA,QAAA,KAAA,OsBl3GC,StBq3GD,QAAA,EsBn3Ga,UtBs3Gb,QAAA,KsBr3Ga,atBw3Gb,QAAA,MsBv3Ga,etB03Gb,QAAA,UsBt3GC,kBACA,QAAA,gBlBwKA,YACQ,SAAA,SAAA,OAAA,EAOR,SAAA,OACQ,mCAAA,KAAA,8BAAA,KAGR,2BAAA,KACQ,4BAAA,KAAA,uBAAA,KJ2sGT,oBAAA,KuBr5GC,4BAA6B,OAAQ,WACrC,uBAAA,OAAA,WACA,oBAAA,OAAA,WAEA,OACA,QAAA,aACA,MAAA,EACA,OAAA,EACA,YAAA,IACA,eAAA,OvBu5GD,WAAA,IAAA,OuBn5GC,WAAY,IAAI,QtBk6GhB,aAAc,IAAI,MAAM,YsBh6GxB,YAAA,IAAA,MAAA,YAKA,UADF,QvBo5GC,SAAA,SuB94GC,uBACA,QAAA,EAEA,eACA,SAAA,SACA,IAAA,KACA,KAAA,EACA,QAAA,KACA,QAAA,KACA,MAAA,KACA,UAAA,MACA,QAAA,IAAA,EACA,OAAA,IAAA,EAAA,EACA,UAAA,KACA,WAAA,KACA,WAAA,KnBsBA,iBAAA,KACQ,wBAAA,YmBrBR,gBAAA,YtB+5GA,OsB/5GA,IAAA,MAAA,KvBk5GD,OAAA,IAAA,MAAA,gBuB74GC,cAAA,IACE,mBAAA,EAAA,IAAA,KAAA,iBACA,WAAA,EAAA,IAAA,KAAA,iBAzBJ,0BCzBE,MAAA,EACA,KAAA,KAEA,wBxBo8GD,OAAA,IuB96GC,OAAQ,IAAI,EAmCV,SAAA,OACA,iBAAA,QAEA,oBACA,QAAA,MACA,QAAA,IAAA,KACA,MAAA,KvB84GH,YAAA,IuBx4GC,YAAA,WtBw5GA,MAAO,KsBt5GL,YAAA,OvB44GH,0BuB14GG,0BAMF,MAAA,QtBo5GA,gBAAiB,KACjB,iBAAkB,QsBj5GhB,yBAEA,+BADA,+BvBu4GH,MAAA,KuB73GC,gBAAA,KtB64GA,iBAAkB,QAClB,QAAS,EDZV,2BuB33GC,iCAAA,iCAEE,MAAA,KEzGF,iCF2GE,iCAEA,gBAAA,KvB63GH,OAAA,YuBx3GC,iBAAkB,YAGhB,iBAAA,KvBw3GH,OAAA,0DuBn3GG,qBvBs3GH,QAAA,MuB72GC,QACA,QAAA,EAQF,qBACE,MAAA,EACA,KAAA,KAIF,oBACE,MAAA,KACA,KAAA,EAEA,iBACA,QAAA,MACA,QAAA,IAAA,KvBw2GD,UAAA,KuBp2GC,YAAa,WACb,MAAA,KACA,YAAA,OAEA,mBACA,SAAA,MACA,IAAA,EvBs2GD,MAAA,EuBl2GC,OAAQ,EACR,KAAA,EACA,QAAA,IAQF,2BtB42GE,MAAO,EsBx2GL,KAAA,KAEA,eACA,sCvB41GH,QAAA,GuBn2GC,WAAY,EtBm3GZ,cAAe,IAAI,OsBx2GjB,cAAA,IAAA,QAEA,uBvB41GH,8CuBv0GC,IAAK,KAXL,OAAA,KApEA,cAAA,IvB25GC,yBuBv1GD,6BA1DA,MAAA,EACA,KAAA,KvBq5GD,kC0BpiHG,MAAO,KzBojHP,KAAM,GyBhjHR,W1BsiHD,oB0B1iHC,SAAU,SzB0jHV,QAAS,ayBpjHP,eAAA,OAGA,yB1BsiHH,gBCgBC,SAAU,SACV,MAAO,KyB7iHT,gC1BsiHC,gCCYD,+BAFA,+ByBhjHA,uBANM,uBzBujHN,sBAFA,sBAQE,QAAS,EyBljHP,qB1BuiHH,2B0BliHD,2BACE,iC1BoiHD,YAAA,KCgBD,aACE,YAAa,KDZd,kB0B1iHD,wBAAA,0BzB2jHE,MAAO,KDZR,kB0B/hHD,wBACE,0B1BiiHD,YAAA,I0B5hHC,yE1B+hHD,cAAA,E2BhlHC,4BACG,YAAA,EDsDL,mEzB6iHE,wBAAyB,E0B5lHzB,2BAAA,E3BilHD,6C0B5hHD,8CACE,uBAAA,E1B8hHD,0BAAA,E0B3hHC,sB1B8hHD,MAAA,KCgBD,8D0B/mHE,cAAA,E3BomHD,mE0B3hHD,oECjEE,wBAAA,EACG,2BAAA,EDqEL,oEzB0iHE,uBAAwB,EyBxiHxB,0BAAA,EAiBF,mCACE,iCACA,QAAA,EAEF,iCACE,cAAA,IACA,aAAA,IAKF,oCtB/CE,cAAA,KACQ,aAAA,KsBkDR,iCtBnDA,mBAAA,MAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,iBsByDV,0CACE,mBAAA,K1BugHD,WAAA,K0BngHC,YACA,YAAA,EAGF,eACE,aAAA,IAAA,IAAA,E1BqgHD,oBAAA,ECgBD,uBACE,aAAc,EAAE,IAAI,IyB1gHlB,yBACA,+BACA,oC1B+/GH,QAAA,M0BtgHC,MAAO,KAcH,MAAA,K1B2/GL,UAAA,KCgBD,oCACE,MAAO,KyBpgHL,8BACA,oC1By/GH,oC0Bp/GC,0CACE,WAAA,K1Bs/GH,YAAA,E2B/pHC,4DACC,cAAA,EAQA,sD3B4pHF,uBAAA,I0Bt/GC,wBAAA,IC/KA,2BAAA,EACC,0BAAA,EAQA,sD3BkqHF,uBAAA,E0Bv/GC,wBAAyB,EACzB,2BAAA,I1By/GD,0BAAA,ICgBD,uE0BtrHE,cAAA,E3B2qHD,4E0Bt/GD,6EC7LE,2BAAA,EACC,0BAAA,EDoMH,6EACE,uBAAA,EACA,wBAAA,EAEA,qB1Bo/GD,QAAA,M0Bx/GC,MAAO,KzBwgHP,aAAc,MyBjgHZ,gBAAA,SAEA,0B1Bq/GH,gC0B9/GC,QAAS,WAYP,MAAA,K1Bq/GH,MAAA,G0Bj/GG,qC1Bo/GH,MAAA,KCgBD,+CACE,KAAM,KyB7+GF,gDAFA,6C1Bs+GL,2D0Br+GK,wDEzOJ,SAAU,SACV,KAAA,cACA,eAAA,K5BitHD,a4B7sHC,SAAA,SACE,QAAA,MACA,gBAAA,S5BgtHH,0B4BxtHC,MAAO,KAeL,cAAA,EACA,aAAA,EAOA,2BACA,SAAA,S5BusHH,QAAA,E4BrsHG,MAAA,KACE,MAAA,K5BusHL,cAAA,ECgBD,iCACE,QAAS,EiBnrHT,8BACA,mCACA,sCACA,OAAA,KlBwqHD,QAAA,KAAA,KkBtqHC,UAAA,KjBsrHA,YAAa,UACb,cAAe,IiBrrHb,oClB0qHH,yCkBvqHC,4CjBurHA,OAAQ,KACR,YAAa,KDTd,8C4B/sHD,mDAAA,sD3B0tHA,sCACA,2CiBzrHI,8CjB8rHF,OAAQ,KiB1sHR,8BACA,mCACA,sCACA,OAAA,KlB+rHD,QAAA,IAAA,KkB7rHC,UAAA,KjB6sHA,YAAa,IACb,cAAe,IiB5sHb,oClBisHH,yCkB9rHC,4CjB8sHA,OAAQ,KACR,YAAa,KDTd,8C4B7tHD,mDAAA,sD3BwuHA,sCACA,2CiBhtHI,8CjBqtHF,OAAQ,K2BzuHR,2B5B6tHD,mB4B7tHC,iB3B8uHA,QAAS,W2BzuHX,8D5B6tHC,sD4B7tHD,oDAEE,cAAA,EAEA,mB5B+tHD,iB4B1tHC,MAAO,GACP,YAAA,OACA,eAAA,OAEA,mBACA,QAAA,IAAA,KACA,UAAA,KACA,YAAA,IACA,YAAA,EACA,MAAA,K5B4tHD,WAAA,O4BztHC,iBAAA,KACE,OAAA,IAAA,MAAA,KACA,cAAA,I5B4tHH,4B4BztHC,QAAA,IAAA,KACE,UAAA,KACA,cAAA,I5B4tHH,4B4B/uHC,QAAS,KAAK,K3B+vHd,UAAW,K2BruHT,cAAA,IAKJ,wCAAA,qC3BquHE,WAAY,EAEd,uCACA,+BACA,kC0B70HE,6CACG,8CC4GL,6D5BqtHC,wE4BptHC,wBAAA,E5ButHD,2BAAA,ECgBD,+BACE,aAAc,EAEhB,sCACA,8B2BhuHA,+D5BstHC,oDCWD,iC0Bl1HE,4CACG,6CCiHH,uBAAA,E5BwtHD,0BAAA,E4BltHC,8BAGA,YAAA,E5BotHD,iB4BxtHC,SAAU,SAUR,UAAA,E5BitHH,YAAA,O4B/sHK,sB5BktHL,SAAA,SCgBD,2BACE,YAAa,K2BxtHb,6BAAA,4B5B4sHD,4B4BzsHK,QAAA,EAGJ,kCAAA,wCAGI,aAAA,K5B4sHL,iC6B12HD,uCACE,QAAA,EACA,YAAA,K7B62HD,K6B/2HC,aAAc,EAOZ,cAAA,EACA,WAAA,KARJ,QAWM,SAAA,SACA,QAAA,M7B42HL,U6B12HK,SAAA,S5B03HJ,QAAS,M4Bx3HH,QAAA,KAAA,KAMJ,gB7Bu2HH,gB6Bt2HK,gBAAA,K7By2HL,iBAAA,KCgBD,mB4Br3HQ,MAAA,KAGA,yBADA,yB7B02HP,MAAA,K6Bl2HG,gBAAA,K5Bk3HF,OAAQ,YACR,iBAAkB,Y4B/2Hd,aAzCN,mB7B64HC,mBwBh5HC,iBAAA,KACA,aAAA,QAEA,kBxBm5HD,OAAA,I6Bn5HC,OAAQ,IAAI,EA0DV,SAAA,O7B41HH,iBAAA,Q6Bl1HC,c7Bq1HD,UAAA,K6Bn1HG,UAEA,cAAA,IAAA,MAAA,KALJ,aASM,MAAA,KACA,cAAA,KAEA,e7Bo1HL,aAAA,I6Bn1HK,YAAA,WACE,OAAA,IAAA,MAAA,Y7Bq1HP,cAAA,IAAA,IAAA,EAAA,ECgBD,qBACE,aAAc,KAAK,KAAK,K4B51HlB,sBAEA,4BADA,4BAEA,MAAA,K7Bi1HP,OAAA,Q6B50HC,iBAAA,KAqDA,OAAA,IAAA,MAAA,KA8BA,oBAAA,YAnFA,wBAwDE,MAAA,K7B2xHH,cAAA,E6BzxHK,2BACA,MAAA,KA3DJ,6BAgEE,cAAA,IACA,WAAA,OAYJ,iDA0DE,IAAK,KAjED,KAAA,K7B0xHH,yB6BztHD,2BA9DM,QAAA,W7B0xHL,MAAA,G6Bn2HD,6BAuFE,cAAA,GAvFF,6B5Bw3HA,aAAc,EACd,cAAe,IDZhB,kC6BtuHD,wCA3BA,wCATM,OAAA,IAAA,MAAA,K7B+wHH,yB6B3uHD,6B5B2vHE,cAAe,IAAI,MAAM,KACzB,cAAe,IAAI,IAAI,EAAE,EDZ1B,kC6B92HD,wC7B+2HD,wC6B72HG,oBAAA,MAIE,c7B+2HL,MAAA,K6B52HK,gB7B+2HL,cAAA,ICgBD,iBACE,YAAa,I4Bv3HP,uBAQR,6B7Bo2HC,6B6Bl2HG,MAAA,K7Bq2HH,iBAAA,Q6Bn2HK,gBACA,MAAA,KAYN,mBACE,WAAA,I7B41HD,YAAA,E6Bz1HG,e7B41HH,MAAA,K6B11HK,kBACA,MAAA,KAPN,oBAYI,cAAA,IACA,WAAA,OAYJ,wCA0DE,IAAK,KAjED,KAAA,K7B21HH,yB6B1xHD,kBA9DM,QAAA,W7B21HL,MAAA,G6Bl1HD,oBACA,cAAA,GAIE,oBACA,cAAA,EANJ,yB5B02HE,aAAc,EACd,cAAe,IDZhB,8B6B1yHD,oCA3BA,oCATM,OAAA,IAAA,MAAA,K7Bm1HH,yB6B/yHD,yB5B+zHE,cAAe,IAAI,MAAM,KACzB,cAAe,IAAI,IAAI,EAAE,EDZ1B,8B6Bx0HD,oC7By0HD,oC6Bv0HG,oBAAA,MAGA,uB7B00HH,QAAA,K6B/zHC,qBF3OA,QAAA,M3B+iID,yB8BxiIC,WAAY,KACZ,uBAAA,EACA,wBAAA,EAEA,Q9B0iID,SAAA,S8BliIC,WAAY,KA8nBZ,cAAe,KAhoBb,OAAA,IAAA,MAAA,Y9ByiIH,yB8BzhIC,QAgnBE,cAAe,K9B86GlB,yB8BjhIC,eACA,MAAA,MAGA,iBACA,cAAA,KAAA,aAAA,KAEA,WAAA,Q9BkhID,2BAAA,M8BhhIC,WAAA,IAAA,MAAA,YACE,mBAAA,MAAA,EAAA,IAAA,EAAA,qB9BkhIH,WAAA,MAAA,EAAA,IAAA,EAAA,qB8Bz7GD,oBArlBI,WAAA,KAEA,yBAAA,iB9BkhID,MAAA,K8BhhIC,WAAA,EACE,mBAAA,KACA,WAAA,KAEA,0B9BkhIH,QAAA,gB8B/gIC,OAAA,eACE,eAAA,E9BihIH,SAAA,kBCkBD,oBACE,WAAY,QDZf,sC8B/gIK,mC9B8gIH,oC8BzgIC,cAAe,E7B4hIf,aAAc,G6Bj+GlB,sCAnjBE,mC7ByhIA,WAAY,MDdX,4D8BngID,sC9BogID,mCCkBG,WAAY,O6B3gId,kCANE,gC9BsgIH,4B8BvgIG,0BAuiBF,aAAc,M7Bm/Gd,YAAa,MAEf,yBDZC,kC8B3gIK,gC9B0gIH,4B8B3gIG,0BAcF,aAAc,EAChB,YAAA,GAMF,mBA8gBE,QAAS,KAhhBP,aAAA,EAAA,EAAA,I9BkgIH,yB8B7/HC,mB7B+gIE,cAAe,G6B1gIjB,qBADA,kB9BggID,SAAA,M8Bz/HC,MAAO,EAggBP,KAAM,E7B4gHN,QAAS,KDdR,yB8B7/HD,qB9B8/HD,kB8B7/HC,cAAA,GAGF,kBACE,IAAA,EACA,aAAA,EAAA,EAAA,I9BigID,qB8B1/HC,OAAQ,EACR,cAAA,EACA,aAAA,IAAA,EAAA,EAEA,cACA,MAAA,K9B4/HD,OAAA,K8B1/HC,QAAA,KAAA,K7B4gIA,UAAW,K6B1gIT,YAAA,KAIA,oBAbJ,oB9BwgIC,gBAAA,K8Bv/HG,kB7B0gIF,QAAS,MDdR,yBACF,iC8Bh/HC,uCACA,YAAA,OAGA,eC9LA,SAAA,SACA,MAAA,MD+LA,QAAA,IAAA,KACA,WAAA,IACA,aAAA,KACA,cAAA,I9Bm/HD,iBAAA,Y8B/+HC,iBAAA,KACE,OAAA,IAAA,MAAA,Y9Bi/HH,cAAA,I8B5+HG,qBACA,QAAA,EAEA,yB9B++HH,QAAA,M8BrgIC,MAAO,KAyBL,OAAA,I9B++HH,cAAA,I8BpjHD,mCAvbI,WAAA,I9Bg/HH,yB8Bt+HC,eACA,QAAA,MAGE,YACA,OAAA,MAAA,M9By+HH,iB8B58HC,YAAA,KA2YA,eAAgB,KAjaZ,YAAA,KAEA,yBACA,iCACA,SAAA,OACA,MAAA,KACA,MAAA,KAAA,WAAA,E9Bs+HH,iBAAA,Y8B3kHC,OAAQ,E7B8lHR,mBAAoB,K6Bt/HhB,WAAA,KAGA,kDAqZN,sC9BklHC,QAAA,IAAA,KAAA,IAAA,KCmBD,sC6Bv/HQ,YAAA,KAmBR,4C9Bs9HD,4C8BvlHG,iBAAkB,M9B4lHnB,yB8B5lHD,YAtYI,MAAA,K9Bq+HH,OAAA,E8Bn+HK,eACA,MAAA,K9Bu+HP,iB8B39HG,YAAa,KACf,eAAA,MAGA,aACA,QAAA,KAAA,K1B9NA,WAAA,IACQ,aAAA,M2B/DR,cAAA,IACA,YAAA,M/B4vID,WAAA,IAAA,MAAA,YiBtuHC,cAAe,IAAI,MAAM,YAwEzB,mBAAoB,MAAM,EAAE,IAAI,EAAE,qBAAyB,EAAE,IAAI,EAAE,qBAtI/D,WAAA,MAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,IAAA,EAAA,qBAEA,yBjBwyHH,yBiBpqHC,QAAS,aA/HP,cAAA,EACA,eAAA,OjBuyHH,2BiBzqHC,QAAS,aAxHP,MAAA,KjBoyHH,eAAA,OiBhyHG,kCACA,QAAA,aAmHJ,0BhBmsHE,QAAS,aACT,eAAgB,OgB5yHd,wCjB6xHH,6CiBrrHD,2CjBwrHC,MAAA,KiB5xHG,wCACA,MAAA,KAmGJ,4BhB+sHE,cAAe,EgB3yHb,eAAA,OAGA,uBADA,oBjB6xHH,QAAA,aiBnsHC,WAAY,EhBstHZ,cAAe,EgB5yHX,eAAA,OAsFN,6BAAA,0BAjFI,aAAA,EAiFJ,4CjB4sHC,sCiBvxHG,SAAA,SjB0xHH,YAAA,E8BngID,kDAmWE,IAAK,GAvWH,yBACE,yB9B8gIL,cAAA,I8B5/HD,oCAoVE,cAAe,GA1Vf,yBACA,aACA,MAAA,KACA,YAAA,E1BzPF,eAAA,EACQ,aAAA,EJmwIP,YAAA,EACF,OAAA,E8BngIG,mBAAoB,KACtB,WAAA,M9BugID,8B8BngIC,WAAY,EACZ,uBAAA,EHzUA,wBAAA,EAQA,mDACC,cAAA,E3By0IF,uBAAA,I8B//HC,wBAAyB,IChVzB,2BAAA,EACA,0BAAA,EDkVA,YCnVA,WAAA,IACA,cAAA,IDqVA,mBCtVA,WAAA,KACA,cAAA,KD+VF,mBChWE,WAAA,KACA,cAAA,KDuWF,aAsSE,WAAY,KA1SV,cAAA,KAEA,yB9B+/HD,aACF,MAAA,K8Bl+HG,aAAc,KAhBhB,YAAA,MACA,yBE5WA,aF8WE,MAAA,eAFF,cAKI,MAAA,gB9Bu/HH,aAAA,M8B7+HD,4BACA,aAAA,GADF,gBAKI,iBAAA,Q9Bg/HH,aAAA,QCmBD,8B6BhgIM,MAAA,KARN,oC9B0/HC,oC8B5+HG,MAAA,Q9B++HH,iBAAA,Y8B1+HK,6B9B6+HL,MAAA,KCmBD,iC6B5/HQ,MAAA,KAKF,uC9By+HL,uCCmBC,MAAO,KACP,iBAAkB,Y6Bz/HZ,sCAIF,4C9Bu+HL,4CCmBC,MAAO,KACP,iBAAkB,Q6Bv/HZ,wCAxCR,8C9BihIC,8C8Bn+HG,MAAA,K9Bs+HH,iBAAA,YCmBD,+B6Bt/HM,aAAA,KAGA,qCApDN,qC9B2hIC,iBAAA,KCmBD,yC6Bp/HI,iBAAA,KAOE,iCAAA,6B7Bk/HJ,aAAc,Q6B9+HR,oCAiCN,0C9B+7HD,0C8B3xHC,MAAO,KA7LC,iBAAA,QACA,yB7B8+HR,sD6B5+HU,MAAA,KAKF,4D9By9HP,4DCmBC,MAAO,KACP,iBAAkB,Y6Bz+HV,2DAIF,iE9Bu9HP,iECmBC,MAAO,KACP,iBAAkB,Q6Bv+HV,6D9B09HX,mEADE,mE8B1jIC,MAAO,KA8GP,iBAAA,aAEE,6B9Bi9HL,MAAA,K8B58HG,mC9B+8HH,MAAA,KCmBD,0B6B/9HM,MAAA,KAIA,gCAAA,gC7Bg+HJ,MAAO,K6Bt9HT,0CARQ,0CASN,mD9Bu8HD,mD8Bt8HC,MAAA,KAFF,gBAKI,iBAAA,K9B08HH,aAAA,QCmBD,8B6B19HM,MAAA,QARN,oC9Bo9HC,oC8Bt8HG,MAAA,K9By8HH,iBAAA,Y8Bp8HK,6B9Bu8HL,MAAA,QCmBD,iC6Bt9HQ,MAAA,QAKF,uC9Bm8HL,uCCmBC,MAAO,KACP,iBAAkB,Y6Bn9HZ,sCAIF,4C9Bi8HL,4CCmBC,MAAO,KACP,iBAAkB,Q6Bj9HZ,wCAxCR,8C9B2+HC,8C8B57HG,MAAA,K9B+7HH,iBAAA,YCmBD,+B6B/8HM,aAAA,KAGA,qCArDN,qC9Bq/HC,iBAAA,KCmBD,yC6B78HI,iBAAA,KAME,iCAAA,6B7B48HJ,aAAc,Q6Bx8HR,oCAuCN,0C9Bm5HD,0C8B33HC,MAAO,KAvDC,iBAAA,QAuDV,yBApDU,kE9Bs7HP,aAAA,Q8Bn7HO,0D9Bs7HP,iBAAA,QCmBD,sD6Bt8HU,MAAA,QAKF,4D9Bm7HP,4DCmBC,MAAO,KACP,iBAAkB,Y6Bn8HV,2DAIF,iE9Bi7HP,iECmBC,MAAO,KACP,iBAAkB,Q6Bj8HV,6D9Bo7HX,mEADE,mE8B1hIC,MAAO,KA+GP,iBAAA,aAEE,6B9Bg7HL,MAAA,Q8B36HG,mC9B86HH,MAAA,KCmBD,0B6B97HM,MAAA,QAIA,gCAAA,gC7B+7HJ,MAAO,KgCvkJT,0CH0oBQ,0CGzoBN,mDjCwjJD,mDiCvjJC,MAAA,KAEA,YACA,QAAA,IAAA,KjC2jJD,cAAA,KiChkJC,WAAY,KAQV,iBAAA,QjC2jJH,cAAA,IiCxjJK,eACA,QAAA,ajC4jJL,yBiCxkJC,QAAS,EAAE,IAkBT,MAAA,KjCyjJH,QAAA,SkC5kJC,oBACA,MAAA,KAEA,YlC+kJD,QAAA,akCnlJC,aAAc,EAOZ,OAAA,KAAA,ElC+kJH,cAAA,ICmBD,eiC/lJM,QAAA,OAEA,iBACA,oBACA,SAAA,SACA,MAAA,KACA,QAAA,IAAA,KACA,YAAA,KACA,YAAA,WlCglJL,MAAA,QkC9kJG,gBAAA,KjCimJF,iBAAkB,KiC9lJZ,OAAA,IAAA,MAAA,KPVH,6B3B2lJJ,gCkC7kJG,YAAA,EjCgmJF,uBAAwB,I0BvnJxB,0BAAA,I3BymJD,4BkCxkJG,+BjC2lJF,wBAAyB,IACzB,2BAA4B,IiCxlJxB,uBAFA,uBAGA,0BAFA,0BlC8kJL,QAAA,EkCtkJG,MAAA,QjCylJF,iBAAkB,KAClB,aAAc,KAEhB,sBiCvlJM,4BAFA,4BjC0lJN,yBiCvlJM,+BAFA,+BAGA,QAAA,ElC2kJL,MAAA,KkCloJC,OAAQ,QjCqpJR,iBAAkB,QAClB,aAAc,QiCnlJV,wBAEA,8BADA,8BjColJN,2BiCtlJM,iCjCulJN,iCDZC,MAAA,KkC/jJC,OAAQ,YjCklJR,iBAAkB,KkC7pJd,aAAA,KAEA,oBnC8oJL,uBmC5oJG,QAAA,KAAA,KlC+pJF,UAAW,K0B1pJX,YAAA,U3B4oJD,gCmC3oJG,mClC8pJF,uBAAwB,I0BvqJxB,0BAAA,I3BypJD,+BkC1kJD,kCjC6lJE,wBAAyB,IkC7qJrB,2BAAA,IAEA,oBnC8pJL,uBmC5pJG,QAAA,IAAA,KlC+qJF,UAAW,K0B1qJX,YAAA,I3B4pJD,gCmC3pJG,mClC8qJF,uBAAwB,I0BvrJxB,0BAAA,I3ByqJD,+BoC3qJD,kCACE,wBAAA,IACA,2BAAA,IAEA,OpC6qJD,aAAA,EoCjrJC,OAAQ,KAAK,EAOX,WAAA,OpC6qJH,WAAA,KCmBD,UmC7rJM,QAAA,OAEA,YACA,eACA,QAAA,apC8qJL,QAAA,IAAA,KoC5rJC,iBAAkB,KnC+sJlB,OAAQ,IAAI,MAAM,KmC5rJd,cAAA,KAnBN,kBpCisJC,kBCmBC,gBAAiB,KmCzrJb,iBAAA,KA3BN,eAAA,kBAkCM,MAAA,MAlCN,mBAAA,sBnC6tJE,MAAO,KmClrJH,mBAEA,yBADA,yBpCqqJL,sBqCltJC,MAAO,KACP,OAAA,YACA,iBAAA,KAEA,OACA,QAAA,OACA,QAAA,KAAA,KAAA,KACA,UAAA,IACA,YAAA,IACA,YAAA,EACA,MAAA,KrCotJD,WAAA,OqChtJG,YAAA,OpCmuJF,eAAgB,SoCjuJZ,cAAA,MrCotJL,cqCltJK,cAKJ,MAAA,KACE,gBAAA,KrC+sJH,OAAA,QqC1sJG,aACA,QAAA,KAOJ,YCtCE,SAAA,StC+uJD,IAAA,KCmBD,eqC7vJM,iBAAA,KALJ,2BD0CF,2BrC4sJC,iBAAA,QCmBD,eqCpwJM,iBAAA,QALJ,2BD8CF,2BrC+sJC,iBAAA,QCmBD,eqC3wJM,iBAAA,QALJ,2BDkDF,2BrCktJC,iBAAA,QCmBD,YqClxJM,iBAAA,QALJ,wBDsDF,wBrCqtJC,iBAAA,QCmBD,eqCzxJM,iBAAA,QALJ,2BD0DF,2BrCwtJC,iBAAA,QCmBD,cqChyJM,iBAAA,QCDJ,0BADF,0BAEE,iBAAA,QAEA,OACA,QAAA,aACA,UAAA,KACA,QAAA,IAAA,IACA,UAAA,KACA,YAAA,IACA,YAAA,EACA,MAAA,KACA,WAAA,OvCqxJD,YAAA,OuClxJC,eAAA,OACE,iBAAA,KvCoxJH,cAAA,KuC/wJG,aACA,QAAA,KAGF,YtCkyJA,SAAU,SsChyJR,IAAA,KAMA,0BvC4wJH,eCmBC,IAAK,EsC7xJD,QAAA,IAAA,IvCgxJL,cuC9wJK,cAKJ,MAAA,KtC4xJA,gBAAiB,KsC1xJf,OAAA,QvC4wJH,+BuCxwJC,4BACE,MAAA,QvC0wJH,iBAAA,KuCtwJG,wBvCywJH,MAAA,MuCrwJG,+BvCwwJH,aAAA,IwCj0JC,uBACA,YAAA,IAEA,WACA,YAAA,KxCo0JD,eAAA,KwCz0JC,cAAe,KvC41Jf,MAAO,QuCn1JL,iBAAA,KAIA,eAbJ,cAcI,MAAA,QxCo0JH,awCl1JC,cAAe,KAmBb,UAAA,KxCk0JH,YAAA,ICmBD,cuCh1JI,iBAAA,QAEA,sBxCi0JH,4BwC31JC,cAAe,KA8Bb,aAAA,KxCg0JH,cAAA,IwC7yJD,sBAfI,UAAA,KxCi0JD,oCwC9zJC,WvCi1JA,YAAa,KuC/0JX,eAAA,KxCi0JH,sBwCvzJD,4BvC00JE,cAAe,KuC90Jb,aAAA,KC5CJ,ezC42JD,cyC32JC,UAAA,MAGA,WACA,QAAA,MACA,QAAA,IACA,cAAA,KrCiLA,YAAA,WACK,iBAAA,KACG,OAAA,IAAA,MAAA,KJ8rJT,cAAA,IyCx3JC,mBAAoB,OAAO,IAAI,YxC24J1B,cAAe,OAAO,IAAI,YwC93J7B,WAAA,OAAA,IAAA,YAKF,iBzC22JD,eCmBC,aAAc,KACd,YAAa,KwCv3JX,mBA1BJ,kBzCk4JC,kByCv2JG,aAAA,QCzBJ,oBACE,QAAA,IACA,MAAA,KAEA,O1Cs4JD,QAAA,K0C14JC,cAAe,KAQb,OAAA,IAAA,MAAA,YAEA,cAAA,IAVJ,UAeI,WAAA,E1Ck4JH,MAAA,QCmBD,mByC/4JI,YAAA,IArBJ,SAyBI,U1C+3JH,cAAA,ECmBD,WyCx4JE,WAAA,IAFF,mBAAA,mBAMI,cAAA,KAEA,0BACA,0B1Cy3JH,SAAA,S0Cj3JC,IAAK,KCvDL,MAAA,MACA,MAAA,Q3C46JD,e0Ct3JC,MAAO,QClDL,iBAAA,Q3C26JH,aAAA,Q2Cx6JG,kB3C26JH,iBAAA,Q2Cn7JC,2BACA,MAAA,Q3Cu7JD,Y0C73JC,MAAO,QCtDL,iBAAA,Q3Cs7JH,aAAA,Q2Cn7JG,e3Cs7JH,iBAAA,Q2C97JC,wBACA,MAAA,Q3Ck8JD,e0Cp4JC,MAAO,QC1DL,iBAAA,Q3Ci8JH,aAAA,Q2C97JG,kB3Ci8JH,iBAAA,Q2Cz8JC,2BACA,MAAA,Q3C68JD,c0C34JC,MAAO,QC9DL,iBAAA,Q3C48JH,aAAA,Q2Cz8JG,iB3C48JH,iBAAA,Q4C78JC,0BAAQ,MAAA,QACR,wCAAQ,K5Cm9JP,oBAAA,KAAA,E4C/8JD,GACA,oBAAA,EAAA,GACA,mCAAQ,K5Cq9JP,oBAAA,KAAA,E4Cv9JD,GACA,oBAAA,EAAA,GACA,gCAAQ,K5Cq9JP,oBAAA,KAAA,E4C78JD,GACA,oBAAA,EAAA,GAGA,UACA,OAAA,KxCsCA,cAAA,KACQ,SAAA,OJ26JT,iBAAA,Q4C78JC,cAAe,IACf,mBAAA,MAAA,EAAA,IAAA,IAAA,eACA,WAAA,MAAA,EAAA,IAAA,IAAA,eAEA,cACA,MAAA,KACA,MAAA,EACA,OAAA,KACA,UAAA,KxCyBA,YAAA,KACQ,MAAA,KAyHR,WAAA,OACK,iBAAA,QACG,mBAAA,MAAA,EAAA,KAAA,EAAA,gBJ+zJT,WAAA,MAAA,EAAA,KAAA,EAAA,gB4C18JC,mBAAoB,MAAM,IAAI,K3Cq+JzB,cAAe,MAAM,IAAI,K4Cp+J5B,WAAA,MAAA,IAAA,KDEF,sBCAE,gCDAF,iBAAA,yK5C88JD,iBAAA,oK4Cv8JC,iBAAiB,iK3Cm+JjB,wBAAyB,KAAK,KG/gK9B,gBAAA,KAAA,KJy/JD,qBIv/JS,+BwCmDR,kBAAmB,qBAAqB,GAAG,OAAO,SErElD,aAAA,qBAAA,GAAA,OAAA,S9C4gKD,UAAA,qBAAA,GAAA,OAAA,S6Cz9JG,sBACA,iBAAA,Q7C69JH,wC4Cx8JC,iBAAkB,yKEzElB,iBAAA,oK9CohKD,iBAAA,iK6Cj+JG,mBACA,iBAAA,Q7Cq+JH,qC4C58JC,iBAAkB,yKE7ElB,iBAAA,oK9C4hKD,iBAAA,iK6Cz+JG,sBACA,iBAAA,Q7C6+JH,wC4Ch9JC,iBAAkB,yKEjFlB,iBAAA,oK9CoiKD,iBAAA,iK6Cj/JG,qBACA,iBAAA,Q7Cq/JH,uC+C5iKC,iBAAkB,yKAElB,iBAAA,oK/C6iKD,iBAAA,iK+C1iKG,O/C6iKH,WAAA,KC4BD,mB8CnkKE,WAAA,E/C4iKD,O+CxiKD,YACE,SAAA,O/C0iKD,KAAA,E+CtiKC,Y/CyiKD,MAAA,Q+CriKG,c/CwiKH,QAAA,MC4BD,4B8C9jKE,UAAA,KAGF,aAAA,mBAEE,aAAA,KAGF,YAAA,kB9C+jKE,cAAe,K8CxjKjB,YAHE,Y/CoiKD,a+ChiKC,QAAA,W/CmiKD,eAAA,I+C/hKC,c/CkiKD,eAAA,O+C7hKC,cACA,eAAA,OAMF,eACE,WAAA,EACA,cAAA,ICvDF,YAEE,aAAA,EACA,WAAA,KAQF,YACE,aAAA,EACA,cAAA,KAGA,iBACA,SAAA,SACA,QAAA,MhD6kKD,QAAA,KAAA,KgD1kKC,cAAA,KrB3BA,iBAAA,KACC,OAAA,IAAA,MAAA,KqB6BD,6BACE,uBAAA,IrBvBF,wBAAA,I3BsmKD,4BgDpkKC,cAAe,E/CgmKf,2BAA4B,I+C9lK5B,0BAAA,IAFF,kBAAA,uBAKI,MAAA,KAIF,2CAAA,gD/CgmKA,MAAO,K+C5lKL,wBAFA,wBhDykKH,6BgDxkKG,6BAKF,MAAO,KACP,gBAAA,KACA,iBAAA,QAKA,uB/C4lKA,MAAO,KACP,WAAY,K+CzlKV,0BhDmkKH,gCgDlkKG,gCALF,MAAA,K/CmmKA,OAAQ,YACR,iBAAkB,KDxBnB,mDgD5kKC,yDAAA,yD/CymKA,MAAO,QDxBR,gDgDhkKC,sDAAA,sD/C6lKA,MAAO,K+CzlKL,wBAEA,8BADA,8BhDmkKH,QAAA,EgDxkKC,MAAA,K/ComKA,iBAAkB,QAClB,aAAc,QAEhB,iDDpBC,wDCuBD,uDADA,uD+CzmKE,8DAYI,6D/C4lKN,uD+CxmKE,8D/C2mKF,6DAKE,MAAO,QDxBR,8CiD1qKG,oDADF,oDAEE,MAAA,QAEA,yBhDusKF,MAAO,QgDrsKH,iBAAA,QAFF,0BAAA,+BAKI,MAAA,QAGF,mDAAA,wDhDwsKJ,MAAO,QDtBR,gCiDhrKO,gCAGF,qCAFE,qChD2sKN,MAAO,QACP,iBAAkB,QAEpB,iCgDvsKQ,uCAFA,uChD0sKR,sCDtBC,4CiDnrKO,4CArBN,MAAA,KACE,iBAAA,QACA,aAAA,QAEA,sBhDouKF,MAAO,QgDluKH,iBAAA,QAFF,uBAAA,4BAKI,MAAA,QAGF,gDAAA,qDhDquKJ,MAAO,QDtBR,6BiD7sKO,6BAGF,kCAFE,kChDwuKN,MAAO,QACP,iBAAkB,QAEpB,8BgDpuKQ,oCAFA,oChDuuKR,mCDtBC,yCiDhtKO,yCArBN,MAAA,KACE,iBAAA,QACA,aAAA,QAEA,yBhDiwKF,MAAO,QgD/vKH,iBAAA,QAFF,0BAAA,+BAKI,MAAA,QAGF,mDAAA,wDhDkwKJ,MAAO,QDtBR,gCiD1uKO,gCAGF,qCAFE,qChDqwKN,MAAO,QACP,iBAAkB,QAEpB,iCgDjwKQ,uCAFA,uChDowKR,sCDtBC,4CiD7uKO,4CArBN,MAAA,KACE,iBAAA,QACA,aAAA,QAEA,wBhD8xKF,MAAO,QgD5xKH,iBAAA,QAFF,yBAAA,8BAKI,MAAA,QAGF,kDAAA,uDhD+xKJ,MAAO,QDtBR,+BiDvwKO,+BAGF,oCAFE,oChDkyKN,MAAO,QACP,iBAAkB,QAEpB,gCgD9xKQ,sCAFA,sChDiyKR,qCDtBC,2CiD1wKO,2CDkGN,MAAO,KACP,iBAAA,QACA,aAAA,QAEF,yBACE,WAAA,EACA,cAAA,IE1HF,sBACE,cAAA,EACA,YAAA,IAEA,O9C0DA,cAAA,KACQ,iBAAA,KJ6uKT,OAAA,IAAA,MAAA,YkDnyKC,cAAe,IACf,mBAAA,EAAA,IAAA,IAAA,gBlDqyKD,WAAA,EAAA,IAAA,IAAA,gBkD/xKC,YACA,QAAA,KvBnBC,e3BuzKF,QAAA,KAAA,KkDtyKC,cAAe,IAAI,MAAM,YAMvB,uBAAA,IlDmyKH,wBAAA,IkD7xKC,0CACA,MAAA,QAEA,alDgyKD,WAAA,EkDpyKC,cAAe,EjDg0Kf,UAAW,KACX,MAAO,QDtBR,oBkD1xKC,sBjDkzKF,eiDxzKI,mBAKJ,qBAEE,MAAA,QvBvCA,cACC,QAAA,KAAA,K3Bs0KF,iBAAA,QkDrxKC,WAAY,IAAI,MAAM,KjDizKtB,2BAA4B,IiD9yK1B,0BAAA,IAHJ,mBAAA,mCAMM,cAAA,ElDwxKL,oCkDnxKG,oDjD+yKF,aAAc,IAAI,EiD7yKZ,cAAA,EvBtEL,4D3B61KF,4EkDjxKG,WAAA,EjD6yKF,uBAAwB,IiD3yKlB,wBAAA,IvBtEL,0D3B21KF,0EkD1yKC,cAAe,EvB1Df,2BAAA,IACC,0BAAA,IuB0FH,+EAEI,uBAAA,ElD8wKH,wBAAA,EkD1wKC,wDlD6wKD,iBAAA,EC4BD,0BACE,iBAAkB,EiDlyKpB,8BlD0wKC,ckD1wKD,gCjDuyKE,cAAe,EiDvyKjB,sCAQM,sBlDwwKL,wCC4BC,cAAe,K0Br5Kf,aAAA,KuByGF,wDlDqxKC,0BC4BC,uBAAwB,IACxB,wBAAyB,IiDlzK3B,yFAoBQ,yFlDwwKP,2DkDzwKO,2DjDqyKN,uBAAwB,IACxB,wBAAyB,IAK3B,wGiD9zKA,wGjD4zKA,wGDtBC,wGCuBD,0EiD7zKA,0EjD2zKA,0EiDnyKU,0EjD2yKR,uBAAwB,IAK1B,uGiDx0KA,uGjDs0KA,uGDtBC,uGCuBD,yEiDv0KA,yEjDq0KA,yEiDzyKU,yEvB7HR,wBAAA,IuBiGF,sDlDqzKC,yBC4BC,2BAA4B,IAC5B,0BAA2B,IiDxyKrB,qFA1CR,qFAyCQ,wDlDmxKP,wDC4BC,2BAA4B,IAC5B,0BAA2B,IAG7B,oGDtBC,oGCwBD,oGiD91KA,oGjD21KA,uEiD7yKU,uEjD+yKV,uEiD71KA,uEjDm2KE,0BAA2B,IAG7B,mGDtBC,mGCwBD,mGiDx2KA,mGjDq2KA,sEiDnzKU,sEjDqzKV,sEiDv2KA,sEjD62KE,2BAA4B,IiDlzK1B,0BlD2xKH,qCkDt1KD,0BAAA,qCA+DI,WAAA,IAAA,MAAA,KA/DJ,kDAAA,kDAmEI,WAAA,EAnEJ,uBAAA,yCjD23KE,OAAQ,EiDjzKA,+CjDqzKV,+CiD/3KA,+CjDi4KA,+CAEA,+CANA,+CDjBC,iECoBD,iEiDh4KA,iEjDk4KA,iEAEA,iEANA,iEAWE,YAAa,EiD3zKL,8CjD+zKV,8CiD74KA,8CjD+4KA,8CAEA,8CANA,8CDjBC,gECoBD,gEiD94KA,gEjDg5KA,gEAEA,gEANA,gEAWE,aAAc,EAIhB,+CiD35KA,+CjDy5KA,+CiDl0KU,+CjDq0KV,iEiD55KA,iEjD05KA,iEDtBC,iEC6BC,cAAe,EAEjB,8CiDn0KU,8CjDq0KV,8CiDr6KA,8CjDo6KA,gEDtBC,gECwBD,gEiDh0KI,gEACA,cAAA,EAUJ,yBACE,cAAA,ElDmyKD,OAAA,EkD/xKG,aACA,cAAA,KANJ,oBASM,cAAA,ElDkyKL,cAAA,IkD7xKG,2BlDgyKH,WAAA,IC4BD,4BiDxzKM,cAAA,EAKF,wDAvBJ,wDlDqzKC,WAAA,IAAA,MAAA,KkD5xKK,2BlD+xKL,WAAA,EmDlhLC,uDnDqhLD,cAAA,IAAA,MAAA,KmDlhLG,eACA,aAAA,KnDshLH,8BmDxhLC,MAAA,KAMI,iBAAA,QnDqhLL,aAAA,KmDlhLK,0DACA,iBAAA,KAGJ,qCAEI,MAAA,QnDmhLL,iBAAA,KmDpiLC,yDnDuiLD,oBAAA,KmDpiLG,eACA,aAAA,QnDwiLH,8BmD1iLC,MAAA,KAMI,iBAAA,QnDuiLL,aAAA,QmDpiLK,0DACA,iBAAA,QAGJ,qCAEI,MAAA,QnDqiLL,iBAAA,KmDtjLC,yDnDyjLD,oBAAA,QmDtjLG,eACA,aAAA,QnD0jLH,8BmD5jLC,MAAA,QAMI,iBAAA,QnDyjLL,aAAA,QmDtjLK,0DACA,iBAAA,QAGJ,qCAEI,MAAA,QnDujLL,iBAAA,QmDxkLC,yDnD2kLD,oBAAA,QmDxkLG,YACA,aAAA,QnD4kLH,2BmD9kLC,MAAA,QAMI,iBAAA,QnD2kLL,aAAA,QmDxkLK,uDACA,iBAAA,QAGJ,kCAEI,MAAA,QnDykLL,iBAAA,QmD1lLC,sDnD6lLD,oBAAA,QmD1lLG,eACA,aAAA,QnD8lLH,8BmDhmLC,MAAA,QAMI,iBAAA,QnD6lLL,aAAA,QmD1lLK,0DACA,iBAAA,QAGJ,qCAEI,MAAA,QnD2lLL,iBAAA,QmD5mLC,yDnD+mLD,oBAAA,QmD5mLG,cACA,aAAA,QnDgnLH,6BmDlnLC,MAAA,QAMI,iBAAA,QnD+mLL,aAAA,QmD5mLK,yDACA,iBAAA,QAGJ,oCAEI,MAAA,QnD6mLL,iBAAA,QoD5nLC,wDACA,oBAAA,QAEA,kBACA,SAAA,SpD+nLD,QAAA,MoDpoLC,OAAQ,EnDgqLR,QAAS,EACT,SAAU,OAEZ,yCmDtpLI,wBADA,yBAEA,yBACA,wBACA,SAAA,SACA,IAAA,EACA,OAAA,EpD+nLH,KAAA,EoD1nLC,MAAO,KACP,OAAA,KpD4nLD,OAAA,EoDvnLC,wBpD0nLD,eAAA,OqDppLC,uBACA,eAAA,IAEA,MACA,WAAA,KACA,QAAA,KjDwDA,cAAA,KACQ,iBAAA,QJgmLT,OAAA,IAAA,MAAA,QqD/pLC,cAAe,IASb,mBAAA,MAAA,EAAA,IAAA,IAAA,gBACA,WAAA,MAAA,EAAA,IAAA,IAAA,gBAKJ,iBACE,aAAA,KACA,aAAA,gBAEF,SACE,QAAA,KACA,cAAA,ICtBF,SACE,QAAA,IACA,cAAA,IAEA,OACA,MAAA,MACA,UAAA,KjCRA,YAAA,IAGA,YAAA,ErBqrLD,MAAA,KsD7qLC,YAAA,EAAA,IAAA,EAAA,KrDysLA,OAAQ,kBqDvsLN,QAAA,GjCbF,aiCeE,ajCZF,MAAA,KrB6rLD,gBAAA,KsDzqLC,OAAA,QACE,OAAA,kBACA,QAAA,GAEA,aACA,mBAAA,KtD2qLH,QAAA,EuDhsLC,OAAQ,QACR,WAAA,IvDksLD,OAAA,EuD7rLC,YACA,SAAA,OAEA,OACA,SAAA,MACA,IAAA,EACA,MAAA,EACA,OAAA,EACA,KAAA,EAIA,QAAA,KvD6rLD,QAAA,KuD1rLC,SAAA,OnD+GA,2BAAA,MACI,QAAA,EAEI,0BAkER,mBAAA,kBAAA,IAAA,SAEK,cAAA,aAAA,IAAA,SACG,WAAA,UAAA,IAAA,SJ6gLT,kBAAA,kBuDhsLC,cAAA,kBnD2GA,aAAA,kBACI,UAAA,kBAEI,wBJwlLT,kBAAA,euDpsLK,cAAe,eACnB,aAAA,eACA,UAAA,eAIF,mBACE,WAAA,OACA,WAAA,KvDqsLD,cuDhsLC,SAAU,SACV,MAAA,KACA,OAAA,KAEA,eACA,SAAA,SnDaA,iBAAA,KACQ,wBAAA,YmDZR,gBAAA,YtD4tLA,OsD5tLA,IAAA,MAAA,KAEA,OAAA,IAAA,MAAA,evDksLD,cAAA,IuD9rLC,QAAS,EACT,mBAAA,EAAA,IAAA,IAAA,eACA,WAAA,EAAA,IAAA,IAAA,eAEA,gBACA,SAAA,MACA,IAAA,EACA,MAAA,EvDgsLD,OAAA,EuD9rLC,KAAA,ElCrEA,QAAA,KAGA,iBAAA,KkCmEA,qBlCtEA,OAAA,iBAGA,QAAA,EkCwEF,mBACE,OAAA,kBACA,QAAA,GAIF,cACE,QAAA,KvDgsLD,cAAA,IAAA,MAAA,QuD3rLC,qBACA,WAAA,KAKF,aACE,OAAA,EACA,YAAA,WAIF,YACE,SAAA,SACA,QAAA,KvD0rLD,cuD5rLC,QAAS,KAQP,WAAA,MACA,WAAA,IAAA,MAAA,QATJ,wBAaI,cAAA,EvDsrLH,YAAA,IuDlrLG,mCvDqrLH,YAAA,KuD/qLC,oCACA,YAAA,EAEA,yBACA,SAAA,SvDkrLD,IAAA,QuDhqLC,MAAO,KAZP,OAAA,KACE,SAAA,OvDgrLD,yBuD7qLD,cnDvEA,MAAA,MACQ,OAAA,KAAA,KmD2ER,eAAY,mBAAA,EAAA,IAAA,KAAA,evD+qLX,WAAA,EAAA,IAAA,KAAA,euDzqLD,UAFA,MAAA,OvDirLD,yBwD/zLC,UACA,MAAA,OCNA,SAEA,SAAA,SACA,QAAA,KACA,QAAA,MACA,YAAA,iBAAA,UAAA,MAAA,WACA,UAAA,KACA,WAAA,OACA,YAAA,IACA,YAAA,WACA,WAAA,KACA,WAAA,MACA,gBAAA,KACA,YAAA,KACA,eAAA,KACA,eAAA,ODHA,WAAA,OnCVA,aAAA,OAGA,UAAA,OrBs1LD,YAAA,OwD30LC,OAAA,iBnCdA,QAAA,ErB61LD,WAAA,KwD90LY,YAAmB,OAAA,kBxDk1L/B,QAAA,GwDj1LY,aAAmB,QAAA,IAAA,ExDq1L/B,WAAA,KwDp1LY,eAAmB,QAAA,EAAA,IxDw1L/B,YAAA,IwDv1LY,gBAAmB,QAAA,IAAA,ExD21L/B,WAAA,IwDt1LC,cACA,QAAA,EAAA,IACA,YAAA,KAEA,eACA,UAAA,MxDy1LD,QAAA,IAAA,IwDr1LC,MAAO,KACP,WAAA,OACA,iBAAA,KACA,cAAA,IAEA,exDu1LD,SAAA,SwDn1LC,MAAA,EACE,OAAA,EACA,aAAA,YACA,aAAA,MAEA,4BxDq1LH,OAAA,EwDn1LC,KAAA,IACE,YAAA,KACA,aAAA,IAAA,IAAA,EACA,iBAAA,KAEA,iCxDq1LH,MAAA,IwDn1LC,OAAA,EACE,cAAA,KACA,aAAA,IAAA,IAAA,EACA,iBAAA,KAEA,kCxDq1LH,OAAA,EwDn1LC,KAAA,IACE,cAAA,KACA,aAAA,IAAA,IAAA,EACA,iBAAA,KAEA,8BxDq1LH,IAAA,IwDn1LC,KAAA,EACE,WAAA,KACA,aAAA,IAAA,IAAA,IAAA,EACA,mBAAA,KAEA,6BxDq1LH,IAAA,IwDn1LC,MAAA,EACE,WAAA,KACA,aAAA,IAAA,EAAA,IAAA,IACA,kBAAA,KAEA,+BxDq1LH,IAAA,EwDn1LC,KAAA,IACE,YAAA,KACA,aAAA,EAAA,IAAA,IACA,oBAAA,KAEA,oCxDq1LH,IAAA,EwDn1LC,MAAA,IACE,WAAA,KACA,aAAA,EAAA,IAAA,IACA,oBAAA,KAEA,qCxDq1LH,IAAA,E0Dl7LC,KAAM,IACN,WAAA,KACA,aAAA,EAAA,IAAA,IACA,oBAAA,KAEA,SACA,SAAA,SACA,IAAA,EDXA,KAAA,EAEA,QAAA,KACA,QAAA,KACA,UAAA,MACA,QAAA,IACA,YAAA,iBAAA,UAAA,MAAA,WACA,UAAA,KACA,WAAA,OACA,YAAA,IACA,YAAA,WACA,WAAA,KACA,WAAA,MACA,gBAAA,KACA,YAAA,KACA,eAAA,KCAA,eAAA,OAEA,WAAA,OACA,aAAA,OAAA,UAAA,OACA,YAAA,OACA,iBAAA,KACA,wBAAA,YtD8CA,gBAAA,YACQ,OAAA,IAAA,MAAA,KJk5LT,OAAA,IAAA,MAAA,e0D77LC,cAAA,IAAY,mBAAA,EAAA,IAAA,KAAA,e1Dg8Lb,WAAA,EAAA,IAAA,KAAA,e0D/7La,WAAA,KACZ,aAAY,WAAA,MACZ,eAAY,YAAA,KAGd,gBACE,WAAA,KAEA,cACA,YAAA,MAEA,e1Dq8LD,QAAA,IAAA,K0Dl8LC,OAAQ,EACR,UAAA,K1Do8LD,iBAAA,Q0D57LC,cAAA,IAAA,MAAA,QzDy9LA,cAAe,IAAI,IAAI,EAAE,EyDt9LvB,iBACA,QAAA,IAAA,KAEA,gBACA,sB1D87LH,SAAA,S0D37LC,QAAS,MACT,MAAA,E1D67LD,OAAA,E0D37LC,aAAc,YACd,aAAA,M1D87LD,gB0Dz7LC,aAAA,KAEE,sBACA,QAAA,GACA,aAAA,KAEA,oB1D27LH,OAAA,M0D17LG,KAAA,IACE,YAAA,MACA,iBAAA,KACA,iBAAA,gBACA,oBAAA,E1D67LL,0B0Dz7LC,OAAA,IACE,YAAA,MACA,QAAA,IACA,iBAAA,KACA,oBAAA,EAEA,sB1D27LH,IAAA,I0D17LG,KAAA,MACE,WAAA,MACA,mBAAA,KACA,mBAAA,gBACA,kBAAA,E1D67LL,4B0Dz7LC,OAAA,MACE,KAAA,IACA,QAAA,IACA,mBAAA,KACA,kBAAA,EAEA,uB1D27LH,IAAA,M0D17LG,KAAA,IACE,YAAA,MACA,iBAAA,EACA,oBAAA,KACA,oBAAA,gB1D67LL,6B0Dx7LC,IAAA,IACE,YAAA,MACA,QAAA,IACA,iBAAA,EACA,oBAAA,KAEA,qB1D07LH,IAAA,I0Dz7LG,MAAA,MACE,WAAA,MACA,mBAAA,EACA,kBAAA,KACA,kBAAA,gB1D47LL,2B2DpjMC,MAAO,IACP,OAAA,M3DsjMD,QAAA,I2DnjMC,mBAAoB,EACpB,kBAAA,KAEA,U3DqjMD,SAAA,S2DljMG,gBACA,SAAA,SvD6KF,MAAA,KACK,SAAA,OJ04LN,sB2D/jMC,SAAU,S1D4lMV,QAAS,K0D9kML,mBAAA,IAAA,YAAA,K3DqjML,cAAA,IAAA,YAAA,K2D3hMC,WAAA,IAAA,YAAA,KvDmKK,4BAFL,0BAGQ,YAAA,EA3JA,qDA+GR,sBAEQ,mBAAA,kBAAA,IAAA,YJ86LP,cAAA,aAAA,IAAA,Y2DzjMG,WAAA,UAAA,IAAA,YvDmHJ,4BAAA,OACQ,oBAAA,OuDjHF,oBAAA,O3D4jML,YAAA,OI58LD,mCHs+LA,2BGr+LQ,KAAA,EuD5GF,kBAAA,sB3D6jML,UAAA,sBC2BD,kCADA,2BG5+LA,KAAA,EACQ,kBAAA,uBuDtGF,UAAA,uBArCN,6B3DomMD,gC2DpmMC,iC1D+nME,KAAM,E0DllMN,kBAAA,mB3D4jMH,UAAA,oBAGA,wB2D5mMD,sBAAA,sBAsDI,QAAA,MAEA,wB3D0jMH,KAAA,E2DtjMG,sB3DyjMH,sB2DrnMC,SAAU,SA+DR,IAAA,E3DyjMH,MAAA,KC0BD,sB0D/kMI,KAAA,KAnEJ,sBAuEI,KAAA,MAvEJ,2BA0EI,4B3DwjMH,KAAA,E2D/iMC,6BACA,KAAA,MAEA,8BACA,KAAA,KtC3FA,kBsC6FA,SAAA,SACA,IAAA,EACA,OAAA,EACA,KAAA,EACA,MAAA,I3DmjMD,UAAA,K2D9iMC,MAAA,KdnGE,WAAA,OACA,YAAA,EAAA,IAAA,IAAA,eACA,iBAAA,cAAA,OAAA,kBACA,QAAA,G7CqpMH,uB2DljMC,iBAAA,sEACE,iBAAA,iEACA,iBAAA,uFdxGA,iBAAA,kEACA,OAAA,+GACA,kBAAA,SACA,wBACA,MAAA,E7C6pMH,KAAA,K2DpjMC,iBAAA,sE1DglMA,iBAAiB,iE0D9kMf,iBAAA,uFACA,iBAAA,kEACA,OAAA,+GtCvHF,kBAAA,SsCyFF,wB3DslMC,wBC4BC,MAAO,KACP,gBAAiB,KACjB,OAAQ,kB0D7kMN,QAAA,EACA,QAAA,G3DwjMH,0C2DhmMD,2CA2CI,6BADA,6B1DklMF,SAAU,S0D7kMR,IAAA,IACA,QAAA,E3DqjMH,QAAA,a2DrmMC,WAAY,MAqDV,0CADA,6B3DsjMH,KAAA,I2D1mMC,YAAa,MA0DX,2CADA,6BAEA,MAAA,IACA,aAAA,MAME,6BADF,6B3DmjMH,MAAA,K2D9iMG,OAAA,KACE,YAAA,M3DgjML,YAAA,E2DriMC,oCACA,QAAA,QAEA,oCACA,QAAA,QAEA,qBACA,SAAA,SACA,OAAA,K3DwiMD,KAAA,I2DjjMC,QAAS,GAYP,MAAA,IACA,aAAA,EACA,YAAA,KACA,WAAA,OACA,WAAA,KAEA,wBACA,QAAA,aAWA,MAAA,KACA,OAAA,K3D8hMH,OAAA,I2D7jMC,YAAa,OAkCX,OAAA,QACA,iBAAA,OACA,iBAAA,cACA,OAAA,IAAA,MAAA,K3D8hMH,cAAA,K2DthMC,6BACA,MAAA,KACA,OAAA,KACA,OAAA,EACA,iBAAA,KAEA,kBACA,SAAA,SACA,MAAA,IACA,OAAA,K3DyhMD,KAAA,I2DxhMC,QAAA,GACE,YAAA,K3D0hMH,eAAA,K2Dj/LC,MAAO,KAhCP,WAAA,O1D8iMA,YAAa,EAAE,IAAI,IAAI,eAEzB,uB0D3iMM,YAAA,KAEA,oCACA,0C3DmhMH,2C2D3hMD,6BAAA,6BAYI,MAAA,K3DmhMH,OAAA,K2D/hMD,WAAA,M1D2jME,UAAW,KDxBZ,0C2D9gMD,6BACE,YAAA,MAEA,2C3DghMD,6B2D5gMD,aAAA,M3D+gMC,kBACF,MAAA,I4D7wMC,KAAA,I3DyyME,eAAgB,KAElB,qBACE,OAAQ,MAkBZ,qCADA,sCADA,mBADA,oBAXA,gBADA,iBAOA,uBADA,wBADA,iBADA,kBADA,wBADA,yBASA,mCADA,oC2DpzME,oBAAA,qBAAA,oBAAA,qB3D2zMF,WADA,YAOA,uBADA,wBADA,qBADA,sBADA,cADA,e2D/zMI,a3Dq0MJ,cDvBC,kB4D7yMG,mB3DqzMJ,WADA,YAwBE,QAAS,MACT,QAAS,IASX,qCADA,mBANA,gBAGA,uBADA,iBADA,wBAIA,mCDhBC,oB6D/0MC,oB5Dk2MF,W+B51MA,uBhCo0MC,qB4D5zMG,cChBF,aACA,kB5D+1MF,W+Br1ME,MAAO,KhCy0MR,cgCt0MC,QAAS,MACT,aAAA,KhCw0MD,YAAA,KgC/zMC,YhCk0MD,MAAA,gBgC/zMC,WhCk0MD,MAAA,egC/zMC,MhCk0MD,QAAA,e8Dz1MC,MACA,QAAA,gBAEA,WACA,WAAA,O9B8BF,WACE,KAAA,EAAA,EAAA,EhCg0MD,MAAA,YgCzzMC,YAAa,KACb,iBAAA,YhC2zMD,OAAA,E+D31MC,Q/D81MD,QAAA,eC4BD,OACE,SAAU,M+Dn4MV,chE42MD,MAAA,aC+BD,YADA,YADA,YADA,YAIE,QAAS,e+Dp5MT,kBhEs4MC,mBgEr4MD,yBhEi4MD,kB+Dl1MD,mBA6IA,yB9D4tMA,kBACA,mB8Dj3ME,yB9D62MF,kBACA,mBACA,yB+Dv5MY,QAAA,eACV,yBAAU,YhE04MT,QAAA,gBC4BD,iB+Dp6MU,QAAA,gBhE64MX,c+D51MG,QAAS,oB/Dg2MV,c+Dl2MC,c/Dm2MH,QAAA,sB+D91MG,yB/Dk2MD,kBACF,QAAA,iB+D91MG,yB/Dk2MD,mBACF,QAAA,kBgEh6MC,yBhEo6MC,yBgEn6MD,QAAA,wBACA,+CAAU,YhEw6MT,QAAA,gBC4BD,iB+Dl8MU,QAAA,gBhE26MX,c+Dr2MG,QAAS,oB/Dy2MV,c+D32MC,c/D42MH,QAAA,sB+Dv2MG,+C/D22MD,kBACF,QAAA,iB+Dv2MG,+C/D22MD,mBACF,QAAA,kBgE97MC,+ChEk8MC,yBgEj8MD,QAAA,wBACA,gDAAU,YhEs8MT,QAAA,gBC4BD,iB+Dh+MU,QAAA,gBhEy8MX,c+D92MG,QAAS,oB/Dk3MV,c+Dp3MC,c/Dq3MH,QAAA,sB+Dh3MG,gD/Do3MD,kBACF,QAAA,iB+Dh3MG,gD/Do3MD,mBACF,QAAA,kBgE59MC,gDhEg+MC,yBgE/9MD,QAAA,wBACA,0BAAU,YhEo+MT,QAAA,gBC4BD,iB+D9/MU,QAAA,gBhEu+MX,c+Dv3MG,QAAS,oB/D23MV,c+D73MC,c/D83MH,QAAA,sB+Dz3MG,0B/D63MD,kBACF,QAAA,iB+Dz3MG,0B/D63MD,mBACF,QAAA,kBgEl/MC,0BhEs/MC,yBACF,QAAA,wBgEv/MC,yBhE2/MC,WACF,QAAA,gBgE5/MC,+ChEggNC,WACF,QAAA,gBgEjgNC,gDhEqgNC,WACF,QAAA,gBAGA,0B+Dh3MC,WA4BE,QAAS,gBC5LX,eAAU,QAAA,eACV,aAAU,ehEyhNT,QAAA,gBC4BD,oB+DnjNU,QAAA,gBhE4hNX,iB+D93MG,QAAS,oBAMX,iB/D23MD,iB+Dt2MG,QAAS,sB/D22MZ,qB+D/3MC,QAAS,e/Dk4MV,a+D53MC,qBAcE,QAAS,iB/Dm3MZ,sB+Dh4MC,QAAS,e/Dm4MV,a+D73MC,sBAOE,QAAS,kB/D23MZ,4B+D53MC,QAAS,eCpLT,ahEojNC,4BACF,QAAA,wBC6BD,aACE,cACE,QAAS","sourcesContent":["/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS and IE text size adjust after device orientation change,\n// without disabling user zoom.\n//\n\nhtml {\n font-family: sans-serif; // 1\n -ms-text-size-adjust: 100%; // 2\n -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11\n// and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; // 1\n vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n background-color: transparent;\n}\n\n//\n// Improve readability of focused elements when they are also in an\n// active/hover state.\n//\n\na:active,\na:hover {\n outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n//\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n box-sizing: content-box;\n height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n// Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; // 1\n font: inherit; // 2\n margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n// and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n// `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; // 2\n cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; // 1\n padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome.\n//\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; // 1\n box-sizing: content-box; //2\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n border: 0; // 1\n padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n\n// ==========================================================================\n// Print styles.\n// Inlined to avoid the additional HTTP request: h5bp.com/r\n// ==========================================================================\n\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important; // Black prints faster: h5bp.com/s\n box-shadow: none !important;\n text-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n\n // Don't show links that are fragment identifiers,\n // or use the `javascript:` pseudo protocol\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group; // h5bp.com/t\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n img {\n max-width: 100% !important;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Bootstrap specific changes start\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .btn,\n .dropup > .btn {\n > .caret {\n border-top-color: #000 !important;\n }\n }\n .label {\n border: 1px solid #000;\n }\n\n .table {\n border-collapse: collapse !important;\n\n td,\n th {\n background-color: #fff !important;\n }\n }\n .table-bordered {\n th,\n td {\n border: 1px solid #ddd !important;\n }\n }\n\n // Bootstrap specific changes end\n}\n","/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n font-family: sans-serif;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n}\nbody {\n margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block;\n vertical-align: baseline;\n}\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n[hidden],\ntemplate {\n display: none;\n}\na {\n background-color: transparent;\n}\na:active,\na:hover {\n outline: 0;\n}\nabbr[title] {\n border-bottom: 1px dotted;\n}\nb,\nstrong {\n font-weight: bold;\n}\ndfn {\n font-style: italic;\n}\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\nmark {\n background: #ff0;\n color: #000;\n}\nsmall {\n font-size: 80%;\n}\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\nsup {\n top: -0.5em;\n}\nsub {\n bottom: -0.25em;\n}\nimg {\n border: 0;\n}\nsvg:not(:root) {\n overflow: hidden;\n}\nfigure {\n margin: 1em 40px;\n}\nhr {\n box-sizing: content-box;\n height: 0;\n}\npre {\n overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit;\n font: inherit;\n margin: 0;\n}\nbutton {\n overflow: visible;\n}\nbutton,\nselect {\n text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button;\n cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\ninput {\n line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box;\n padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: textfield;\n box-sizing: content-box;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\nlegend {\n border: 0;\n padding: 0;\n}\ntextarea {\n overflow: auto;\n}\noptgroup {\n font-weight: bold;\n}\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\ntd,\nth {\n padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important;\n box-shadow: none !important;\n text-shadow: none !important;\n }\n a,\n a:visited {\n text-decoration: underline;\n }\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n img {\n max-width: 100% !important;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n .navbar {\n display: none;\n }\n .btn > .caret,\n .dropup > .btn > .caret {\n border-top-color: #000 !important;\n }\n .label {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #ddd !important;\n }\n}\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('../fonts/glyphicons-halflings-regular.eot');\n src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n content: \"\\002a\";\n}\n.glyphicon-plus:before {\n content: \"\\002b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n content: \"\\270f\";\n}\n.glyphicon-glass:before {\n content: \"\\e001\";\n}\n.glyphicon-music:before {\n content: \"\\e002\";\n}\n.glyphicon-search:before {\n content: \"\\e003\";\n}\n.glyphicon-heart:before {\n content: \"\\e005\";\n}\n.glyphicon-star:before {\n content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n content: \"\\e007\";\n}\n.glyphicon-user:before {\n content: \"\\e008\";\n}\n.glyphicon-film:before {\n content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n content: \"\\e010\";\n}\n.glyphicon-th:before {\n content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n content: \"\\e012\";\n}\n.glyphicon-ok:before {\n content: \"\\e013\";\n}\n.glyphicon-remove:before {\n content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n content: \"\\e016\";\n}\n.glyphicon-off:before {\n content: \"\\e017\";\n}\n.glyphicon-signal:before {\n content: \"\\e018\";\n}\n.glyphicon-cog:before {\n content: \"\\e019\";\n}\n.glyphicon-trash:before {\n content: \"\\e020\";\n}\n.glyphicon-home:before {\n content: \"\\e021\";\n}\n.glyphicon-file:before {\n content: \"\\e022\";\n}\n.glyphicon-time:before {\n content: \"\\e023\";\n}\n.glyphicon-road:before {\n content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n content: \"\\e025\";\n}\n.glyphicon-download:before {\n content: \"\\e026\";\n}\n.glyphicon-upload:before {\n content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n content: \"\\e032\";\n}\n.glyphicon-lock:before {\n content: \"\\e033\";\n}\n.glyphicon-flag:before {\n content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n content: \"\\e040\";\n}\n.glyphicon-tag:before {\n content: \"\\e041\";\n}\n.glyphicon-tags:before {\n content: \"\\e042\";\n}\n.glyphicon-book:before {\n content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n content: \"\\e044\";\n}\n.glyphicon-print:before {\n content: \"\\e045\";\n}\n.glyphicon-camera:before {\n content: \"\\e046\";\n}\n.glyphicon-font:before {\n content: \"\\e047\";\n}\n.glyphicon-bold:before {\n content: \"\\e048\";\n}\n.glyphicon-italic:before {\n content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n content: \"\\e055\";\n}\n.glyphicon-list:before {\n content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n content: \"\\e059\";\n}\n.glyphicon-picture:before {\n content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n content: \"\\e063\";\n}\n.glyphicon-tint:before {\n content: \"\\e064\";\n}\n.glyphicon-edit:before {\n content: \"\\e065\";\n}\n.glyphicon-share:before {\n content: \"\\e066\";\n}\n.glyphicon-check:before {\n content: \"\\e067\";\n}\n.glyphicon-move:before {\n content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n content: \"\\e070\";\n}\n.glyphicon-backward:before {\n content: \"\\e071\";\n}\n.glyphicon-play:before {\n content: \"\\e072\";\n}\n.glyphicon-pause:before {\n content: \"\\e073\";\n}\n.glyphicon-stop:before {\n content: \"\\e074\";\n}\n.glyphicon-forward:before {\n content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n content: \"\\e077\";\n}\n.glyphicon-eject:before {\n content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n content: \"\\e101\";\n}\n.glyphicon-gift:before {\n content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n content: \"\\e103\";\n}\n.glyphicon-fire:before {\n content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n content: \"\\e107\";\n}\n.glyphicon-plane:before {\n content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n content: \"\\e109\";\n}\n.glyphicon-random:before {\n content: \"\\e110\";\n}\n.glyphicon-comment:before {\n content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n content: \"\\e122\";\n}\n.glyphicon-bell:before {\n content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n content: \"\\e134\";\n}\n.glyphicon-globe:before {\n content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n content: \"\\e137\";\n}\n.glyphicon-filter:before {\n content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n content: \"\\e143\";\n}\n.glyphicon-link:before {\n content: \"\\e144\";\n}\n.glyphicon-phone:before {\n content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n content: \"\\e146\";\n}\n.glyphicon-usd:before {\n content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n content: \"\\e149\";\n}\n.glyphicon-sort:before {\n content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n content: \"\\e157\";\n}\n.glyphicon-expand:before {\n content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n content: \"\\e161\";\n}\n.glyphicon-flash:before {\n content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n content: \"\\e164\";\n}\n.glyphicon-record:before {\n content: \"\\e165\";\n}\n.glyphicon-save:before {\n content: \"\\e166\";\n}\n.glyphicon-open:before {\n content: \"\\e167\";\n}\n.glyphicon-saved:before {\n content: \"\\e168\";\n}\n.glyphicon-import:before {\n content: \"\\e169\";\n}\n.glyphicon-export:before {\n content: \"\\e170\";\n}\n.glyphicon-send:before {\n content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n content: \"\\e179\";\n}\n.glyphicon-header:before {\n content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n content: \"\\e183\";\n}\n.glyphicon-tower:before {\n content: \"\\e184\";\n}\n.glyphicon-stats:before {\n content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n content: \"\\e200\";\n}\n.glyphicon-cd:before {\n content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n content: \"\\e204\";\n}\n.glyphicon-copy:before {\n content: \"\\e205\";\n}\n.glyphicon-paste:before {\n content: \"\\e206\";\n}\n.glyphicon-alert:before {\n content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n content: \"\\e210\";\n}\n.glyphicon-king:before {\n content: \"\\e211\";\n}\n.glyphicon-queen:before {\n content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n content: \"\\e214\";\n}\n.glyphicon-knight:before {\n content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n content: \"\\e216\";\n}\n.glyphicon-tent:before {\n content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n content: \"\\e218\";\n}\n.glyphicon-bed:before {\n content: \"\\e219\";\n}\n.glyphicon-apple:before {\n content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n content: \"\\e227\";\n}\n.glyphicon-btc:before {\n content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n content: \"\\e227\";\n}\n.glyphicon-yen:before {\n content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n content: \"\\e232\";\n}\n.glyphicon-education:before {\n content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n content: \"\\e237\";\n}\n.glyphicon-oil:before {\n content: \"\\e238\";\n}\n.glyphicon-grain:before {\n content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n content: \"\\e253\";\n}\n.glyphicon-console:before {\n content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n content: \"\\e260\";\n}\n* {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n*:before,\n*:after {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n line-height: 1.42857143;\n color: #333333;\n background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\na {\n color: #337ab7;\n text-decoration: none;\n}\na:hover,\na:focus {\n color: #23527c;\n text-decoration: underline;\n}\na:focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\nfigure {\n margin: 0;\n}\nimg {\n vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n display: block;\n max-width: 100%;\n height: auto;\n}\n.img-rounded {\n border-radius: 6px;\n}\n.img-thumbnail {\n padding: 4px;\n line-height: 1.42857143;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n -webkit-transition: all 0.2s ease-in-out;\n -o-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n display: inline-block;\n max-width: 100%;\n height: auto;\n}\n.img-circle {\n border-radius: 50%;\n}\nhr {\n margin-top: 20px;\n margin-bottom: 20px;\n border: 0;\n border-top: 1px solid #eeeeee;\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n}\n[role=\"button\"] {\n cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n font-family: inherit;\n font-weight: 500;\n line-height: 1.1;\n color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n font-weight: normal;\n line-height: 1;\n color: #777777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n margin-top: 20px;\n margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n margin-top: 10px;\n margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n font-size: 75%;\n}\nh1,\n.h1 {\n font-size: 36px;\n}\nh2,\n.h2 {\n font-size: 30px;\n}\nh3,\n.h3 {\n font-size: 24px;\n}\nh4,\n.h4 {\n font-size: 18px;\n}\nh5,\n.h5 {\n font-size: 14px;\n}\nh6,\n.h6 {\n font-size: 12px;\n}\np {\n margin: 0 0 10px;\n}\n.lead {\n margin-bottom: 20px;\n font-size: 16px;\n font-weight: 300;\n line-height: 1.4;\n}\n@media (min-width: 768px) {\n .lead {\n font-size: 21px;\n }\n}\nsmall,\n.small {\n font-size: 85%;\n}\nmark,\n.mark {\n background-color: #fcf8e3;\n padding: .2em;\n}\n.text-left {\n text-align: left;\n}\n.text-right {\n text-align: right;\n}\n.text-center {\n text-align: center;\n}\n.text-justify {\n text-align: justify;\n}\n.text-nowrap {\n white-space: nowrap;\n}\n.text-lowercase {\n text-transform: lowercase;\n}\n.text-uppercase {\n text-transform: uppercase;\n}\n.text-capitalize {\n text-transform: capitalize;\n}\n.text-muted {\n color: #777777;\n}\n.text-primary {\n color: #337ab7;\n}\na.text-primary:hover,\na.text-primary:focus {\n color: #286090;\n}\n.text-success {\n color: #3c763d;\n}\na.text-success:hover,\na.text-success:focus {\n color: #2b542c;\n}\n.text-info {\n color: #31708f;\n}\na.text-info:hover,\na.text-info:focus {\n color: #245269;\n}\n.text-warning {\n color: #8a6d3b;\n}\na.text-warning:hover,\na.text-warning:focus {\n color: #66512c;\n}\n.text-danger {\n color: #a94442;\n}\na.text-danger:hover,\na.text-danger:focus {\n color: #843534;\n}\n.bg-primary {\n color: #fff;\n background-color: #337ab7;\n}\na.bg-primary:hover,\na.bg-primary:focus {\n background-color: #286090;\n}\n.bg-success {\n background-color: #dff0d8;\n}\na.bg-success:hover,\na.bg-success:focus {\n background-color: #c1e2b3;\n}\n.bg-info {\n background-color: #d9edf7;\n}\na.bg-info:hover,\na.bg-info:focus {\n background-color: #afd9ee;\n}\n.bg-warning {\n background-color: #fcf8e3;\n}\na.bg-warning:hover,\na.bg-warning:focus {\n background-color: #f7ecb5;\n}\n.bg-danger {\n background-color: #f2dede;\n}\na.bg-danger:hover,\na.bg-danger:focus {\n background-color: #e4b9b9;\n}\n.page-header {\n padding-bottom: 9px;\n margin: 40px 0 20px;\n border-bottom: 1px solid #eeeeee;\n}\nul,\nol {\n margin-top: 0;\n margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n margin-bottom: 0;\n}\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n.list-inline {\n padding-left: 0;\n list-style: none;\n margin-left: -5px;\n}\n.list-inline > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n}\ndl {\n margin-top: 0;\n margin-bottom: 20px;\n}\ndt,\ndd {\n line-height: 1.42857143;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0;\n}\n@media (min-width: 768px) {\n .dl-horizontal dt {\n float: left;\n width: 160px;\n clear: left;\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .dl-horizontal dd {\n margin-left: 180px;\n }\n}\nabbr[title],\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted #777777;\n}\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\nblockquote {\n padding: 10px 20px;\n margin: 0 0 20px;\n font-size: 17.5px;\n border-left: 5px solid #eeeeee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n display: block;\n font-size: 80%;\n line-height: 1.42857143;\n color: #777777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid #eeeeee;\n border-left: 0;\n text-align: right;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n content: '\\00A0 \\2014';\n}\naddress {\n margin-bottom: 20px;\n font-style: normal;\n line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: #c7254e;\n background-color: #f9f2f4;\n border-radius: 4px;\n}\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: #fff;\n background-color: #333;\n border-radius: 3px;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n}\npre {\n display: block;\n padding: 9.5px;\n margin: 0 0 10px;\n font-size: 13px;\n line-height: 1.42857143;\n word-break: break-all;\n word-wrap: break-word;\n color: #333333;\n background-color: #f5f5f5;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\npre code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n}\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n.container {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n@media (min-width: 768px) {\n .container {\n width: 750px;\n }\n}\n@media (min-width: 992px) {\n .container {\n width: 970px;\n }\n}\n@media (min-width: 1200px) {\n .container {\n width: 1170px;\n }\n}\n.container-fluid {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n.row {\n margin-left: -15px;\n margin-right: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n position: relative;\n min-height: 1px;\n padding-left: 15px;\n padding-right: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n float: left;\n}\n.col-xs-12 {\n width: 100%;\n}\n.col-xs-11 {\n width: 91.66666667%;\n}\n.col-xs-10 {\n width: 83.33333333%;\n}\n.col-xs-9 {\n width: 75%;\n}\n.col-xs-8 {\n width: 66.66666667%;\n}\n.col-xs-7 {\n width: 58.33333333%;\n}\n.col-xs-6 {\n width: 50%;\n}\n.col-xs-5 {\n width: 41.66666667%;\n}\n.col-xs-4 {\n width: 33.33333333%;\n}\n.col-xs-3 {\n width: 25%;\n}\n.col-xs-2 {\n width: 16.66666667%;\n}\n.col-xs-1 {\n width: 8.33333333%;\n}\n.col-xs-pull-12 {\n right: 100%;\n}\n.col-xs-pull-11 {\n right: 91.66666667%;\n}\n.col-xs-pull-10 {\n right: 83.33333333%;\n}\n.col-xs-pull-9 {\n right: 75%;\n}\n.col-xs-pull-8 {\n right: 66.66666667%;\n}\n.col-xs-pull-7 {\n right: 58.33333333%;\n}\n.col-xs-pull-6 {\n right: 50%;\n}\n.col-xs-pull-5 {\n right: 41.66666667%;\n}\n.col-xs-pull-4 {\n right: 33.33333333%;\n}\n.col-xs-pull-3 {\n right: 25%;\n}\n.col-xs-pull-2 {\n right: 16.66666667%;\n}\n.col-xs-pull-1 {\n right: 8.33333333%;\n}\n.col-xs-pull-0 {\n right: auto;\n}\n.col-xs-push-12 {\n left: 100%;\n}\n.col-xs-push-11 {\n left: 91.66666667%;\n}\n.col-xs-push-10 {\n left: 83.33333333%;\n}\n.col-xs-push-9 {\n left: 75%;\n}\n.col-xs-push-8 {\n left: 66.66666667%;\n}\n.col-xs-push-7 {\n left: 58.33333333%;\n}\n.col-xs-push-6 {\n left: 50%;\n}\n.col-xs-push-5 {\n left: 41.66666667%;\n}\n.col-xs-push-4 {\n left: 33.33333333%;\n}\n.col-xs-push-3 {\n left: 25%;\n}\n.col-xs-push-2 {\n left: 16.66666667%;\n}\n.col-xs-push-1 {\n left: 8.33333333%;\n}\n.col-xs-push-0 {\n left: auto;\n}\n.col-xs-offset-12 {\n margin-left: 100%;\n}\n.col-xs-offset-11 {\n margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n margin-left: 75%;\n}\n.col-xs-offset-8 {\n margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n margin-left: 50%;\n}\n.col-xs-offset-5 {\n margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n margin-left: 25%;\n}\n.col-xs-offset-2 {\n margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n margin-left: 0%;\n}\n@media (min-width: 768px) {\n .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n float: left;\n }\n .col-sm-12 {\n width: 100%;\n }\n .col-sm-11 {\n width: 91.66666667%;\n }\n .col-sm-10 {\n width: 83.33333333%;\n }\n .col-sm-9 {\n width: 75%;\n }\n .col-sm-8 {\n width: 66.66666667%;\n }\n .col-sm-7 {\n width: 58.33333333%;\n }\n .col-sm-6 {\n width: 50%;\n }\n .col-sm-5 {\n width: 41.66666667%;\n }\n .col-sm-4 {\n width: 33.33333333%;\n }\n .col-sm-3 {\n width: 25%;\n }\n .col-sm-2 {\n width: 16.66666667%;\n }\n .col-sm-1 {\n width: 8.33333333%;\n }\n .col-sm-pull-12 {\n right: 100%;\n }\n .col-sm-pull-11 {\n right: 91.66666667%;\n }\n .col-sm-pull-10 {\n right: 83.33333333%;\n }\n .col-sm-pull-9 {\n right: 75%;\n }\n .col-sm-pull-8 {\n right: 66.66666667%;\n }\n .col-sm-pull-7 {\n right: 58.33333333%;\n }\n .col-sm-pull-6 {\n right: 50%;\n }\n .col-sm-pull-5 {\n right: 41.66666667%;\n }\n .col-sm-pull-4 {\n right: 33.33333333%;\n }\n .col-sm-pull-3 {\n right: 25%;\n }\n .col-sm-pull-2 {\n right: 16.66666667%;\n }\n .col-sm-pull-1 {\n right: 8.33333333%;\n }\n .col-sm-pull-0 {\n right: auto;\n }\n .col-sm-push-12 {\n left: 100%;\n }\n .col-sm-push-11 {\n left: 91.66666667%;\n }\n .col-sm-push-10 {\n left: 83.33333333%;\n }\n .col-sm-push-9 {\n left: 75%;\n }\n .col-sm-push-8 {\n left: 66.66666667%;\n }\n .col-sm-push-7 {\n left: 58.33333333%;\n }\n .col-sm-push-6 {\n left: 50%;\n }\n .col-sm-push-5 {\n left: 41.66666667%;\n }\n .col-sm-push-4 {\n left: 33.33333333%;\n }\n .col-sm-push-3 {\n left: 25%;\n }\n .col-sm-push-2 {\n left: 16.66666667%;\n }\n .col-sm-push-1 {\n left: 8.33333333%;\n }\n .col-sm-push-0 {\n left: auto;\n }\n .col-sm-offset-12 {\n margin-left: 100%;\n }\n .col-sm-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-sm-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-sm-offset-9 {\n margin-left: 75%;\n }\n .col-sm-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-sm-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-sm-offset-6 {\n margin-left: 50%;\n }\n .col-sm-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-sm-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-sm-offset-3 {\n margin-left: 25%;\n }\n .col-sm-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-sm-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-sm-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 992px) {\n .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n float: left;\n }\n .col-md-12 {\n width: 100%;\n }\n .col-md-11 {\n width: 91.66666667%;\n }\n .col-md-10 {\n width: 83.33333333%;\n }\n .col-md-9 {\n width: 75%;\n }\n .col-md-8 {\n width: 66.66666667%;\n }\n .col-md-7 {\n width: 58.33333333%;\n }\n .col-md-6 {\n width: 50%;\n }\n .col-md-5 {\n width: 41.66666667%;\n }\n .col-md-4 {\n width: 33.33333333%;\n }\n .col-md-3 {\n width: 25%;\n }\n .col-md-2 {\n width: 16.66666667%;\n }\n .col-md-1 {\n width: 8.33333333%;\n }\n .col-md-pull-12 {\n right: 100%;\n }\n .col-md-pull-11 {\n right: 91.66666667%;\n }\n .col-md-pull-10 {\n right: 83.33333333%;\n }\n .col-md-pull-9 {\n right: 75%;\n }\n .col-md-pull-8 {\n right: 66.66666667%;\n }\n .col-md-pull-7 {\n right: 58.33333333%;\n }\n .col-md-pull-6 {\n right: 50%;\n }\n .col-md-pull-5 {\n right: 41.66666667%;\n }\n .col-md-pull-4 {\n right: 33.33333333%;\n }\n .col-md-pull-3 {\n right: 25%;\n }\n .col-md-pull-2 {\n right: 16.66666667%;\n }\n .col-md-pull-1 {\n right: 8.33333333%;\n }\n .col-md-pull-0 {\n right: auto;\n }\n .col-md-push-12 {\n left: 100%;\n }\n .col-md-push-11 {\n left: 91.66666667%;\n }\n .col-md-push-10 {\n left: 83.33333333%;\n }\n .col-md-push-9 {\n left: 75%;\n }\n .col-md-push-8 {\n left: 66.66666667%;\n }\n .col-md-push-7 {\n left: 58.33333333%;\n }\n .col-md-push-6 {\n left: 50%;\n }\n .col-md-push-5 {\n left: 41.66666667%;\n }\n .col-md-push-4 {\n left: 33.33333333%;\n }\n .col-md-push-3 {\n left: 25%;\n }\n .col-md-push-2 {\n left: 16.66666667%;\n }\n .col-md-push-1 {\n left: 8.33333333%;\n }\n .col-md-push-0 {\n left: auto;\n }\n .col-md-offset-12 {\n margin-left: 100%;\n }\n .col-md-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-md-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-md-offset-9 {\n margin-left: 75%;\n }\n .col-md-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-md-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-md-offset-6 {\n margin-left: 50%;\n }\n .col-md-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-md-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-md-offset-3 {\n margin-left: 25%;\n }\n .col-md-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-md-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-md-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 1200px) {\n .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n float: left;\n }\n .col-lg-12 {\n width: 100%;\n }\n .col-lg-11 {\n width: 91.66666667%;\n }\n .col-lg-10 {\n width: 83.33333333%;\n }\n .col-lg-9 {\n width: 75%;\n }\n .col-lg-8 {\n width: 66.66666667%;\n }\n .col-lg-7 {\n width: 58.33333333%;\n }\n .col-lg-6 {\n width: 50%;\n }\n .col-lg-5 {\n width: 41.66666667%;\n }\n .col-lg-4 {\n width: 33.33333333%;\n }\n .col-lg-3 {\n width: 25%;\n }\n .col-lg-2 {\n width: 16.66666667%;\n }\n .col-lg-1 {\n width: 8.33333333%;\n }\n .col-lg-pull-12 {\n right: 100%;\n }\n .col-lg-pull-11 {\n right: 91.66666667%;\n }\n .col-lg-pull-10 {\n right: 83.33333333%;\n }\n .col-lg-pull-9 {\n right: 75%;\n }\n .col-lg-pull-8 {\n right: 66.66666667%;\n }\n .col-lg-pull-7 {\n right: 58.33333333%;\n }\n .col-lg-pull-6 {\n right: 50%;\n }\n .col-lg-pull-5 {\n right: 41.66666667%;\n }\n .col-lg-pull-4 {\n right: 33.33333333%;\n }\n .col-lg-pull-3 {\n right: 25%;\n }\n .col-lg-pull-2 {\n right: 16.66666667%;\n }\n .col-lg-pull-1 {\n right: 8.33333333%;\n }\n .col-lg-pull-0 {\n right: auto;\n }\n .col-lg-push-12 {\n left: 100%;\n }\n .col-lg-push-11 {\n left: 91.66666667%;\n }\n .col-lg-push-10 {\n left: 83.33333333%;\n }\n .col-lg-push-9 {\n left: 75%;\n }\n .col-lg-push-8 {\n left: 66.66666667%;\n }\n .col-lg-push-7 {\n left: 58.33333333%;\n }\n .col-lg-push-6 {\n left: 50%;\n }\n .col-lg-push-5 {\n left: 41.66666667%;\n }\n .col-lg-push-4 {\n left: 33.33333333%;\n }\n .col-lg-push-3 {\n left: 25%;\n }\n .col-lg-push-2 {\n left: 16.66666667%;\n }\n .col-lg-push-1 {\n left: 8.33333333%;\n }\n .col-lg-push-0 {\n left: auto;\n }\n .col-lg-offset-12 {\n margin-left: 100%;\n }\n .col-lg-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-lg-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-lg-offset-9 {\n margin-left: 75%;\n }\n .col-lg-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-lg-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-lg-offset-6 {\n margin-left: 50%;\n }\n .col-lg-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-lg-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-lg-offset-3 {\n margin-left: 25%;\n }\n .col-lg-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-lg-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-lg-offset-0 {\n margin-left: 0%;\n }\n}\ntable {\n background-color: transparent;\n}\ncaption {\n padding-top: 8px;\n padding-bottom: 8px;\n color: #777777;\n text-align: left;\n}\nth {\n text-align: left;\n}\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n padding: 8px;\n line-height: 1.42857143;\n vertical-align: top;\n border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n border-top: 0;\n}\n.table > tbody + tbody {\n border-top: 2px solid #ddd;\n}\n.table .table {\n background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n padding: 5px;\n}\n.table-bordered {\n border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-column;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-cell;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n background-color: #ebcccc;\n}\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%;\n}\n@media screen and (max-width: 767px) {\n .table-responsive {\n width: 100%;\n margin-bottom: 15px;\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid #ddd;\n }\n .table-responsive > .table {\n margin-bottom: 0;\n }\n .table-responsive > .table > thead > tr > th,\n .table-responsive > .table > tbody > tr > th,\n .table-responsive > .table > tfoot > tr > th,\n .table-responsive > .table > thead > tr > td,\n .table-responsive > .table > tbody > tr > td,\n .table-responsive > .table > tfoot > tr > td {\n white-space: nowrap;\n }\n .table-responsive > .table-bordered {\n border: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:first-child,\n .table-responsive > .table-bordered > tbody > tr > th:first-child,\n .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n .table-responsive > .table-bordered > thead > tr > td:first-child,\n .table-responsive > .table-bordered > tbody > tr > td:first-child,\n .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:last-child,\n .table-responsive > .table-bordered > tbody > tr > th:last-child,\n .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n .table-responsive > .table-bordered > thead > tr > td:last-child,\n .table-responsive > .table-bordered > tbody > tr > td:last-child,\n .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n }\n .table-responsive > .table-bordered > tbody > tr:last-child > th,\n .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n .table-responsive > .table-bordered > tbody > tr:last-child > td,\n .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n border-bottom: 0;\n }\n}\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n min-width: 0;\n}\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: 20px;\n font-size: 21px;\n line-height: inherit;\n color: #333333;\n border: 0;\n border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 5px;\n font-weight: bold;\n}\ninput[type=\"search\"] {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9;\n line-height: normal;\n}\ninput[type=\"file\"] {\n display: block;\n}\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\nselect[multiple],\nselect[size] {\n height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\noutput {\n display: block;\n padding-top: 7px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n}\n.form-control {\n display: block;\n width: 100%;\n height: 34px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n background-color: #fff;\n background-image: none;\n border: 1px solid #ccc;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n border-color: #66afe9;\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.form-control::-moz-placeholder {\n color: #999;\n opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n color: #999;\n}\n.form-control::-webkit-input-placeholder {\n color: #999;\n}\n.form-control::-ms-expand {\n border: 0;\n background-color: transparent;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n background-color: #eeeeee;\n opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n cursor: not-allowed;\n}\ntextarea.form-control {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"].form-control,\n input[type=\"time\"].form-control,\n input[type=\"datetime-local\"].form-control,\n input[type=\"month\"].form-control {\n line-height: 34px;\n }\n input[type=\"date\"].input-sm,\n input[type=\"time\"].input-sm,\n input[type=\"datetime-local\"].input-sm,\n input[type=\"month\"].input-sm,\n .input-group-sm input[type=\"date\"],\n .input-group-sm input[type=\"time\"],\n .input-group-sm input[type=\"datetime-local\"],\n .input-group-sm input[type=\"month\"] {\n line-height: 30px;\n }\n input[type=\"date\"].input-lg,\n input[type=\"time\"].input-lg,\n input[type=\"datetime-local\"].input-lg,\n input[type=\"month\"].input-lg,\n .input-group-lg input[type=\"date\"],\n .input-group-lg input[type=\"time\"],\n .input-group-lg input[type=\"datetime-local\"],\n .input-group-lg input[type=\"month\"] {\n line-height: 46px;\n }\n}\n.form-group {\n margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n min-height: 20px;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n cursor: not-allowed;\n}\n.form-control-static {\n padding-top: 7px;\n padding-bottom: 7px;\n margin-bottom: 0;\n min-height: 34px;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n padding-left: 0;\n padding-right: 0;\n}\n.input-sm {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-sm {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n height: auto;\n}\n.form-group-sm .form-control {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.form-group-sm select.form-control {\n height: 30px;\n line-height: 30px;\n}\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n height: auto;\n}\n.form-group-sm .form-control-static {\n height: 30px;\n min-height: 32px;\n padding: 6px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.input-lg {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-lg {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n height: auto;\n}\n.form-group-lg .form-control {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.form-group-lg select.form-control {\n height: 46px;\n line-height: 46px;\n}\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n height: auto;\n}\n.form-group-lg .form-control-static {\n height: 46px;\n min-height: 38px;\n padding: 11px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.has-feedback {\n position: relative;\n}\n.has-feedback .form-control {\n padding-right: 42.5px;\n}\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: 34px;\n height: 34px;\n line-height: 34px;\n text-align: center;\n pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n width: 46px;\n height: 46px;\n line-height: 46px;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n width: 30px;\n height: 30px;\n line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n color: #3c763d;\n}\n.has-success .form-control {\n border-color: #3c763d;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-success .form-control:focus {\n border-color: #2b542c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n color: #3c763d;\n border-color: #3c763d;\n background-color: #dff0d8;\n}\n.has-success .form-control-feedback {\n color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n color: #8a6d3b;\n}\n.has-warning .form-control {\n border-color: #8a6d3b;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-warning .form-control:focus {\n border-color: #66512c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n color: #8a6d3b;\n border-color: #8a6d3b;\n background-color: #fcf8e3;\n}\n.has-warning .form-control-feedback {\n color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n color: #a94442;\n}\n.has-error .form-control {\n border-color: #a94442;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-error .form-control:focus {\n border-color: #843534;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n color: #a94442;\n border-color: #a94442;\n background-color: #f2dede;\n}\n.has-error .form-control-feedback {\n color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n top: 0;\n}\n.help-block {\n display: block;\n margin-top: 5px;\n margin-bottom: 10px;\n color: #737373;\n}\n@media (min-width: 768px) {\n .form-inline .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-static {\n display: inline-block;\n }\n .form-inline .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .form-inline .input-group .input-group-addon,\n .form-inline .input-group .input-group-btn,\n .form-inline .input-group .form-control {\n width: auto;\n }\n .form-inline .input-group > .form-control {\n width: 100%;\n }\n .form-inline .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio,\n .form-inline .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio label,\n .form-inline .checkbox label {\n padding-left: 0;\n }\n .form-inline .radio input[type=\"radio\"],\n .form-inline .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .form-inline .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: 7px;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n min-height: 27px;\n}\n.form-horizontal .form-group {\n margin-left: -15px;\n margin-right: -15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .control-label {\n text-align: right;\n margin-bottom: 0;\n padding-top: 7px;\n }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n right: 15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-lg .control-label {\n padding-top: 11px;\n font-size: 18px;\n }\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-sm .control-label {\n padding-top: 6px;\n font-size: 12px;\n }\n}\n.btn {\n display: inline-block;\n margin-bottom: 0;\n font-weight: normal;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none;\n border: 1px solid transparent;\n white-space: nowrap;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n border-radius: 4px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n color: #333;\n text-decoration: none;\n}\n.btn:active,\n.btn.active {\n outline: 0;\n background-image: none;\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n cursor: not-allowed;\n opacity: 0.65;\n filter: alpha(opacity=65);\n -webkit-box-shadow: none;\n box-shadow: none;\n}\na.btn.disabled,\nfieldset[disabled] a.btn {\n pointer-events: none;\n}\n.btn-default {\n color: #333;\n background-color: #fff;\n border-color: #ccc;\n}\n.btn-default:focus,\n.btn-default.focus {\n color: #333;\n background-color: #e6e6e6;\n border-color: #8c8c8c;\n}\n.btn-default:hover {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active:hover,\n.btn-default.active:hover,\n.open > .dropdown-toggle.btn-default:hover,\n.btn-default:active:focus,\n.btn-default.active:focus,\n.open > .dropdown-toggle.btn-default:focus,\n.btn-default:active.focus,\n.btn-default.active.focus,\n.open > .dropdown-toggle.btn-default.focus {\n color: #333;\n background-color: #d4d4d4;\n border-color: #8c8c8c;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n background-image: none;\n}\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus {\n background-color: #fff;\n border-color: #ccc;\n}\n.btn-default .badge {\n color: #fff;\n background-color: #333;\n}\n.btn-primary {\n color: #fff;\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary:focus,\n.btn-primary.focus {\n color: #fff;\n background-color: #286090;\n border-color: #122b40;\n}\n.btn-primary:hover {\n color: #fff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n color: #fff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active:hover,\n.btn-primary.active:hover,\n.open > .dropdown-toggle.btn-primary:hover,\n.btn-primary:active:focus,\n.btn-primary.active:focus,\n.open > .dropdown-toggle.btn-primary:focus,\n.btn-primary:active.focus,\n.btn-primary.active.focus,\n.open > .dropdown-toggle.btn-primary.focus {\n color: #fff;\n background-color: #204d74;\n border-color: #122b40;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n background-image: none;\n}\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus {\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.btn-success {\n color: #fff;\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success:focus,\n.btn-success.focus {\n color: #fff;\n background-color: #449d44;\n border-color: #255625;\n}\n.btn-success:hover {\n color: #fff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n color: #fff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active:hover,\n.btn-success.active:hover,\n.open > .dropdown-toggle.btn-success:hover,\n.btn-success:active:focus,\n.btn-success.active:focus,\n.open > .dropdown-toggle.btn-success:focus,\n.btn-success:active.focus,\n.btn-success.active.focus,\n.open > .dropdown-toggle.btn-success.focus {\n color: #fff;\n background-color: #398439;\n border-color: #255625;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n background-image: none;\n}\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus {\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success .badge {\n color: #5cb85c;\n background-color: #fff;\n}\n.btn-info {\n color: #fff;\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info:focus,\n.btn-info.focus {\n color: #fff;\n background-color: #31b0d5;\n border-color: #1b6d85;\n}\n.btn-info:hover {\n color: #fff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n color: #fff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active:hover,\n.btn-info.active:hover,\n.open > .dropdown-toggle.btn-info:hover,\n.btn-info:active:focus,\n.btn-info.active:focus,\n.open > .dropdown-toggle.btn-info:focus,\n.btn-info:active.focus,\n.btn-info.active.focus,\n.open > .dropdown-toggle.btn-info.focus {\n color: #fff;\n background-color: #269abc;\n border-color: #1b6d85;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n background-image: none;\n}\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus {\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info .badge {\n color: #5bc0de;\n background-color: #fff;\n}\n.btn-warning {\n color: #fff;\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning:focus,\n.btn-warning.focus {\n color: #fff;\n background-color: #ec971f;\n border-color: #985f0d;\n}\n.btn-warning:hover {\n color: #fff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n color: #fff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active:hover,\n.btn-warning.active:hover,\n.open > .dropdown-toggle.btn-warning:hover,\n.btn-warning:active:focus,\n.btn-warning.active:focus,\n.open > .dropdown-toggle.btn-warning:focus,\n.btn-warning:active.focus,\n.btn-warning.active.focus,\n.open > .dropdown-toggle.btn-warning.focus {\n color: #fff;\n background-color: #d58512;\n border-color: #985f0d;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n background-image: none;\n}\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus {\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning .badge {\n color: #f0ad4e;\n background-color: #fff;\n}\n.btn-danger {\n color: #fff;\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger:focus,\n.btn-danger.focus {\n color: #fff;\n background-color: #c9302c;\n border-color: #761c19;\n}\n.btn-danger:hover {\n color: #fff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n color: #fff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active:hover,\n.btn-danger.active:hover,\n.open > .dropdown-toggle.btn-danger:hover,\n.btn-danger:active:focus,\n.btn-danger.active:focus,\n.open > .dropdown-toggle.btn-danger:focus,\n.btn-danger:active.focus,\n.btn-danger.active.focus,\n.open > .dropdown-toggle.btn-danger.focus {\n color: #fff;\n background-color: #ac2925;\n border-color: #761c19;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n background-image: none;\n}\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus {\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger .badge {\n color: #d9534f;\n background-color: #fff;\n}\n.btn-link {\n color: #337ab7;\n font-weight: normal;\n border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n background-color: transparent;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n color: #23527c;\n text-decoration: underline;\n background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n color: #777777;\n text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n padding: 1px 5px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-block {\n display: block;\n width: 100%;\n}\n.btn-block + .btn-block {\n margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n.fade {\n opacity: 0;\n -webkit-transition: opacity 0.15s linear;\n -o-transition: opacity 0.15s linear;\n transition: opacity 0.15s linear;\n}\n.fade.in {\n opacity: 1;\n}\n.collapse {\n display: none;\n}\n.collapse.in {\n display: block;\n}\ntr.collapse.in {\n display: table-row;\n}\ntbody.collapse.in {\n display: table-row-group;\n}\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n -webkit-transition-property: height, visibility;\n transition-property: height, visibility;\n -webkit-transition-duration: 0.35s;\n transition-duration: 0.35s;\n -webkit-transition-timing-function: ease;\n transition-timing-function: ease;\n}\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px dashed;\n border-top: 4px solid \\9;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n position: relative;\n}\n.dropdown-toggle:focus {\n outline: 0;\n}\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0;\n list-style: none;\n font-size: 14px;\n text-align: left;\n background-color: #fff;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n background-clip: padding-box;\n}\n.dropdown-menu.pull-right {\n right: 0;\n left: auto;\n}\n.dropdown-menu .divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: 1.42857143;\n color: #333333;\n white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n text-decoration: none;\n color: #262626;\n background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n background-color: #337ab7;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n color: #777777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n cursor: not-allowed;\n}\n.open > .dropdown-menu {\n display: block;\n}\n.open > a {\n outline: 0;\n}\n.dropdown-menu-right {\n left: auto;\n right: 0;\n}\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: 12px;\n line-height: 1.42857143;\n color: #777777;\n white-space: nowrap;\n}\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: 990;\n}\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n border-top: 0;\n border-bottom: 4px dashed;\n border-bottom: 4px solid \\9;\n content: \"\";\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n .navbar-right .dropdown-menu {\n left: auto;\n right: 0;\n }\n .navbar-right .dropdown-menu-left {\n left: 0;\n right: auto;\n }\n}\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n margin-left: -1px;\n}\n.btn-toolbar {\n margin-left: -5px;\n}\n.btn-toolbar .btn,\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n.btn-group > .btn:first-child {\n margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n.btn-group.open .dropdown-toggle {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn .caret {\n margin-left: 0;\n}\n.btn-lg .caret {\n border-width: 5px 5px 0;\n border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.input-group {\n position: relative;\n display: table;\n border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n}\n.input-group .form-control {\n position: relative;\n z-index: 2;\n float: left;\n width: 100%;\n margin-bottom: 0;\n}\n.input-group .form-control:focus {\n z-index: 3;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle;\n}\n.input-group-addon {\n padding: 6px 12px;\n font-size: 14px;\n font-weight: normal;\n line-height: 1;\n color: #555555;\n text-align: center;\n background-color: #eeeeee;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\n.input-group-addon.input-sm {\n padding: 5px 10px;\n font-size: 12px;\n border-radius: 3px;\n}\n.input-group-addon.input-lg {\n padding: 10px 16px;\n font-size: 18px;\n border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n.input-group-btn {\n position: relative;\n font-size: 0;\n white-space: nowrap;\n}\n.input-group-btn > .btn {\n position: relative;\n}\n.input-group-btn > .btn + .btn {\n margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n z-index: 2;\n margin-left: -1px;\n}\n.nav {\n margin-bottom: 0;\n padding-left: 0;\n list-style: none;\n}\n.nav > li {\n position: relative;\n display: block;\n}\n.nav > li > a {\n position: relative;\n display: block;\n padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.nav > li.disabled > a {\n color: #777777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n color: #777777;\n text-decoration: none;\n background-color: transparent;\n cursor: not-allowed;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n background-color: #eeeeee;\n border-color: #337ab7;\n}\n.nav .nav-divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.nav > li > a > img {\n max-width: none;\n}\n.nav-tabs {\n border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n float: left;\n margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n margin-right: 2px;\n line-height: 1.42857143;\n border: 1px solid transparent;\n border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n border-color: #eeeeee #eeeeee #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n color: #555555;\n background-color: #fff;\n border: 1px solid #ddd;\n border-bottom-color: transparent;\n cursor: default;\n}\n.nav-tabs.nav-justified {\n width: 100%;\n border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n float: none;\n}\n.nav-tabs.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-tabs.nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs.nav-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs.nav-justified > .active > a,\n .nav-tabs.nav-justified > .active > a:hover,\n .nav-tabs.nav-justified > .active > a:focus {\n border-bottom-color: #fff;\n }\n}\n.nav-pills > li {\n float: left;\n}\n.nav-pills > li > a {\n border-radius: 4px;\n}\n.nav-pills > li + li {\n margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n color: #fff;\n background-color: #337ab7;\n}\n.nav-stacked > li {\n float: none;\n}\n.nav-stacked > li + li {\n margin-top: 2px;\n margin-left: 0;\n}\n.nav-justified {\n width: 100%;\n}\n.nav-justified > li {\n float: none;\n}\n.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs-justified {\n border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n .nav-tabs-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs-justified > .active > a,\n .nav-tabs-justified > .active > a:hover,\n .nav-tabs-justified > .active > a:focus {\n border-bottom-color: #fff;\n }\n}\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar {\n position: relative;\n min-height: 50px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n .navbar {\n border-radius: 4px;\n }\n}\n@media (min-width: 768px) {\n .navbar-header {\n float: left;\n }\n}\n.navbar-collapse {\n overflow-x: visible;\n padding-right: 15px;\n padding-left: 15px;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n -webkit-overflow-scrolling: touch;\n}\n.navbar-collapse.in {\n overflow-y: auto;\n}\n@media (min-width: 768px) {\n .navbar-collapse {\n width: auto;\n border-top: 0;\n box-shadow: none;\n }\n .navbar-collapse.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0;\n overflow: visible !important;\n }\n .navbar-collapse.in {\n overflow-y: visible;\n }\n .navbar-fixed-top .navbar-collapse,\n .navbar-static-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n padding-left: 0;\n padding-right: 0;\n }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n .navbar-fixed-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n max-height: 200px;\n }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n margin-right: -15px;\n margin-left: -15px;\n}\n@media (min-width: 768px) {\n .container > .navbar-header,\n .container-fluid > .navbar-header,\n .container > .navbar-collapse,\n .container-fluid > .navbar-collapse {\n margin-right: 0;\n margin-left: 0;\n }\n}\n.navbar-static-top {\n z-index: 1000;\n border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n .navbar-static-top {\n border-radius: 0;\n }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n@media (min-width: 768px) {\n .navbar-fixed-top,\n .navbar-fixed-bottom {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0;\n border-width: 1px 0 0;\n}\n.navbar-brand {\n float: left;\n padding: 15px 15px;\n font-size: 18px;\n line-height: 20px;\n height: 50px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n text-decoration: none;\n}\n.navbar-brand > img {\n display: block;\n}\n@media (min-width: 768px) {\n .navbar > .container .navbar-brand,\n .navbar > .container-fluid .navbar-brand {\n margin-left: -15px;\n }\n}\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: 15px;\n padding: 9px 10px;\n margin-top: 8px;\n margin-bottom: 8px;\n background-color: transparent;\n background-image: none;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.navbar-toggle:focus {\n outline: 0;\n}\n.navbar-toggle .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n margin-top: 4px;\n}\n@media (min-width: 768px) {\n .navbar-toggle {\n display: none;\n }\n}\n.navbar-nav {\n margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: 20px;\n}\n@media (max-width: 767px) {\n .navbar-nav .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n }\n .navbar-nav .open .dropdown-menu > li > a,\n .navbar-nav .open .dropdown-menu .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n .navbar-nav .open .dropdown-menu > li > a {\n line-height: 20px;\n }\n .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-nav .open .dropdown-menu > li > a:focus {\n background-image: none;\n }\n}\n@media (min-width: 768px) {\n .navbar-nav {\n float: left;\n margin: 0;\n }\n .navbar-nav > li {\n float: left;\n }\n .navbar-nav > li > a {\n padding-top: 15px;\n padding-bottom: 15px;\n }\n}\n.navbar-form {\n margin-left: -15px;\n margin-right: -15px;\n padding: 10px 15px;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n margin-top: 8px;\n margin-bottom: 8px;\n}\n@media (min-width: 768px) {\n .navbar-form .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .navbar-form .form-control-static {\n display: inline-block;\n }\n .navbar-form .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .navbar-form .input-group .input-group-addon,\n .navbar-form .input-group .input-group-btn,\n .navbar-form .input-group .form-control {\n width: auto;\n }\n .navbar-form .input-group > .form-control {\n width: 100%;\n }\n .navbar-form .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio,\n .navbar-form .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio label,\n .navbar-form .checkbox label {\n padding-left: 0;\n }\n .navbar-form .radio input[type=\"radio\"],\n .navbar-form .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .navbar-form .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n@media (max-width: 767px) {\n .navbar-form .form-group {\n margin-bottom: 5px;\n }\n .navbar-form .form-group:last-child {\n margin-bottom: 0;\n }\n}\n@media (min-width: 768px) {\n .navbar-form {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n}\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.navbar-btn {\n margin-top: 8px;\n margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n margin-top: 14px;\n margin-bottom: 14px;\n}\n.navbar-text {\n margin-top: 15px;\n margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n .navbar-text {\n float: left;\n margin-left: 15px;\n margin-right: 15px;\n }\n}\n@media (min-width: 768px) {\n .navbar-left {\n float: left !important;\n }\n .navbar-right {\n float: right !important;\n margin-right: -15px;\n }\n .navbar-right ~ .navbar-right {\n margin-right: 0;\n }\n}\n.navbar-default {\n background-color: #f8f8f8;\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n color: #777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n color: #5e5e5e;\n background-color: transparent;\n}\n.navbar-default .navbar-text {\n color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n color: #777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n color: #333;\n background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n color: #555;\n background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n color: #ccc;\n background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n background-color: #e7e7e7;\n color: #555;\n}\n@media (max-width: 767px) {\n .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n color: #777;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #333;\n background-color: transparent;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #555;\n background-color: #e7e7e7;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #ccc;\n background-color: transparent;\n }\n}\n.navbar-default .navbar-link {\n color: #777;\n}\n.navbar-default .navbar-link:hover {\n color: #333;\n}\n.navbar-default .btn-link {\n color: #777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n color: #333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n color: #ccc;\n}\n.navbar-inverse {\n background-color: #222;\n border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n color: #fff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n color: #fff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n color: #fff;\n background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n color: #444;\n background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n background-color: #080808;\n color: #fff;\n}\n@media (max-width: 767px) {\n .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n border-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n color: #9d9d9d;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #fff;\n background-color: transparent;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #444;\n background-color: transparent;\n }\n}\n.navbar-inverse .navbar-link {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n color: #fff;\n}\n.navbar-inverse .btn-link {\n color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n color: #fff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n color: #444;\n}\n.breadcrumb {\n padding: 8px 15px;\n margin-bottom: 20px;\n list-style: none;\n background-color: #f5f5f5;\n border-radius: 4px;\n}\n.breadcrumb > li {\n display: inline-block;\n}\n.breadcrumb > li + li:before {\n content: \"/\\00a0\";\n padding: 0 5px;\n color: #ccc;\n}\n.breadcrumb > .active {\n color: #777777;\n}\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: 20px 0;\n border-radius: 4px;\n}\n.pagination > li {\n display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n position: relative;\n float: left;\n padding: 6px 12px;\n line-height: 1.42857143;\n text-decoration: none;\n color: #337ab7;\n background-color: #fff;\n border: 1px solid #ddd;\n margin-left: -1px;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n margin-left: 0;\n border-bottom-left-radius: 4px;\n border-top-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n border-bottom-right-radius: 4px;\n border-top-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n z-index: 2;\n color: #23527c;\n background-color: #eeeeee;\n border-color: #ddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n z-index: 3;\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n cursor: default;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n color: #777777;\n background-color: #fff;\n border-color: #ddd;\n cursor: not-allowed;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n border-bottom-left-radius: 6px;\n border-top-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n border-bottom-right-radius: 6px;\n border-top-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n border-bottom-left-radius: 3px;\n border-top-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n border-bottom-right-radius: 3px;\n border-top-right-radius: 3px;\n}\n.pager {\n padding-left: 0;\n margin: 20px 0;\n list-style: none;\n text-align: center;\n}\n.pager li {\n display: inline;\n}\n.pager li > a,\n.pager li > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.pager .next > a,\n.pager .next > span {\n float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n color: #777777;\n background-color: #fff;\n cursor: not-allowed;\n}\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer;\n}\n.label:empty {\n display: none;\n}\n.btn .label {\n position: relative;\n top: -1px;\n}\n.label-default {\n background-color: #777777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n background-color: #5e5e5e;\n}\n.label-primary {\n background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n background-color: #286090;\n}\n.label-success {\n background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n background-color: #449d44;\n}\n.label-info {\n background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n background-color: #31b0d5;\n}\n.label-warning {\n background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n background-color: #ec971f;\n}\n.label-danger {\n background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n background-color: #c9302c;\n}\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: 12px;\n font-weight: bold;\n color: #fff;\n line-height: 1;\n vertical-align: middle;\n white-space: nowrap;\n text-align: center;\n background-color: #777777;\n border-radius: 10px;\n}\n.badge:empty {\n display: none;\n}\n.btn .badge {\n position: relative;\n top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n top: 0;\n padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.list-group-item > .badge {\n float: right;\n}\n.list-group-item > .badge + .badge {\n margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n margin-left: 3px;\n}\n.jumbotron {\n padding-top: 30px;\n padding-bottom: 30px;\n margin-bottom: 30px;\n color: inherit;\n background-color: #eeeeee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n color: inherit;\n}\n.jumbotron p {\n margin-bottom: 15px;\n font-size: 21px;\n font-weight: 200;\n}\n.jumbotron > hr {\n border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n border-radius: 6px;\n padding-left: 15px;\n padding-right: 15px;\n}\n.jumbotron .container {\n max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n .jumbotron {\n padding-top: 48px;\n padding-bottom: 48px;\n }\n .container .jumbotron,\n .container-fluid .jumbotron {\n padding-left: 60px;\n padding-right: 60px;\n }\n .jumbotron h1,\n .jumbotron .h1 {\n font-size: 63px;\n }\n}\n.thumbnail {\n display: block;\n padding: 4px;\n margin-bottom: 20px;\n line-height: 1.42857143;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n -webkit-transition: border 0.2s ease-in-out;\n -o-transition: border 0.2s ease-in-out;\n transition: border 0.2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n margin-left: auto;\n margin-right: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n border-color: #337ab7;\n}\n.thumbnail .caption {\n padding: 9px;\n color: #333333;\n}\n.alert {\n padding: 15px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.alert h4 {\n margin-top: 0;\n color: inherit;\n}\n.alert .alert-link {\n font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n margin-bottom: 0;\n}\n.alert > p + p {\n margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n}\n.alert-success {\n background-color: #dff0d8;\n border-color: #d6e9c6;\n color: #3c763d;\n}\n.alert-success hr {\n border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n color: #2b542c;\n}\n.alert-info {\n background-color: #d9edf7;\n border-color: #bce8f1;\n color: #31708f;\n}\n.alert-info hr {\n border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n color: #245269;\n}\n.alert-warning {\n background-color: #fcf8e3;\n border-color: #faebcc;\n color: #8a6d3b;\n}\n.alert-warning hr {\n border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n color: #66512c;\n}\n.alert-danger {\n background-color: #f2dede;\n border-color: #ebccd1;\n color: #a94442;\n}\n.alert-danger hr {\n border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n@keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n.progress {\n overflow: hidden;\n height: 20px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: 12px;\n line-height: 20px;\n color: #fff;\n text-align: center;\n background-color: #337ab7;\n -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n -webkit-transition: width 0.6s ease;\n -o-transition: width 0.6s ease;\n transition: width 0.6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n -webkit-animation: progress-bar-stripes 2s linear infinite;\n -o-animation: progress-bar-stripes 2s linear infinite;\n animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.media {\n margin-top: 15px;\n}\n.media:first-child {\n margin-top: 0;\n}\n.media,\n.media-body {\n zoom: 1;\n overflow: hidden;\n}\n.media-body {\n width: 10000px;\n}\n.media-object {\n display: block;\n}\n.media-object.img-thumbnail {\n max-width: none;\n}\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n.media-middle {\n vertical-align: middle;\n}\n.media-bottom {\n vertical-align: bottom;\n}\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n.list-group {\n margin-bottom: 20px;\n padding-left: 0;\n}\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n margin-bottom: -1px;\n background-color: #fff;\n border: 1px solid #ddd;\n}\n.list-group-item:first-child {\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n}\n.list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\na.list-group-item,\nbutton.list-group-item {\n color: #555;\n}\na.list-group-item .list-group-item-heading,\nbutton.list-group-item .list-group-item-heading {\n color: #333;\n}\na.list-group-item:hover,\nbutton.list-group-item:hover,\na.list-group-item:focus,\nbutton.list-group-item:focus {\n text-decoration: none;\n color: #555;\n background-color: #f5f5f5;\n}\nbutton.list-group-item {\n width: 100%;\n text-align: left;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n background-color: #eeeeee;\n color: #777777;\n cursor: not-allowed;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n color: #777777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n z-index: 2;\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n color: #c7ddef;\n}\n.list-group-item-success {\n color: #3c763d;\n background-color: #dff0d8;\n}\na.list-group-item-success,\nbutton.list-group-item-success {\n color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading,\nbutton.list-group-item-success .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-success:hover,\nbutton.list-group-item-success:hover,\na.list-group-item-success:focus,\nbutton.list-group-item-success:focus {\n color: #3c763d;\n background-color: #d0e9c6;\n}\na.list-group-item-success.active,\nbutton.list-group-item-success.active,\na.list-group-item-success.active:hover,\nbutton.list-group-item-success.active:hover,\na.list-group-item-success.active:focus,\nbutton.list-group-item-success.active:focus {\n color: #fff;\n background-color: #3c763d;\n border-color: #3c763d;\n}\n.list-group-item-info {\n color: #31708f;\n background-color: #d9edf7;\n}\na.list-group-item-info,\nbutton.list-group-item-info {\n color: #31708f;\n}\na.list-group-item-info .list-group-item-heading,\nbutton.list-group-item-info .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-info:hover,\nbutton.list-group-item-info:hover,\na.list-group-item-info:focus,\nbutton.list-group-item-info:focus {\n color: #31708f;\n background-color: #c4e3f3;\n}\na.list-group-item-info.active,\nbutton.list-group-item-info.active,\na.list-group-item-info.active:hover,\nbutton.list-group-item-info.active:hover,\na.list-group-item-info.active:focus,\nbutton.list-group-item-info.active:focus {\n color: #fff;\n background-color: #31708f;\n border-color: #31708f;\n}\n.list-group-item-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n}\na.list-group-item-warning,\nbutton.list-group-item-warning {\n color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading,\nbutton.list-group-item-warning .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-warning:hover,\nbutton.list-group-item-warning:hover,\na.list-group-item-warning:focus,\nbutton.list-group-item-warning:focus {\n color: #8a6d3b;\n background-color: #faf2cc;\n}\na.list-group-item-warning.active,\nbutton.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\nbutton.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus,\nbutton.list-group-item-warning.active:focus {\n color: #fff;\n background-color: #8a6d3b;\n border-color: #8a6d3b;\n}\n.list-group-item-danger {\n color: #a94442;\n background-color: #f2dede;\n}\na.list-group-item-danger,\nbutton.list-group-item-danger {\n color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading,\nbutton.list-group-item-danger .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-danger:hover,\nbutton.list-group-item-danger:hover,\na.list-group-item-danger:focus,\nbutton.list-group-item-danger:focus {\n color: #a94442;\n background-color: #ebcccc;\n}\na.list-group-item-danger.active,\nbutton.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\nbutton.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus,\nbutton.list-group-item-danger.active:focus {\n color: #fff;\n background-color: #a94442;\n border-color: #a94442;\n}\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n.panel {\n margin-bottom: 20px;\n background-color: #fff;\n border: 1px solid transparent;\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.panel-body {\n padding: 15px;\n}\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n color: inherit;\n}\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n color: inherit;\n}\n.panel-footer {\n padding: 10px 15px;\n background-color: #f5f5f5;\n border-top: 1px solid #ddd;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n border-top: 0;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n border-bottom: 0;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n border-top-width: 0;\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n padding-left: 15px;\n padding-right: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n border-bottom-left-radius: 3px;\n border-bottom-right-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n border-bottom: 0;\n}\n.panel > .table-responsive {\n border: 0;\n margin-bottom: 0;\n}\n.panel-group {\n margin-bottom: 20px;\n}\n.panel-group .panel {\n margin-bottom: 0;\n border-radius: 4px;\n}\n.panel-group .panel + .panel {\n margin-top: 5px;\n}\n.panel-group .panel-heading {\n border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n border-top: 1px solid #ddd;\n}\n.panel-group .panel-footer {\n border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n border-bottom: 1px solid #ddd;\n}\n.panel-default {\n border-color: #ddd;\n}\n.panel-default > .panel-heading {\n color: #333333;\n background-color: #f5f5f5;\n border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ddd;\n}\n.panel-default > .panel-heading .badge {\n color: #f5f5f5;\n background-color: #333333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ddd;\n}\n.panel-primary {\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #337ab7;\n}\n.panel-success {\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n color: #dff0d8;\n background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #d6e9c6;\n}\n.panel-info {\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n color: #d9edf7;\n background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #bce8f1;\n}\n.panel-warning {\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n color: #fcf8e3;\n background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #faebcc;\n}\n.panel-danger {\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n color: #f2dede;\n background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0;\n}\n.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border: 1px solid #e3e3e3;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.well blockquote {\n border-color: #ddd;\n border-color: rgba(0, 0, 0, 0.15);\n}\n.well-lg {\n padding: 24px;\n border-radius: 6px;\n}\n.well-sm {\n padding: 9px;\n border-radius: 3px;\n}\n.close {\n float: right;\n font-size: 21px;\n font-weight: bold;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n opacity: 0.2;\n filter: alpha(opacity=20);\n}\n.close:hover,\n.close:focus {\n color: #000;\n text-decoration: none;\n cursor: pointer;\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\nbutton.close {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n}\n.modal-open {\n overflow: hidden;\n}\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1050;\n -webkit-overflow-scrolling: touch;\n outline: 0;\n}\n.modal.fade .modal-dialog {\n -webkit-transform: translate(0, -25%);\n -ms-transform: translate(0, -25%);\n -o-transform: translate(0, -25%);\n transform: translate(0, -25%);\n -webkit-transition: -webkit-transform 0.3s ease-out;\n -moz-transition: -moz-transform 0.3s ease-out;\n -o-transition: -o-transform 0.3s ease-out;\n transition: transform 0.3s ease-out;\n}\n.modal.in .modal-dialog {\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n -o-transform: translate(0, 0);\n transform: translate(0, 0);\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n.modal-content {\n position: relative;\n background-color: #fff;\n border: 1px solid #999;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n background-clip: padding-box;\n outline: 0;\n}\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n background-color: #000;\n}\n.modal-backdrop.fade {\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.modal-backdrop.in {\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\n.modal-header {\n padding: 15px;\n border-bottom: 1px solid #e5e5e5;\n}\n.modal-header .close {\n margin-top: -2px;\n}\n.modal-title {\n margin: 0;\n line-height: 1.42857143;\n}\n.modal-body {\n position: relative;\n padding: 15px;\n}\n.modal-footer {\n padding: 15px;\n text-align: right;\n border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0;\n}\n.modal-footer .btn-group .btn + .btn {\n margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n margin-left: 0;\n}\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n@media (min-width: 768px) {\n .modal-dialog {\n width: 600px;\n margin: 30px auto;\n }\n .modal-content {\n -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n }\n .modal-sm {\n width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg {\n width: 900px;\n }\n}\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.42857143;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n font-size: 12px;\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.tooltip.in {\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.tooltip.top {\n margin-top: -3px;\n padding: 5px 0;\n}\n.tooltip.right {\n margin-left: 3px;\n padding: 0 5px;\n}\n.tooltip.bottom {\n margin-top: 3px;\n padding: 5px 0;\n}\n.tooltip.left {\n margin-left: -3px;\n padding: 0 5px;\n}\n.tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 4px;\n}\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.top-left .tooltip-arrow {\n bottom: 0;\n right: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.top-right .tooltip-arrow {\n bottom: 0;\n left: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n border-right-color: #000;\n}\n.tooltip.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n border-left-color: #000;\n}\n.tooltip.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n top: 0;\n right: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n top: 0;\n left: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: none;\n max-width: 276px;\n padding: 1px;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.42857143;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n font-size: 14px;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n}\n.popover.top {\n margin-top: -10px;\n}\n.popover.right {\n margin-left: 10px;\n}\n.popover.bottom {\n margin-top: 10px;\n}\n.popover.left {\n margin-left: -10px;\n}\n.popover-title {\n margin: 0;\n padding: 8px 14px;\n font-size: 14px;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-radius: 5px 5px 0 0;\n}\n.popover-content {\n padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.popover > .arrow {\n border-width: 11px;\n}\n.popover > .arrow:after {\n border-width: 10px;\n content: \"\";\n}\n.popover.top > .arrow {\n left: 50%;\n margin-left: -11px;\n border-bottom-width: 0;\n border-top-color: #999999;\n border-top-color: rgba(0, 0, 0, 0.25);\n bottom: -11px;\n}\n.popover.top > .arrow:after {\n content: \" \";\n bottom: 1px;\n margin-left: -10px;\n border-bottom-width: 0;\n border-top-color: #fff;\n}\n.popover.right > .arrow {\n top: 50%;\n left: -11px;\n margin-top: -11px;\n border-left-width: 0;\n border-right-color: #999999;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n.popover.right > .arrow:after {\n content: \" \";\n left: 1px;\n bottom: -10px;\n border-left-width: 0;\n border-right-color: #fff;\n}\n.popover.bottom > .arrow {\n left: 50%;\n margin-left: -11px;\n border-top-width: 0;\n border-bottom-color: #999999;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n top: -11px;\n}\n.popover.bottom > .arrow:after {\n content: \" \";\n top: 1px;\n margin-left: -10px;\n border-top-width: 0;\n border-bottom-color: #fff;\n}\n.popover.left > .arrow {\n top: 50%;\n right: -11px;\n margin-top: -11px;\n border-right-width: 0;\n border-left-color: #999999;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n.popover.left > .arrow:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: #fff;\n bottom: -10px;\n}\n.carousel {\n position: relative;\n}\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%;\n}\n.carousel-inner > .item {\n display: none;\n position: relative;\n -webkit-transition: 0.6s ease-in-out left;\n -o-transition: 0.6s ease-in-out left;\n transition: 0.6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n .carousel-inner > .item {\n -webkit-transition: -webkit-transform 0.6s ease-in-out;\n -moz-transition: -moz-transform 0.6s ease-in-out;\n -o-transition: -o-transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out;\n -webkit-backface-visibility: hidden;\n -moz-backface-visibility: hidden;\n backface-visibility: hidden;\n -webkit-perspective: 1000px;\n -moz-perspective: 1000px;\n perspective: 1000px;\n }\n .carousel-inner > .item.next,\n .carousel-inner > .item.active.right {\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.prev,\n .carousel-inner > .item.active.left {\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.next.left,\n .carousel-inner > .item.prev.right,\n .carousel-inner > .item.active {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n left: 0;\n }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n display: block;\n}\n.carousel-inner > .active {\n left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n}\n.carousel-inner > .next {\n left: 100%;\n}\n.carousel-inner > .prev {\n left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n left: 0;\n}\n.carousel-inner > .active.left {\n left: -100%;\n}\n.carousel-inner > .active.right {\n left: 100%;\n}\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 15%;\n opacity: 0.5;\n filter: alpha(opacity=50);\n font-size: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n background-color: rgba(0, 0, 0, 0);\n}\n.carousel-control.left {\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n}\n.carousel-control.right {\n left: auto;\n right: 0;\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n}\n.carousel-control:hover,\n.carousel-control:focus {\n outline: 0;\n color: #fff;\n text-decoration: none;\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n margin-top: -10px;\n z-index: 5;\n display: inline-block;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n width: 20px;\n height: 20px;\n line-height: 1;\n font-family: serif;\n}\n.carousel-control .icon-prev:before {\n content: '\\2039';\n}\n.carousel-control .icon-next:before {\n content: '\\203a';\n}\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center;\n}\n.carousel-indicators li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid #fff;\n border-radius: 10px;\n cursor: pointer;\n background-color: #000 \\9;\n background-color: rgba(0, 0, 0, 0);\n}\n.carousel-indicators .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: #fff;\n}\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-caption .btn {\n text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-prev,\n .carousel-control .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -10px;\n font-size: 30px;\n }\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .icon-prev {\n margin-left: -10px;\n }\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-next {\n margin-right: -10px;\n }\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px;\n }\n .carousel-indicators {\n bottom: 20px;\n }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-header:before,\n.modal-header:after,\n.modal-footer:before,\n.modal-footer:after {\n content: \" \";\n display: table;\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-header:after,\n.modal-footer:after {\n clear: both;\n}\n.center-block {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n.hidden {\n display: none !important;\n}\n.affix {\n position: fixed;\n}\n@-ms-viewport {\n width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n@media (max-width: 767px) {\n .visible-xs {\n display: block !important;\n }\n table.visible-xs {\n display: table !important;\n }\n tr.visible-xs {\n display: table-row !important;\n }\n th.visible-xs,\n td.visible-xs {\n display: table-cell !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-block {\n display: block !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline {\n display: inline !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm {\n display: block !important;\n }\n table.visible-sm {\n display: table !important;\n }\n tr.visible-sm {\n display: table-row !important;\n }\n th.visible-sm,\n td.visible-sm {\n display: table-cell !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-block {\n display: block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline {\n display: inline !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md {\n display: block !important;\n }\n table.visible-md {\n display: table !important;\n }\n tr.visible-md {\n display: table-row !important;\n }\n th.visible-md,\n td.visible-md {\n display: table-cell !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-block {\n display: block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline {\n display: inline !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg {\n display: block !important;\n }\n table.visible-lg {\n display: table !important;\n }\n tr.visible-lg {\n display: table-row !important;\n }\n th.visible-lg,\n td.visible-lg {\n display: table-cell !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-block {\n display: block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline {\n display: inline !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline-block {\n display: inline-block !important;\n }\n}\n@media (max-width: 767px) {\n .hidden-xs {\n display: none !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .hidden-sm {\n display: none !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .hidden-md {\n display: none !important;\n }\n}\n@media (min-width: 1200px) {\n .hidden-lg {\n display: none !important;\n }\n}\n.visible-print {\n display: none !important;\n}\n@media print {\n .visible-print {\n display: block !important;\n }\n table.visible-print {\n display: table !important;\n }\n tr.visible-print {\n display: table-row !important;\n }\n th.visible-print,\n td.visible-print {\n display: table-cell !important;\n }\n}\n.visible-print-block {\n display: none !important;\n}\n@media print {\n .visible-print-block {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n}\n@media print {\n .visible-print-inline {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n}\n@media print {\n .visible-print-inline-block {\n display: inline-block !important;\n }\n}\n@media print {\n .hidden-print {\n display: none !important;\n }\n}\n/*# sourceMappingURL=bootstrap.css.map */","/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n font-family: sans-serif;\n -webkit-text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n}\nbody {\n margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block;\n vertical-align: baseline;\n}\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n[hidden],\ntemplate {\n display: none;\n}\na {\n background-color: transparent;\n}\na:active,\na:hover {\n outline: 0;\n}\nabbr[title] {\n border-bottom: 1px dotted;\n}\nb,\nstrong {\n font-weight: bold;\n}\ndfn {\n font-style: italic;\n}\nh1 {\n margin: .67em 0;\n font-size: 2em;\n}\nmark {\n color: #000;\n background: #ff0;\n}\nsmall {\n font-size: 80%;\n}\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\nsup {\n top: -.5em;\n}\nsub {\n bottom: -.25em;\n}\nimg {\n border: 0;\n}\nsvg:not(:root) {\n overflow: hidden;\n}\nfigure {\n margin: 1em 40px;\n}\nhr {\n height: 0;\n -webkit-box-sizing: content-box;\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n}\npre {\n overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n margin: 0;\n font: inherit;\n color: inherit;\n}\nbutton {\n overflow: visible;\n}\nbutton,\nselect {\n text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button;\n cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n padding: 0;\n border: 0;\n}\ninput {\n line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-box-sizing: content-box;\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n -webkit-appearance: textfield;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\nfieldset {\n padding: .35em .625em .75em;\n margin: 0 2px;\n border: 1px solid #c0c0c0;\n}\nlegend {\n padding: 0;\n border: 0;\n}\ntextarea {\n overflow: auto;\n}\noptgroup {\n font-weight: bold;\n}\ntable {\n border-spacing: 0;\n border-collapse: collapse;\n}\ntd,\nth {\n padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n *,\n *:before,\n *:after {\n color: #000 !important;\n text-shadow: none !important;\n background: transparent !important;\n -webkit-box-shadow: none !important;\n box-shadow: none !important;\n }\n a,\n a:visited {\n text-decoration: underline;\n }\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n pre,\n blockquote {\n border: 1px solid #999;\n\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n img {\n max-width: 100% !important;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n .navbar {\n display: none;\n }\n .btn > .caret,\n .dropup > .btn > .caret {\n border-top-color: #000 !important;\n }\n .label {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #ddd !important;\n }\n}\n@font-face {\n font-family: 'Glyphicons Halflings';\n\n src: url('../fonts/glyphicons-halflings-regular.eot');\n src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n content: \"\\002a\";\n}\n.glyphicon-plus:before {\n content: \"\\002b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n content: \"\\270f\";\n}\n.glyphicon-glass:before {\n content: \"\\e001\";\n}\n.glyphicon-music:before {\n content: \"\\e002\";\n}\n.glyphicon-search:before {\n content: \"\\e003\";\n}\n.glyphicon-heart:before {\n content: \"\\e005\";\n}\n.glyphicon-star:before {\n content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n content: \"\\e007\";\n}\n.glyphicon-user:before {\n content: \"\\e008\";\n}\n.glyphicon-film:before {\n content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n content: \"\\e010\";\n}\n.glyphicon-th:before {\n content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n content: \"\\e012\";\n}\n.glyphicon-ok:before {\n content: \"\\e013\";\n}\n.glyphicon-remove:before {\n content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n content: \"\\e016\";\n}\n.glyphicon-off:before {\n content: \"\\e017\";\n}\n.glyphicon-signal:before {\n content: \"\\e018\";\n}\n.glyphicon-cog:before {\n content: \"\\e019\";\n}\n.glyphicon-trash:before {\n content: \"\\e020\";\n}\n.glyphicon-home:before {\n content: \"\\e021\";\n}\n.glyphicon-file:before {\n content: \"\\e022\";\n}\n.glyphicon-time:before {\n content: \"\\e023\";\n}\n.glyphicon-road:before {\n content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n content: \"\\e025\";\n}\n.glyphicon-download:before {\n content: \"\\e026\";\n}\n.glyphicon-upload:before {\n content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n content: \"\\e032\";\n}\n.glyphicon-lock:before {\n content: \"\\e033\";\n}\n.glyphicon-flag:before {\n content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n content: \"\\e040\";\n}\n.glyphicon-tag:before {\n content: \"\\e041\";\n}\n.glyphicon-tags:before {\n content: \"\\e042\";\n}\n.glyphicon-book:before {\n content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n content: \"\\e044\";\n}\n.glyphicon-print:before {\n content: \"\\e045\";\n}\n.glyphicon-camera:before {\n content: \"\\e046\";\n}\n.glyphicon-font:before {\n content: \"\\e047\";\n}\n.glyphicon-bold:before {\n content: \"\\e048\";\n}\n.glyphicon-italic:before {\n content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n content: \"\\e055\";\n}\n.glyphicon-list:before {\n content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n content: \"\\e059\";\n}\n.glyphicon-picture:before {\n content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n content: \"\\e063\";\n}\n.glyphicon-tint:before {\n content: \"\\e064\";\n}\n.glyphicon-edit:before {\n content: \"\\e065\";\n}\n.glyphicon-share:before {\n content: \"\\e066\";\n}\n.glyphicon-check:before {\n content: \"\\e067\";\n}\n.glyphicon-move:before {\n content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n content: \"\\e070\";\n}\n.glyphicon-backward:before {\n content: \"\\e071\";\n}\n.glyphicon-play:before {\n content: \"\\e072\";\n}\n.glyphicon-pause:before {\n content: \"\\e073\";\n}\n.glyphicon-stop:before {\n content: \"\\e074\";\n}\n.glyphicon-forward:before {\n content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n content: \"\\e077\";\n}\n.glyphicon-eject:before {\n content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n content: \"\\e101\";\n}\n.glyphicon-gift:before {\n content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n content: \"\\e103\";\n}\n.glyphicon-fire:before {\n content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n content: \"\\e107\";\n}\n.glyphicon-plane:before {\n content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n content: \"\\e109\";\n}\n.glyphicon-random:before {\n content: \"\\e110\";\n}\n.glyphicon-comment:before {\n content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n content: \"\\e122\";\n}\n.glyphicon-bell:before {\n content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n content: \"\\e134\";\n}\n.glyphicon-globe:before {\n content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n content: \"\\e137\";\n}\n.glyphicon-filter:before {\n content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n content: \"\\e143\";\n}\n.glyphicon-link:before {\n content: \"\\e144\";\n}\n.glyphicon-phone:before {\n content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n content: \"\\e146\";\n}\n.glyphicon-usd:before {\n content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n content: \"\\e149\";\n}\n.glyphicon-sort:before {\n content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n content: \"\\e157\";\n}\n.glyphicon-expand:before {\n content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n content: \"\\e161\";\n}\n.glyphicon-flash:before {\n content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n content: \"\\e164\";\n}\n.glyphicon-record:before {\n content: \"\\e165\";\n}\n.glyphicon-save:before {\n content: \"\\e166\";\n}\n.glyphicon-open:before {\n content: \"\\e167\";\n}\n.glyphicon-saved:before {\n content: \"\\e168\";\n}\n.glyphicon-import:before {\n content: \"\\e169\";\n}\n.glyphicon-export:before {\n content: \"\\e170\";\n}\n.glyphicon-send:before {\n content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n content: \"\\e179\";\n}\n.glyphicon-header:before {\n content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n content: \"\\e183\";\n}\n.glyphicon-tower:before {\n content: \"\\e184\";\n}\n.glyphicon-stats:before {\n content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n content: \"\\e200\";\n}\n.glyphicon-cd:before {\n content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n content: \"\\e204\";\n}\n.glyphicon-copy:before {\n content: \"\\e205\";\n}\n.glyphicon-paste:before {\n content: \"\\e206\";\n}\n.glyphicon-alert:before {\n content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n content: \"\\e210\";\n}\n.glyphicon-king:before {\n content: \"\\e211\";\n}\n.glyphicon-queen:before {\n content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n content: \"\\e214\";\n}\n.glyphicon-knight:before {\n content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n content: \"\\e216\";\n}\n.glyphicon-tent:before {\n content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n content: \"\\e218\";\n}\n.glyphicon-bed:before {\n content: \"\\e219\";\n}\n.glyphicon-apple:before {\n content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n content: \"\\e227\";\n}\n.glyphicon-btc:before {\n content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n content: \"\\e227\";\n}\n.glyphicon-yen:before {\n content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n content: \"\\e232\";\n}\n.glyphicon-education:before {\n content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n content: \"\\e237\";\n}\n.glyphicon-oil:before {\n content: \"\\e238\";\n}\n.glyphicon-grain:before {\n content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n content: \"\\e253\";\n}\n.glyphicon-console:before {\n content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n content: \"\\e260\";\n}\n* {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n*:before,\n*:after {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\nhtml {\n font-size: 10px;\n\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n line-height: 1.42857143;\n color: #333;\n background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\na {\n color: #337ab7;\n text-decoration: none;\n}\na:hover,\na:focus {\n color: #23527c;\n text-decoration: underline;\n}\na:focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\nfigure {\n margin: 0;\n}\nimg {\n vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n display: block;\n max-width: 100%;\n height: auto;\n}\n.img-rounded {\n border-radius: 6px;\n}\n.img-thumbnail {\n display: inline-block;\n max-width: 100%;\n height: auto;\n padding: 4px;\n line-height: 1.42857143;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n -webkit-transition: all .2s ease-in-out;\n -o-transition: all .2s ease-in-out;\n transition: all .2s ease-in-out;\n}\n.img-circle {\n border-radius: 50%;\n}\nhr {\n margin-top: 20px;\n margin-bottom: 20px;\n border: 0;\n border-top: 1px solid #eee;\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n}\n[role=\"button\"] {\n cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n font-family: inherit;\n font-weight: 500;\n line-height: 1.1;\n color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n font-weight: normal;\n line-height: 1;\n color: #777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n margin-top: 20px;\n margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n margin-top: 10px;\n margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n font-size: 75%;\n}\nh1,\n.h1 {\n font-size: 36px;\n}\nh2,\n.h2 {\n font-size: 30px;\n}\nh3,\n.h3 {\n font-size: 24px;\n}\nh4,\n.h4 {\n font-size: 18px;\n}\nh5,\n.h5 {\n font-size: 14px;\n}\nh6,\n.h6 {\n font-size: 12px;\n}\np {\n margin: 0 0 10px;\n}\n.lead {\n margin-bottom: 20px;\n font-size: 16px;\n font-weight: 300;\n line-height: 1.4;\n}\n@media (min-width: 768px) {\n .lead {\n font-size: 21px;\n }\n}\nsmall,\n.small {\n font-size: 85%;\n}\nmark,\n.mark {\n padding: .2em;\n background-color: #fcf8e3;\n}\n.text-left {\n text-align: left;\n}\n.text-right {\n text-align: right;\n}\n.text-center {\n text-align: center;\n}\n.text-justify {\n text-align: justify;\n}\n.text-nowrap {\n white-space: nowrap;\n}\n.text-lowercase {\n text-transform: lowercase;\n}\n.text-uppercase {\n text-transform: uppercase;\n}\n.text-capitalize {\n text-transform: capitalize;\n}\n.text-muted {\n color: #777;\n}\n.text-primary {\n color: #337ab7;\n}\na.text-primary:hover,\na.text-primary:focus {\n color: #286090;\n}\n.text-success {\n color: #3c763d;\n}\na.text-success:hover,\na.text-success:focus {\n color: #2b542c;\n}\n.text-info {\n color: #31708f;\n}\na.text-info:hover,\na.text-info:focus {\n color: #245269;\n}\n.text-warning {\n color: #8a6d3b;\n}\na.text-warning:hover,\na.text-warning:focus {\n color: #66512c;\n}\n.text-danger {\n color: #a94442;\n}\na.text-danger:hover,\na.text-danger:focus {\n color: #843534;\n}\n.bg-primary {\n color: #fff;\n background-color: #337ab7;\n}\na.bg-primary:hover,\na.bg-primary:focus {\n background-color: #286090;\n}\n.bg-success {\n background-color: #dff0d8;\n}\na.bg-success:hover,\na.bg-success:focus {\n background-color: #c1e2b3;\n}\n.bg-info {\n background-color: #d9edf7;\n}\na.bg-info:hover,\na.bg-info:focus {\n background-color: #afd9ee;\n}\n.bg-warning {\n background-color: #fcf8e3;\n}\na.bg-warning:hover,\na.bg-warning:focus {\n background-color: #f7ecb5;\n}\n.bg-danger {\n background-color: #f2dede;\n}\na.bg-danger:hover,\na.bg-danger:focus {\n background-color: #e4b9b9;\n}\n.page-header {\n padding-bottom: 9px;\n margin: 40px 0 20px;\n border-bottom: 1px solid #eee;\n}\nul,\nol {\n margin-top: 0;\n margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n margin-bottom: 0;\n}\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n.list-inline {\n padding-left: 0;\n margin-left: -5px;\n list-style: none;\n}\n.list-inline > li {\n display: inline-block;\n padding-right: 5px;\n padding-left: 5px;\n}\ndl {\n margin-top: 0;\n margin-bottom: 20px;\n}\ndt,\ndd {\n line-height: 1.42857143;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0;\n}\n@media (min-width: 768px) {\n .dl-horizontal dt {\n float: left;\n width: 160px;\n overflow: hidden;\n clear: left;\n text-align: right;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .dl-horizontal dd {\n margin-left: 180px;\n }\n}\nabbr[title],\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted #777;\n}\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\nblockquote {\n padding: 10px 20px;\n margin: 0 0 20px;\n font-size: 17.5px;\n border-left: 5px solid #eee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n display: block;\n font-size: 80%;\n line-height: 1.42857143;\n color: #777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n text-align: right;\n border-right: 5px solid #eee;\n border-left: 0;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n content: '\\00A0 \\2014';\n}\naddress {\n margin-bottom: 20px;\n font-style: normal;\n line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: #c7254e;\n background-color: #f9f2f4;\n border-radius: 4px;\n}\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: #fff;\n background-color: #333;\n border-radius: 3px;\n -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n}\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\npre {\n display: block;\n padding: 9.5px;\n margin: 0 0 10px;\n font-size: 13px;\n line-height: 1.42857143;\n color: #333;\n word-break: break-all;\n word-wrap: break-word;\n background-color: #f5f5f5;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\npre code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n}\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n.container {\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n@media (min-width: 768px) {\n .container {\n width: 750px;\n }\n}\n@media (min-width: 992px) {\n .container {\n width: 970px;\n }\n}\n@media (min-width: 1200px) {\n .container {\n width: 1170px;\n }\n}\n.container-fluid {\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n.row {\n margin-right: -15px;\n margin-left: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n position: relative;\n min-height: 1px;\n padding-right: 15px;\n padding-left: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n float: left;\n}\n.col-xs-12 {\n width: 100%;\n}\n.col-xs-11 {\n width: 91.66666667%;\n}\n.col-xs-10 {\n width: 83.33333333%;\n}\n.col-xs-9 {\n width: 75%;\n}\n.col-xs-8 {\n width: 66.66666667%;\n}\n.col-xs-7 {\n width: 58.33333333%;\n}\n.col-xs-6 {\n width: 50%;\n}\n.col-xs-5 {\n width: 41.66666667%;\n}\n.col-xs-4 {\n width: 33.33333333%;\n}\n.col-xs-3 {\n width: 25%;\n}\n.col-xs-2 {\n width: 16.66666667%;\n}\n.col-xs-1 {\n width: 8.33333333%;\n}\n.col-xs-pull-12 {\n right: 100%;\n}\n.col-xs-pull-11 {\n right: 91.66666667%;\n}\n.col-xs-pull-10 {\n right: 83.33333333%;\n}\n.col-xs-pull-9 {\n right: 75%;\n}\n.col-xs-pull-8 {\n right: 66.66666667%;\n}\n.col-xs-pull-7 {\n right: 58.33333333%;\n}\n.col-xs-pull-6 {\n right: 50%;\n}\n.col-xs-pull-5 {\n right: 41.66666667%;\n}\n.col-xs-pull-4 {\n right: 33.33333333%;\n}\n.col-xs-pull-3 {\n right: 25%;\n}\n.col-xs-pull-2 {\n right: 16.66666667%;\n}\n.col-xs-pull-1 {\n right: 8.33333333%;\n}\n.col-xs-pull-0 {\n right: auto;\n}\n.col-xs-push-12 {\n left: 100%;\n}\n.col-xs-push-11 {\n left: 91.66666667%;\n}\n.col-xs-push-10 {\n left: 83.33333333%;\n}\n.col-xs-push-9 {\n left: 75%;\n}\n.col-xs-push-8 {\n left: 66.66666667%;\n}\n.col-xs-push-7 {\n left: 58.33333333%;\n}\n.col-xs-push-6 {\n left: 50%;\n}\n.col-xs-push-5 {\n left: 41.66666667%;\n}\n.col-xs-push-4 {\n left: 33.33333333%;\n}\n.col-xs-push-3 {\n left: 25%;\n}\n.col-xs-push-2 {\n left: 16.66666667%;\n}\n.col-xs-push-1 {\n left: 8.33333333%;\n}\n.col-xs-push-0 {\n left: auto;\n}\n.col-xs-offset-12 {\n margin-left: 100%;\n}\n.col-xs-offset-11 {\n margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n margin-left: 75%;\n}\n.col-xs-offset-8 {\n margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n margin-left: 50%;\n}\n.col-xs-offset-5 {\n margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n margin-left: 25%;\n}\n.col-xs-offset-2 {\n margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n margin-left: 0;\n}\n@media (min-width: 768px) {\n .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n float: left;\n }\n .col-sm-12 {\n width: 100%;\n }\n .col-sm-11 {\n width: 91.66666667%;\n }\n .col-sm-10 {\n width: 83.33333333%;\n }\n .col-sm-9 {\n width: 75%;\n }\n .col-sm-8 {\n width: 66.66666667%;\n }\n .col-sm-7 {\n width: 58.33333333%;\n }\n .col-sm-6 {\n width: 50%;\n }\n .col-sm-5 {\n width: 41.66666667%;\n }\n .col-sm-4 {\n width: 33.33333333%;\n }\n .col-sm-3 {\n width: 25%;\n }\n .col-sm-2 {\n width: 16.66666667%;\n }\n .col-sm-1 {\n width: 8.33333333%;\n }\n .col-sm-pull-12 {\n right: 100%;\n }\n .col-sm-pull-11 {\n right: 91.66666667%;\n }\n .col-sm-pull-10 {\n right: 83.33333333%;\n }\n .col-sm-pull-9 {\n right: 75%;\n }\n .col-sm-pull-8 {\n right: 66.66666667%;\n }\n .col-sm-pull-7 {\n right: 58.33333333%;\n }\n .col-sm-pull-6 {\n right: 50%;\n }\n .col-sm-pull-5 {\n right: 41.66666667%;\n }\n .col-sm-pull-4 {\n right: 33.33333333%;\n }\n .col-sm-pull-3 {\n right: 25%;\n }\n .col-sm-pull-2 {\n right: 16.66666667%;\n }\n .col-sm-pull-1 {\n right: 8.33333333%;\n }\n .col-sm-pull-0 {\n right: auto;\n }\n .col-sm-push-12 {\n left: 100%;\n }\n .col-sm-push-11 {\n left: 91.66666667%;\n }\n .col-sm-push-10 {\n left: 83.33333333%;\n }\n .col-sm-push-9 {\n left: 75%;\n }\n .col-sm-push-8 {\n left: 66.66666667%;\n }\n .col-sm-push-7 {\n left: 58.33333333%;\n }\n .col-sm-push-6 {\n left: 50%;\n }\n .col-sm-push-5 {\n left: 41.66666667%;\n }\n .col-sm-push-4 {\n left: 33.33333333%;\n }\n .col-sm-push-3 {\n left: 25%;\n }\n .col-sm-push-2 {\n left: 16.66666667%;\n }\n .col-sm-push-1 {\n left: 8.33333333%;\n }\n .col-sm-push-0 {\n left: auto;\n }\n .col-sm-offset-12 {\n margin-left: 100%;\n }\n .col-sm-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-sm-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-sm-offset-9 {\n margin-left: 75%;\n }\n .col-sm-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-sm-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-sm-offset-6 {\n margin-left: 50%;\n }\n .col-sm-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-sm-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-sm-offset-3 {\n margin-left: 25%;\n }\n .col-sm-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-sm-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-sm-offset-0 {\n margin-left: 0;\n }\n}\n@media (min-width: 992px) {\n .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n float: left;\n }\n .col-md-12 {\n width: 100%;\n }\n .col-md-11 {\n width: 91.66666667%;\n }\n .col-md-10 {\n width: 83.33333333%;\n }\n .col-md-9 {\n width: 75%;\n }\n .col-md-8 {\n width: 66.66666667%;\n }\n .col-md-7 {\n width: 58.33333333%;\n }\n .col-md-6 {\n width: 50%;\n }\n .col-md-5 {\n width: 41.66666667%;\n }\n .col-md-4 {\n width: 33.33333333%;\n }\n .col-md-3 {\n width: 25%;\n }\n .col-md-2 {\n width: 16.66666667%;\n }\n .col-md-1 {\n width: 8.33333333%;\n }\n .col-md-pull-12 {\n right: 100%;\n }\n .col-md-pull-11 {\n right: 91.66666667%;\n }\n .col-md-pull-10 {\n right: 83.33333333%;\n }\n .col-md-pull-9 {\n right: 75%;\n }\n .col-md-pull-8 {\n right: 66.66666667%;\n }\n .col-md-pull-7 {\n right: 58.33333333%;\n }\n .col-md-pull-6 {\n right: 50%;\n }\n .col-md-pull-5 {\n right: 41.66666667%;\n }\n .col-md-pull-4 {\n right: 33.33333333%;\n }\n .col-md-pull-3 {\n right: 25%;\n }\n .col-md-pull-2 {\n right: 16.66666667%;\n }\n .col-md-pull-1 {\n right: 8.33333333%;\n }\n .col-md-pull-0 {\n right: auto;\n }\n .col-md-push-12 {\n left: 100%;\n }\n .col-md-push-11 {\n left: 91.66666667%;\n }\n .col-md-push-10 {\n left: 83.33333333%;\n }\n .col-md-push-9 {\n left: 75%;\n }\n .col-md-push-8 {\n left: 66.66666667%;\n }\n .col-md-push-7 {\n left: 58.33333333%;\n }\n .col-md-push-6 {\n left: 50%;\n }\n .col-md-push-5 {\n left: 41.66666667%;\n }\n .col-md-push-4 {\n left: 33.33333333%;\n }\n .col-md-push-3 {\n left: 25%;\n }\n .col-md-push-2 {\n left: 16.66666667%;\n }\n .col-md-push-1 {\n left: 8.33333333%;\n }\n .col-md-push-0 {\n left: auto;\n }\n .col-md-offset-12 {\n margin-left: 100%;\n }\n .col-md-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-md-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-md-offset-9 {\n margin-left: 75%;\n }\n .col-md-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-md-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-md-offset-6 {\n margin-left: 50%;\n }\n .col-md-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-md-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-md-offset-3 {\n margin-left: 25%;\n }\n .col-md-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-md-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-md-offset-0 {\n margin-left: 0;\n }\n}\n@media (min-width: 1200px) {\n .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n float: left;\n }\n .col-lg-12 {\n width: 100%;\n }\n .col-lg-11 {\n width: 91.66666667%;\n }\n .col-lg-10 {\n width: 83.33333333%;\n }\n .col-lg-9 {\n width: 75%;\n }\n .col-lg-8 {\n width: 66.66666667%;\n }\n .col-lg-7 {\n width: 58.33333333%;\n }\n .col-lg-6 {\n width: 50%;\n }\n .col-lg-5 {\n width: 41.66666667%;\n }\n .col-lg-4 {\n width: 33.33333333%;\n }\n .col-lg-3 {\n width: 25%;\n }\n .col-lg-2 {\n width: 16.66666667%;\n }\n .col-lg-1 {\n width: 8.33333333%;\n }\n .col-lg-pull-12 {\n right: 100%;\n }\n .col-lg-pull-11 {\n right: 91.66666667%;\n }\n .col-lg-pull-10 {\n right: 83.33333333%;\n }\n .col-lg-pull-9 {\n right: 75%;\n }\n .col-lg-pull-8 {\n right: 66.66666667%;\n }\n .col-lg-pull-7 {\n right: 58.33333333%;\n }\n .col-lg-pull-6 {\n right: 50%;\n }\n .col-lg-pull-5 {\n right: 41.66666667%;\n }\n .col-lg-pull-4 {\n right: 33.33333333%;\n }\n .col-lg-pull-3 {\n right: 25%;\n }\n .col-lg-pull-2 {\n right: 16.66666667%;\n }\n .col-lg-pull-1 {\n right: 8.33333333%;\n }\n .col-lg-pull-0 {\n right: auto;\n }\n .col-lg-push-12 {\n left: 100%;\n }\n .col-lg-push-11 {\n left: 91.66666667%;\n }\n .col-lg-push-10 {\n left: 83.33333333%;\n }\n .col-lg-push-9 {\n left: 75%;\n }\n .col-lg-push-8 {\n left: 66.66666667%;\n }\n .col-lg-push-7 {\n left: 58.33333333%;\n }\n .col-lg-push-6 {\n left: 50%;\n }\n .col-lg-push-5 {\n left: 41.66666667%;\n }\n .col-lg-push-4 {\n left: 33.33333333%;\n }\n .col-lg-push-3 {\n left: 25%;\n }\n .col-lg-push-2 {\n left: 16.66666667%;\n }\n .col-lg-push-1 {\n left: 8.33333333%;\n }\n .col-lg-push-0 {\n left: auto;\n }\n .col-lg-offset-12 {\n margin-left: 100%;\n }\n .col-lg-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-lg-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-lg-offset-9 {\n margin-left: 75%;\n }\n .col-lg-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-lg-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-lg-offset-6 {\n margin-left: 50%;\n }\n .col-lg-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-lg-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-lg-offset-3 {\n margin-left: 25%;\n }\n .col-lg-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-lg-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-lg-offset-0 {\n margin-left: 0;\n }\n}\ntable {\n background-color: transparent;\n}\ncaption {\n padding-top: 8px;\n padding-bottom: 8px;\n color: #777;\n text-align: left;\n}\nth {\n text-align: left;\n}\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n padding: 8px;\n line-height: 1.42857143;\n vertical-align: top;\n border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n border-top: 0;\n}\n.table > tbody + tbody {\n border-top: 2px solid #ddd;\n}\n.table .table {\n background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n padding: 5px;\n}\n.table-bordered {\n border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n position: static;\n display: table-column;\n float: none;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n position: static;\n display: table-cell;\n float: none;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n background-color: #ebcccc;\n}\n.table-responsive {\n min-height: .01%;\n overflow-x: auto;\n}\n@media screen and (max-width: 767px) {\n .table-responsive {\n width: 100%;\n margin-bottom: 15px;\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid #ddd;\n }\n .table-responsive > .table {\n margin-bottom: 0;\n }\n .table-responsive > .table > thead > tr > th,\n .table-responsive > .table > tbody > tr > th,\n .table-responsive > .table > tfoot > tr > th,\n .table-responsive > .table > thead > tr > td,\n .table-responsive > .table > tbody > tr > td,\n .table-responsive > .table > tfoot > tr > td {\n white-space: nowrap;\n }\n .table-responsive > .table-bordered {\n border: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:first-child,\n .table-responsive > .table-bordered > tbody > tr > th:first-child,\n .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n .table-responsive > .table-bordered > thead > tr > td:first-child,\n .table-responsive > .table-bordered > tbody > tr > td:first-child,\n .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:last-child,\n .table-responsive > .table-bordered > tbody > tr > th:last-child,\n .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n .table-responsive > .table-bordered > thead > tr > td:last-child,\n .table-responsive > .table-bordered > tbody > tr > td:last-child,\n .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n }\n .table-responsive > .table-bordered > tbody > tr:last-child > th,\n .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n .table-responsive > .table-bordered > tbody > tr:last-child > td,\n .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n border-bottom: 0;\n }\n}\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: 20px;\n font-size: 21px;\n line-height: inherit;\n color: #333;\n border: 0;\n border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 5px;\n font-weight: bold;\n}\ninput[type=\"search\"] {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9;\n line-height: normal;\n}\ninput[type=\"file\"] {\n display: block;\n}\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\nselect[multiple],\nselect[size] {\n height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\noutput {\n display: block;\n padding-top: 7px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555;\n}\n.form-control {\n display: block;\n width: 100%;\n height: 34px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555;\n background-color: #fff;\n background-image: none;\n border: 1px solid #ccc;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;\n -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n border-color: #66afe9;\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n}\n.form-control::-moz-placeholder {\n color: #999;\n opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n color: #999;\n}\n.form-control::-webkit-input-placeholder {\n color: #999;\n}\n.form-control::-ms-expand {\n background-color: transparent;\n border: 0;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n background-color: #eee;\n opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n cursor: not-allowed;\n}\ntextarea.form-control {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"].form-control,\n input[type=\"time\"].form-control,\n input[type=\"datetime-local\"].form-control,\n input[type=\"month\"].form-control {\n line-height: 34px;\n }\n input[type=\"date\"].input-sm,\n input[type=\"time\"].input-sm,\n input[type=\"datetime-local\"].input-sm,\n input[type=\"month\"].input-sm,\n .input-group-sm input[type=\"date\"],\n .input-group-sm input[type=\"time\"],\n .input-group-sm input[type=\"datetime-local\"],\n .input-group-sm input[type=\"month\"] {\n line-height: 30px;\n }\n input[type=\"date\"].input-lg,\n input[type=\"time\"].input-lg,\n input[type=\"datetime-local\"].input-lg,\n input[type=\"month\"].input-lg,\n .input-group-lg input[type=\"date\"],\n .input-group-lg input[type=\"time\"],\n .input-group-lg input[type=\"datetime-local\"],\n .input-group-lg input[type=\"month\"] {\n line-height: 46px;\n }\n}\n.form-group {\n margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n min-height: 20px;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-top: 4px \\9;\n margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n vertical-align: middle;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n cursor: not-allowed;\n}\n.form-control-static {\n min-height: 34px;\n padding-top: 7px;\n padding-bottom: 7px;\n margin-bottom: 0;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n padding-right: 0;\n padding-left: 0;\n}\n.input-sm {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-sm {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n height: auto;\n}\n.form-group-sm .form-control {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.form-group-sm select.form-control {\n height: 30px;\n line-height: 30px;\n}\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n height: auto;\n}\n.form-group-sm .form-control-static {\n height: 30px;\n min-height: 32px;\n padding: 6px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.input-lg {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-lg {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n height: auto;\n}\n.form-group-lg .form-control {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.form-group-lg select.form-control {\n height: 46px;\n line-height: 46px;\n}\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n height: auto;\n}\n.form-group-lg .form-control-static {\n height: 46px;\n min-height: 38px;\n padding: 11px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.has-feedback {\n position: relative;\n}\n.has-feedback .form-control {\n padding-right: 42.5px;\n}\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: 34px;\n height: 34px;\n line-height: 34px;\n text-align: center;\n pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n width: 46px;\n height: 46px;\n line-height: 46px;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n width: 30px;\n height: 30px;\n line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n color: #3c763d;\n}\n.has-success .form-control {\n border-color: #3c763d;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-success .form-control:focus {\n border-color: #2b542c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #3c763d;\n}\n.has-success .form-control-feedback {\n color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n color: #8a6d3b;\n}\n.has-warning .form-control {\n border-color: #8a6d3b;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-warning .form-control:focus {\n border-color: #66512c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #8a6d3b;\n}\n.has-warning .form-control-feedback {\n color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n color: #a94442;\n}\n.has-error .form-control {\n border-color: #a94442;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-error .form-control:focus {\n border-color: #843534;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n color: #a94442;\n background-color: #f2dede;\n border-color: #a94442;\n}\n.has-error .form-control-feedback {\n color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n top: 0;\n}\n.help-block {\n display: block;\n margin-top: 5px;\n margin-bottom: 10px;\n color: #737373;\n}\n@media (min-width: 768px) {\n .form-inline .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-static {\n display: inline-block;\n }\n .form-inline .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .form-inline .input-group .input-group-addon,\n .form-inline .input-group .input-group-btn,\n .form-inline .input-group .form-control {\n width: auto;\n }\n .form-inline .input-group > .form-control {\n width: 100%;\n }\n .form-inline .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio,\n .form-inline .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio label,\n .form-inline .checkbox label {\n padding-left: 0;\n }\n .form-inline .radio input[type=\"radio\"],\n .form-inline .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .form-inline .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n padding-top: 7px;\n margin-top: 0;\n margin-bottom: 0;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n min-height: 27px;\n}\n.form-horizontal .form-group {\n margin-right: -15px;\n margin-left: -15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .control-label {\n padding-top: 7px;\n margin-bottom: 0;\n text-align: right;\n }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n right: 15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-lg .control-label {\n padding-top: 11px;\n font-size: 18px;\n }\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-sm .control-label {\n padding-top: 6px;\n font-size: 12px;\n }\n}\n.btn {\n display: inline-block;\n padding: 6px 12px;\n margin-bottom: 0;\n font-size: 14px;\n font-weight: normal;\n line-height: 1.42857143;\n text-align: center;\n white-space: nowrap;\n vertical-align: middle;\n -ms-touch-action: manipulation;\n touch-action: manipulation;\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n background-image: none;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n color: #333;\n text-decoration: none;\n}\n.btn:active,\n.btn.active {\n background-image: none;\n outline: 0;\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n cursor: not-allowed;\n filter: alpha(opacity=65);\n -webkit-box-shadow: none;\n box-shadow: none;\n opacity: .65;\n}\na.btn.disabled,\nfieldset[disabled] a.btn {\n pointer-events: none;\n}\n.btn-default {\n color: #333;\n background-color: #fff;\n border-color: #ccc;\n}\n.btn-default:focus,\n.btn-default.focus {\n color: #333;\n background-color: #e6e6e6;\n border-color: #8c8c8c;\n}\n.btn-default:hover {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active:hover,\n.btn-default.active:hover,\n.open > .dropdown-toggle.btn-default:hover,\n.btn-default:active:focus,\n.btn-default.active:focus,\n.open > .dropdown-toggle.btn-default:focus,\n.btn-default:active.focus,\n.btn-default.active.focus,\n.open > .dropdown-toggle.btn-default.focus {\n color: #333;\n background-color: #d4d4d4;\n border-color: #8c8c8c;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n background-image: none;\n}\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus {\n background-color: #fff;\n border-color: #ccc;\n}\n.btn-default .badge {\n color: #fff;\n background-color: #333;\n}\n.btn-primary {\n color: #fff;\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary:focus,\n.btn-primary.focus {\n color: #fff;\n background-color: #286090;\n border-color: #122b40;\n}\n.btn-primary:hover {\n color: #fff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n color: #fff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active:hover,\n.btn-primary.active:hover,\n.open > .dropdown-toggle.btn-primary:hover,\n.btn-primary:active:focus,\n.btn-primary.active:focus,\n.open > .dropdown-toggle.btn-primary:focus,\n.btn-primary:active.focus,\n.btn-primary.active.focus,\n.open > .dropdown-toggle.btn-primary.focus {\n color: #fff;\n background-color: #204d74;\n border-color: #122b40;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n background-image: none;\n}\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus {\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.btn-success {\n color: #fff;\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success:focus,\n.btn-success.focus {\n color: #fff;\n background-color: #449d44;\n border-color: #255625;\n}\n.btn-success:hover {\n color: #fff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n color: #fff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active:hover,\n.btn-success.active:hover,\n.open > .dropdown-toggle.btn-success:hover,\n.btn-success:active:focus,\n.btn-success.active:focus,\n.open > .dropdown-toggle.btn-success:focus,\n.btn-success:active.focus,\n.btn-success.active.focus,\n.open > .dropdown-toggle.btn-success.focus {\n color: #fff;\n background-color: #398439;\n border-color: #255625;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n background-image: none;\n}\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus {\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success .badge {\n color: #5cb85c;\n background-color: #fff;\n}\n.btn-info {\n color: #fff;\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info:focus,\n.btn-info.focus {\n color: #fff;\n background-color: #31b0d5;\n border-color: #1b6d85;\n}\n.btn-info:hover {\n color: #fff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n color: #fff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active:hover,\n.btn-info.active:hover,\n.open > .dropdown-toggle.btn-info:hover,\n.btn-info:active:focus,\n.btn-info.active:focus,\n.open > .dropdown-toggle.btn-info:focus,\n.btn-info:active.focus,\n.btn-info.active.focus,\n.open > .dropdown-toggle.btn-info.focus {\n color: #fff;\n background-color: #269abc;\n border-color: #1b6d85;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n background-image: none;\n}\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus {\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info .badge {\n color: #5bc0de;\n background-color: #fff;\n}\n.btn-warning {\n color: #fff;\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning:focus,\n.btn-warning.focus {\n color: #fff;\n background-color: #ec971f;\n border-color: #985f0d;\n}\n.btn-warning:hover {\n color: #fff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n color: #fff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active:hover,\n.btn-warning.active:hover,\n.open > .dropdown-toggle.btn-warning:hover,\n.btn-warning:active:focus,\n.btn-warning.active:focus,\n.open > .dropdown-toggle.btn-warning:focus,\n.btn-warning:active.focus,\n.btn-warning.active.focus,\n.open > .dropdown-toggle.btn-warning.focus {\n color: #fff;\n background-color: #d58512;\n border-color: #985f0d;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n background-image: none;\n}\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus {\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning .badge {\n color: #f0ad4e;\n background-color: #fff;\n}\n.btn-danger {\n color: #fff;\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger:focus,\n.btn-danger.focus {\n color: #fff;\n background-color: #c9302c;\n border-color: #761c19;\n}\n.btn-danger:hover {\n color: #fff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n color: #fff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active:hover,\n.btn-danger.active:hover,\n.open > .dropdown-toggle.btn-danger:hover,\n.btn-danger:active:focus,\n.btn-danger.active:focus,\n.open > .dropdown-toggle.btn-danger:focus,\n.btn-danger:active.focus,\n.btn-danger.active.focus,\n.open > .dropdown-toggle.btn-danger.focus {\n color: #fff;\n background-color: #ac2925;\n border-color: #761c19;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n background-image: none;\n}\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus {\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger .badge {\n color: #d9534f;\n background-color: #fff;\n}\n.btn-link {\n font-weight: normal;\n color: #337ab7;\n border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n background-color: transparent;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n color: #23527c;\n text-decoration: underline;\n background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n color: #777;\n text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n padding: 1px 5px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-block {\n display: block;\n width: 100%;\n}\n.btn-block + .btn-block {\n margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n.fade {\n opacity: 0;\n -webkit-transition: opacity .15s linear;\n -o-transition: opacity .15s linear;\n transition: opacity .15s linear;\n}\n.fade.in {\n opacity: 1;\n}\n.collapse {\n display: none;\n}\n.collapse.in {\n display: block;\n}\ntr.collapse.in {\n display: table-row;\n}\ntbody.collapse.in {\n display: table-row-group;\n}\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n -webkit-transition-timing-function: ease;\n -o-transition-timing-function: ease;\n transition-timing-function: ease;\n -webkit-transition-duration: .35s;\n -o-transition-duration: .35s;\n transition-duration: .35s;\n -webkit-transition-property: height, visibility;\n -o-transition-property: height, visibility;\n transition-property: height, visibility;\n}\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px dashed;\n border-top: 4px solid \\9;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n position: relative;\n}\n.dropdown-toggle:focus {\n outline: 0;\n}\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0;\n font-size: 14px;\n text-align: left;\n list-style: none;\n background-color: #fff;\n -webkit-background-clip: padding-box;\n background-clip: padding-box;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, .15);\n border-radius: 4px;\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n}\n.dropdown-menu.pull-right {\n right: 0;\n left: auto;\n}\n.dropdown-menu .divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: 1.42857143;\n color: #333;\n white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n color: #262626;\n text-decoration: none;\n background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n color: #fff;\n text-decoration: none;\n background-color: #337ab7;\n outline: 0;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n color: #777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n text-decoration: none;\n cursor: not-allowed;\n background-color: transparent;\n background-image: none;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.open > .dropdown-menu {\n display: block;\n}\n.open > a {\n outline: 0;\n}\n.dropdown-menu-right {\n right: 0;\n left: auto;\n}\n.dropdown-menu-left {\n right: auto;\n left: 0;\n}\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: 12px;\n line-height: 1.42857143;\n color: #777;\n white-space: nowrap;\n}\n.dropdown-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 990;\n}\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n content: \"\";\n border-top: 0;\n border-bottom: 4px dashed;\n border-bottom: 4px solid \\9;\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n .navbar-right .dropdown-menu {\n right: 0;\n left: auto;\n }\n .navbar-right .dropdown-menu-left {\n right: auto;\n left: 0;\n }\n}\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n margin-left: -1px;\n}\n.btn-toolbar {\n margin-left: -5px;\n}\n.btn-toolbar .btn,\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n.btn-group > .btn:first-child {\n margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n padding-right: 8px;\n padding-left: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-right: 12px;\n padding-left: 12px;\n}\n.btn-group.open .dropdown-toggle {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn .caret {\n margin-left: 0;\n}\n.btn-lg .caret {\n border-width: 5px 5px 0;\n border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n display: table-cell;\n float: none;\n width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.input-group {\n position: relative;\n display: table;\n border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n float: none;\n padding-right: 0;\n padding-left: 0;\n}\n.input-group .form-control {\n position: relative;\n z-index: 2;\n float: left;\n width: 100%;\n margin-bottom: 0;\n}\n.input-group .form-control:focus {\n z-index: 3;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle;\n}\n.input-group-addon {\n padding: 6px 12px;\n font-size: 14px;\n font-weight: normal;\n line-height: 1;\n color: #555;\n text-align: center;\n background-color: #eee;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\n.input-group-addon.input-sm {\n padding: 5px 10px;\n font-size: 12px;\n border-radius: 3px;\n}\n.input-group-addon.input-lg {\n padding: 10px 16px;\n font-size: 18px;\n border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n.input-group-btn {\n position: relative;\n font-size: 0;\n white-space: nowrap;\n}\n.input-group-btn > .btn {\n position: relative;\n}\n.input-group-btn > .btn + .btn {\n margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n z-index: 2;\n margin-left: -1px;\n}\n.nav {\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n.nav > li {\n position: relative;\n display: block;\n}\n.nav > li > a {\n position: relative;\n display: block;\n padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n text-decoration: none;\n background-color: #eee;\n}\n.nav > li.disabled > a {\n color: #777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n color: #777;\n text-decoration: none;\n cursor: not-allowed;\n background-color: transparent;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n background-color: #eee;\n border-color: #337ab7;\n}\n.nav .nav-divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.nav > li > a > img {\n max-width: none;\n}\n.nav-tabs {\n border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n float: left;\n margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n margin-right: 2px;\n line-height: 1.42857143;\n border: 1px solid transparent;\n border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n border-color: #eee #eee #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n color: #555;\n cursor: default;\n background-color: #fff;\n border: 1px solid #ddd;\n border-bottom-color: transparent;\n}\n.nav-tabs.nav-justified {\n width: 100%;\n border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n float: none;\n}\n.nav-tabs.nav-justified > li > a {\n margin-bottom: 5px;\n text-align: center;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-tabs.nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs.nav-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs.nav-justified > .active > a,\n .nav-tabs.nav-justified > .active > a:hover,\n .nav-tabs.nav-justified > .active > a:focus {\n border-bottom-color: #fff;\n }\n}\n.nav-pills > li {\n float: left;\n}\n.nav-pills > li > a {\n border-radius: 4px;\n}\n.nav-pills > li + li {\n margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n color: #fff;\n background-color: #337ab7;\n}\n.nav-stacked > li {\n float: none;\n}\n.nav-stacked > li + li {\n margin-top: 2px;\n margin-left: 0;\n}\n.nav-justified {\n width: 100%;\n}\n.nav-justified > li {\n float: none;\n}\n.nav-justified > li > a {\n margin-bottom: 5px;\n text-align: center;\n}\n.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs-justified {\n border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n .nav-tabs-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs-justified > .active > a,\n .nav-tabs-justified > .active > a:hover,\n .nav-tabs-justified > .active > a:focus {\n border-bottom-color: #fff;\n }\n}\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.navbar {\n position: relative;\n min-height: 50px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n .navbar {\n border-radius: 4px;\n }\n}\n@media (min-width: 768px) {\n .navbar-header {\n float: left;\n }\n}\n.navbar-collapse {\n padding-right: 15px;\n padding-left: 15px;\n overflow-x: visible;\n -webkit-overflow-scrolling: touch;\n border-top: 1px solid transparent;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n}\n.navbar-collapse.in {\n overflow-y: auto;\n}\n@media (min-width: 768px) {\n .navbar-collapse {\n width: auto;\n border-top: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n .navbar-collapse.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0;\n overflow: visible !important;\n }\n .navbar-collapse.in {\n overflow-y: visible;\n }\n .navbar-fixed-top .navbar-collapse,\n .navbar-static-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n padding-right: 0;\n padding-left: 0;\n }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n .navbar-fixed-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n max-height: 200px;\n }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n margin-right: -15px;\n margin-left: -15px;\n}\n@media (min-width: 768px) {\n .container > .navbar-header,\n .container-fluid > .navbar-header,\n .container > .navbar-collapse,\n .container-fluid > .navbar-collapse {\n margin-right: 0;\n margin-left: 0;\n }\n}\n.navbar-static-top {\n z-index: 1000;\n border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n .navbar-static-top {\n border-radius: 0;\n }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n@media (min-width: 768px) {\n .navbar-fixed-top,\n .navbar-fixed-bottom {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0;\n border-width: 1px 0 0;\n}\n.navbar-brand {\n float: left;\n height: 50px;\n padding: 15px 15px;\n font-size: 18px;\n line-height: 20px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n text-decoration: none;\n}\n.navbar-brand > img {\n display: block;\n}\n@media (min-width: 768px) {\n .navbar > .container .navbar-brand,\n .navbar > .container-fluid .navbar-brand {\n margin-left: -15px;\n }\n}\n.navbar-toggle {\n position: relative;\n float: right;\n padding: 9px 10px;\n margin-top: 8px;\n margin-right: 15px;\n margin-bottom: 8px;\n background-color: transparent;\n background-image: none;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.navbar-toggle:focus {\n outline: 0;\n}\n.navbar-toggle .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n margin-top: 4px;\n}\n@media (min-width: 768px) {\n .navbar-toggle {\n display: none;\n }\n}\n.navbar-nav {\n margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: 20px;\n}\n@media (max-width: 767px) {\n .navbar-nav .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n .navbar-nav .open .dropdown-menu > li > a,\n .navbar-nav .open .dropdown-menu .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n .navbar-nav .open .dropdown-menu > li > a {\n line-height: 20px;\n }\n .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-nav .open .dropdown-menu > li > a:focus {\n background-image: none;\n }\n}\n@media (min-width: 768px) {\n .navbar-nav {\n float: left;\n margin: 0;\n }\n .navbar-nav > li {\n float: left;\n }\n .navbar-nav > li > a {\n padding-top: 15px;\n padding-bottom: 15px;\n }\n}\n.navbar-form {\n padding: 10px 15px;\n margin-top: 8px;\n margin-right: -15px;\n margin-bottom: 8px;\n margin-left: -15px;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n}\n@media (min-width: 768px) {\n .navbar-form .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .navbar-form .form-control-static {\n display: inline-block;\n }\n .navbar-form .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .navbar-form .input-group .input-group-addon,\n .navbar-form .input-group .input-group-btn,\n .navbar-form .input-group .form-control {\n width: auto;\n }\n .navbar-form .input-group > .form-control {\n width: 100%;\n }\n .navbar-form .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio,\n .navbar-form .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio label,\n .navbar-form .checkbox label {\n padding-left: 0;\n }\n .navbar-form .radio input[type=\"radio\"],\n .navbar-form .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .navbar-form .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n@media (max-width: 767px) {\n .navbar-form .form-group {\n margin-bottom: 5px;\n }\n .navbar-form .form-group:last-child {\n margin-bottom: 0;\n }\n}\n@media (min-width: 768px) {\n .navbar-form {\n width: auto;\n padding-top: 0;\n padding-bottom: 0;\n margin-right: 0;\n margin-left: 0;\n border: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n}\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.navbar-btn {\n margin-top: 8px;\n margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n margin-top: 14px;\n margin-bottom: 14px;\n}\n.navbar-text {\n margin-top: 15px;\n margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n .navbar-text {\n float: left;\n margin-right: 15px;\n margin-left: 15px;\n }\n}\n@media (min-width: 768px) {\n .navbar-left {\n float: left !important;\n }\n .navbar-right {\n float: right !important;\n margin-right: -15px;\n }\n .navbar-right ~ .navbar-right {\n margin-right: 0;\n }\n}\n.navbar-default {\n background-color: #f8f8f8;\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n color: #777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n color: #5e5e5e;\n background-color: transparent;\n}\n.navbar-default .navbar-text {\n color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n color: #777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n color: #333;\n background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n color: #555;\n background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n color: #ccc;\n background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n color: #555;\n background-color: #e7e7e7;\n}\n@media (max-width: 767px) {\n .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n color: #777;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #333;\n background-color: transparent;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #555;\n background-color: #e7e7e7;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #ccc;\n background-color: transparent;\n }\n}\n.navbar-default .navbar-link {\n color: #777;\n}\n.navbar-default .navbar-link:hover {\n color: #333;\n}\n.navbar-default .btn-link {\n color: #777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n color: #333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n color: #ccc;\n}\n.navbar-inverse {\n background-color: #222;\n border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n color: #fff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n color: #fff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n color: #fff;\n background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n color: #444;\n background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n color: #fff;\n background-color: #080808;\n}\n@media (max-width: 767px) {\n .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n border-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n color: #9d9d9d;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #fff;\n background-color: transparent;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #444;\n background-color: transparent;\n }\n}\n.navbar-inverse .navbar-link {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n color: #fff;\n}\n.navbar-inverse .btn-link {\n color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n color: #fff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n color: #444;\n}\n.breadcrumb {\n padding: 8px 15px;\n margin-bottom: 20px;\n list-style: none;\n background-color: #f5f5f5;\n border-radius: 4px;\n}\n.breadcrumb > li {\n display: inline-block;\n}\n.breadcrumb > li + li:before {\n padding: 0 5px;\n color: #ccc;\n content: \"/\\00a0\";\n}\n.breadcrumb > .active {\n color: #777;\n}\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: 20px 0;\n border-radius: 4px;\n}\n.pagination > li {\n display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n position: relative;\n float: left;\n padding: 6px 12px;\n margin-left: -1px;\n line-height: 1.42857143;\n color: #337ab7;\n text-decoration: none;\n background-color: #fff;\n border: 1px solid #ddd;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n margin-left: 0;\n border-top-left-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n border-top-right-radius: 4px;\n border-bottom-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n z-index: 2;\n color: #23527c;\n background-color: #eee;\n border-color: #ddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n z-index: 3;\n color: #fff;\n cursor: default;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n color: #777;\n cursor: not-allowed;\n background-color: #fff;\n border-color: #ddd;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n border-top-left-radius: 6px;\n border-bottom-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n border-top-right-radius: 6px;\n border-bottom-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n border-top-left-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n border-top-right-radius: 3px;\n border-bottom-right-radius: 3px;\n}\n.pager {\n padding-left: 0;\n margin: 20px 0;\n text-align: center;\n list-style: none;\n}\n.pager li {\n display: inline;\n}\n.pager li > a,\n.pager li > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n text-decoration: none;\n background-color: #eee;\n}\n.pager .next > a,\n.pager .next > span {\n float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n color: #777;\n cursor: not-allowed;\n background-color: #fff;\n}\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer;\n}\n.label:empty {\n display: none;\n}\n.btn .label {\n position: relative;\n top: -1px;\n}\n.label-default {\n background-color: #777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n background-color: #5e5e5e;\n}\n.label-primary {\n background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n background-color: #286090;\n}\n.label-success {\n background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n background-color: #449d44;\n}\n.label-info {\n background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n background-color: #31b0d5;\n}\n.label-warning {\n background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n background-color: #ec971f;\n}\n.label-danger {\n background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n background-color: #c9302c;\n}\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: 12px;\n font-weight: bold;\n line-height: 1;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n vertical-align: middle;\n background-color: #777;\n border-radius: 10px;\n}\n.badge:empty {\n display: none;\n}\n.btn .badge {\n position: relative;\n top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n top: 0;\n padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.list-group-item > .badge {\n float: right;\n}\n.list-group-item > .badge + .badge {\n margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n margin-left: 3px;\n}\n.jumbotron {\n padding-top: 30px;\n padding-bottom: 30px;\n margin-bottom: 30px;\n color: inherit;\n background-color: #eee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n color: inherit;\n}\n.jumbotron p {\n margin-bottom: 15px;\n font-size: 21px;\n font-weight: 200;\n}\n.jumbotron > hr {\n border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n padding-right: 15px;\n padding-left: 15px;\n border-radius: 6px;\n}\n.jumbotron .container {\n max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n .jumbotron {\n padding-top: 48px;\n padding-bottom: 48px;\n }\n .container .jumbotron,\n .container-fluid .jumbotron {\n padding-right: 60px;\n padding-left: 60px;\n }\n .jumbotron h1,\n .jumbotron .h1 {\n font-size: 63px;\n }\n}\n.thumbnail {\n display: block;\n padding: 4px;\n margin-bottom: 20px;\n line-height: 1.42857143;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n -webkit-transition: border .2s ease-in-out;\n -o-transition: border .2s ease-in-out;\n transition: border .2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n margin-right: auto;\n margin-left: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n border-color: #337ab7;\n}\n.thumbnail .caption {\n padding: 9px;\n color: #333;\n}\n.alert {\n padding: 15px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.alert h4 {\n margin-top: 0;\n color: inherit;\n}\n.alert .alert-link {\n font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n margin-bottom: 0;\n}\n.alert > p + p {\n margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n}\n.alert-success {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n.alert-success hr {\n border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n color: #2b542c;\n}\n.alert-info {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1;\n}\n.alert-info hr {\n border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n color: #245269;\n}\n.alert-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc;\n}\n.alert-warning hr {\n border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n color: #66512c;\n}\n.alert-danger {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n.alert-danger hr {\n border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n@-o-keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n@keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n.progress {\n height: 20px;\n margin-bottom: 20px;\n overflow: hidden;\n background-color: #f5f5f5;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);\n}\n.progress-bar {\n float: left;\n width: 0;\n height: 100%;\n font-size: 12px;\n line-height: 20px;\n color: #fff;\n text-align: center;\n background-color: #337ab7;\n -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n -webkit-transition: width .6s ease;\n -o-transition: width .6s ease;\n transition: width .6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n -webkit-background-size: 40px 40px;\n background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n -webkit-animation: progress-bar-stripes 2s linear infinite;\n -o-animation: progress-bar-stripes 2s linear infinite;\n animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.media {\n margin-top: 15px;\n}\n.media:first-child {\n margin-top: 0;\n}\n.media,\n.media-body {\n overflow: hidden;\n zoom: 1;\n}\n.media-body {\n width: 10000px;\n}\n.media-object {\n display: block;\n}\n.media-object.img-thumbnail {\n max-width: none;\n}\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n.media-middle {\n vertical-align: middle;\n}\n.media-bottom {\n vertical-align: bottom;\n}\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n.list-group {\n padding-left: 0;\n margin-bottom: 20px;\n}\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n margin-bottom: -1px;\n background-color: #fff;\n border: 1px solid #ddd;\n}\n.list-group-item:first-child {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n}\n.list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\na.list-group-item,\nbutton.list-group-item {\n color: #555;\n}\na.list-group-item .list-group-item-heading,\nbutton.list-group-item .list-group-item-heading {\n color: #333;\n}\na.list-group-item:hover,\nbutton.list-group-item:hover,\na.list-group-item:focus,\nbutton.list-group-item:focus {\n color: #555;\n text-decoration: none;\n background-color: #f5f5f5;\n}\nbutton.list-group-item {\n width: 100%;\n text-align: left;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n color: #777;\n cursor: not-allowed;\n background-color: #eee;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n color: #777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n z-index: 2;\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n color: #c7ddef;\n}\n.list-group-item-success {\n color: #3c763d;\n background-color: #dff0d8;\n}\na.list-group-item-success,\nbutton.list-group-item-success {\n color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading,\nbutton.list-group-item-success .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-success:hover,\nbutton.list-group-item-success:hover,\na.list-group-item-success:focus,\nbutton.list-group-item-success:focus {\n color: #3c763d;\n background-color: #d0e9c6;\n}\na.list-group-item-success.active,\nbutton.list-group-item-success.active,\na.list-group-item-success.active:hover,\nbutton.list-group-item-success.active:hover,\na.list-group-item-success.active:focus,\nbutton.list-group-item-success.active:focus {\n color: #fff;\n background-color: #3c763d;\n border-color: #3c763d;\n}\n.list-group-item-info {\n color: #31708f;\n background-color: #d9edf7;\n}\na.list-group-item-info,\nbutton.list-group-item-info {\n color: #31708f;\n}\na.list-group-item-info .list-group-item-heading,\nbutton.list-group-item-info .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-info:hover,\nbutton.list-group-item-info:hover,\na.list-group-item-info:focus,\nbutton.list-group-item-info:focus {\n color: #31708f;\n background-color: #c4e3f3;\n}\na.list-group-item-info.active,\nbutton.list-group-item-info.active,\na.list-group-item-info.active:hover,\nbutton.list-group-item-info.active:hover,\na.list-group-item-info.active:focus,\nbutton.list-group-item-info.active:focus {\n color: #fff;\n background-color: #31708f;\n border-color: #31708f;\n}\n.list-group-item-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n}\na.list-group-item-warning,\nbutton.list-group-item-warning {\n color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading,\nbutton.list-group-item-warning .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-warning:hover,\nbutton.list-group-item-warning:hover,\na.list-group-item-warning:focus,\nbutton.list-group-item-warning:focus {\n color: #8a6d3b;\n background-color: #faf2cc;\n}\na.list-group-item-warning.active,\nbutton.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\nbutton.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus,\nbutton.list-group-item-warning.active:focus {\n color: #fff;\n background-color: #8a6d3b;\n border-color: #8a6d3b;\n}\n.list-group-item-danger {\n color: #a94442;\n background-color: #f2dede;\n}\na.list-group-item-danger,\nbutton.list-group-item-danger {\n color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading,\nbutton.list-group-item-danger .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-danger:hover,\nbutton.list-group-item-danger:hover,\na.list-group-item-danger:focus,\nbutton.list-group-item-danger:focus {\n color: #a94442;\n background-color: #ebcccc;\n}\na.list-group-item-danger.active,\nbutton.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\nbutton.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus,\nbutton.list-group-item-danger.active:focus {\n color: #fff;\n background-color: #a94442;\n border-color: #a94442;\n}\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n.panel {\n margin-bottom: 20px;\n background-color: #fff;\n border: 1px solid transparent;\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n}\n.panel-body {\n padding: 15px;\n}\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n color: inherit;\n}\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n color: inherit;\n}\n.panel-footer {\n padding: 10px 15px;\n background-color: #f5f5f5;\n border-top: 1px solid #ddd;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n border-top: 0;\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n border-bottom: 0;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n border-top-width: 0;\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n padding-right: 15px;\n padding-left: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n border-bottom: 0;\n}\n.panel > .table-responsive {\n margin-bottom: 0;\n border: 0;\n}\n.panel-group {\n margin-bottom: 20px;\n}\n.panel-group .panel {\n margin-bottom: 0;\n border-radius: 4px;\n}\n.panel-group .panel + .panel {\n margin-top: 5px;\n}\n.panel-group .panel-heading {\n border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n border-top: 1px solid #ddd;\n}\n.panel-group .panel-footer {\n border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n border-bottom: 1px solid #ddd;\n}\n.panel-default {\n border-color: #ddd;\n}\n.panel-default > .panel-heading {\n color: #333;\n background-color: #f5f5f5;\n border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ddd;\n}\n.panel-default > .panel-heading .badge {\n color: #f5f5f5;\n background-color: #333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ddd;\n}\n.panel-primary {\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #337ab7;\n}\n.panel-success {\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n color: #dff0d8;\n background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #d6e9c6;\n}\n.panel-info {\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n color: #d9edf7;\n background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #bce8f1;\n}\n.panel-warning {\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n color: #fcf8e3;\n background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #faebcc;\n}\n.panel-danger {\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n color: #f2dede;\n background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 0;\n}\n.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border: 1px solid #e3e3e3;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);\n}\n.well blockquote {\n border-color: #ddd;\n border-color: rgba(0, 0, 0, .15);\n}\n.well-lg {\n padding: 24px;\n border-radius: 6px;\n}\n.well-sm {\n padding: 9px;\n border-radius: 3px;\n}\n.close {\n float: right;\n font-size: 21px;\n font-weight: bold;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n filter: alpha(opacity=20);\n opacity: .2;\n}\n.close:hover,\n.close:focus {\n color: #000;\n text-decoration: none;\n cursor: pointer;\n filter: alpha(opacity=50);\n opacity: .5;\n}\nbutton.close {\n -webkit-appearance: none;\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n}\n.modal-open {\n overflow: hidden;\n}\n.modal {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1050;\n display: none;\n overflow: hidden;\n -webkit-overflow-scrolling: touch;\n outline: 0;\n}\n.modal.fade .modal-dialog {\n -webkit-transition: -webkit-transform .3s ease-out;\n -o-transition: -o-transform .3s ease-out;\n transition: transform .3s ease-out;\n -webkit-transform: translate(0, -25%);\n -ms-transform: translate(0, -25%);\n -o-transform: translate(0, -25%);\n transform: translate(0, -25%);\n}\n.modal.in .modal-dialog {\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n -o-transform: translate(0, 0);\n transform: translate(0, 0);\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n.modal-content {\n position: relative;\n background-color: #fff;\n -webkit-background-clip: padding-box;\n background-clip: padding-box;\n border: 1px solid #999;\n border: 1px solid rgba(0, 0, 0, .2);\n border-radius: 6px;\n outline: 0;\n -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);\n box-shadow: 0 3px 9px rgba(0, 0, 0, .5);\n}\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n background-color: #000;\n}\n.modal-backdrop.fade {\n filter: alpha(opacity=0);\n opacity: 0;\n}\n.modal-backdrop.in {\n filter: alpha(opacity=50);\n opacity: .5;\n}\n.modal-header {\n padding: 15px;\n border-bottom: 1px solid #e5e5e5;\n}\n.modal-header .close {\n margin-top: -2px;\n}\n.modal-title {\n margin: 0;\n line-height: 1.42857143;\n}\n.modal-body {\n position: relative;\n padding: 15px;\n}\n.modal-footer {\n padding: 15px;\n text-align: right;\n border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n margin-bottom: 0;\n margin-left: 5px;\n}\n.modal-footer .btn-group .btn + .btn {\n margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n margin-left: 0;\n}\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n@media (min-width: 768px) {\n .modal-dialog {\n width: 600px;\n margin: 30px auto;\n }\n .modal-content {\n -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);\n box-shadow: 0 5px 15px rgba(0, 0, 0, .5);\n }\n .modal-sm {\n width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg {\n width: 900px;\n }\n}\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 12px;\n font-style: normal;\n font-weight: normal;\n line-height: 1.42857143;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n white-space: normal;\n filter: alpha(opacity=0);\n opacity: 0;\n\n line-break: auto;\n}\n.tooltip.in {\n filter: alpha(opacity=90);\n opacity: .9;\n}\n.tooltip.top {\n padding: 5px 0;\n margin-top: -3px;\n}\n.tooltip.right {\n padding: 0 5px;\n margin-left: 3px;\n}\n.tooltip.bottom {\n padding: 5px 0;\n margin-top: 3px;\n}\n.tooltip.left {\n padding: 0 5px;\n margin-left: -3px;\n}\n.tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 4px;\n}\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.top-left .tooltip-arrow {\n right: 5px;\n bottom: 0;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.top-right .tooltip-arrow {\n bottom: 0;\n left: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n border-right-color: #000;\n}\n.tooltip.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n border-left-color: #000;\n}\n.tooltip.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n top: 0;\n right: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n top: 0;\n left: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: none;\n max-width: 276px;\n padding: 1px;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n font-style: normal;\n font-weight: normal;\n line-height: 1.42857143;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n white-space: normal;\n background-color: #fff;\n -webkit-background-clip: padding-box;\n background-clip: padding-box;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, .2);\n border-radius: 6px;\n -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n\n line-break: auto;\n}\n.popover.top {\n margin-top: -10px;\n}\n.popover.right {\n margin-left: 10px;\n}\n.popover.bottom {\n margin-top: 10px;\n}\n.popover.left {\n margin-left: -10px;\n}\n.popover-title {\n padding: 8px 14px;\n margin: 0;\n font-size: 14px;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-radius: 5px 5px 0 0;\n}\n.popover-content {\n padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.popover > .arrow {\n border-width: 11px;\n}\n.popover > .arrow:after {\n content: \"\";\n border-width: 10px;\n}\n.popover.top > .arrow {\n bottom: -11px;\n left: 50%;\n margin-left: -11px;\n border-top-color: #999;\n border-top-color: rgba(0, 0, 0, .25);\n border-bottom-width: 0;\n}\n.popover.top > .arrow:after {\n bottom: 1px;\n margin-left: -10px;\n content: \" \";\n border-top-color: #fff;\n border-bottom-width: 0;\n}\n.popover.right > .arrow {\n top: 50%;\n left: -11px;\n margin-top: -11px;\n border-right-color: #999;\n border-right-color: rgba(0, 0, 0, .25);\n border-left-width: 0;\n}\n.popover.right > .arrow:after {\n bottom: -10px;\n left: 1px;\n content: \" \";\n border-right-color: #fff;\n border-left-width: 0;\n}\n.popover.bottom > .arrow {\n top: -11px;\n left: 50%;\n margin-left: -11px;\n border-top-width: 0;\n border-bottom-color: #999;\n border-bottom-color: rgba(0, 0, 0, .25);\n}\n.popover.bottom > .arrow:after {\n top: 1px;\n margin-left: -10px;\n content: \" \";\n border-top-width: 0;\n border-bottom-color: #fff;\n}\n.popover.left > .arrow {\n top: 50%;\n right: -11px;\n margin-top: -11px;\n border-right-width: 0;\n border-left-color: #999;\n border-left-color: rgba(0, 0, 0, .25);\n}\n.popover.left > .arrow:after {\n right: 1px;\n bottom: -10px;\n content: \" \";\n border-right-width: 0;\n border-left-color: #fff;\n}\n.carousel {\n position: relative;\n}\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n.carousel-inner > .item {\n position: relative;\n display: none;\n -webkit-transition: .6s ease-in-out left;\n -o-transition: .6s ease-in-out left;\n transition: .6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n .carousel-inner > .item {\n -webkit-transition: -webkit-transform .6s ease-in-out;\n -o-transition: -o-transform .6s ease-in-out;\n transition: transform .6s ease-in-out;\n\n -webkit-backface-visibility: hidden;\n backface-visibility: hidden;\n -webkit-perspective: 1000px;\n perspective: 1000px;\n }\n .carousel-inner > .item.next,\n .carousel-inner > .item.active.right {\n left: 0;\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n }\n .carousel-inner > .item.prev,\n .carousel-inner > .item.active.left {\n left: 0;\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n }\n .carousel-inner > .item.next.left,\n .carousel-inner > .item.prev.right,\n .carousel-inner > .item.active {\n left: 0;\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n display: block;\n}\n.carousel-inner > .active {\n left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n}\n.carousel-inner > .next {\n left: 100%;\n}\n.carousel-inner > .prev {\n left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n left: 0;\n}\n.carousel-inner > .active.left {\n left: -100%;\n}\n.carousel-inner > .active.right {\n left: 100%;\n}\n.carousel-control {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 15%;\n font-size: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n background-color: rgba(0, 0, 0, 0);\n filter: alpha(opacity=50);\n opacity: .5;\n}\n.carousel-control.left {\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));\n background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n background-repeat: repeat-x;\n}\n.carousel-control.right {\n right: 0;\n left: auto;\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));\n background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n background-repeat: repeat-x;\n}\n.carousel-control:hover,\n.carousel-control:focus {\n color: #fff;\n text-decoration: none;\n filter: alpha(opacity=90);\n outline: 0;\n opacity: .9;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n z-index: 5;\n display: inline-block;\n margin-top: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n width: 20px;\n height: 20px;\n font-family: serif;\n line-height: 1;\n}\n.carousel-control .icon-prev:before {\n content: '\\2039';\n}\n.carousel-control .icon-next:before {\n content: '\\203a';\n}\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n padding-left: 0;\n margin-left: -30%;\n text-align: center;\n list-style: none;\n}\n.carousel-indicators li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #000 \\9;\n background-color: rgba(0, 0, 0, 0);\n border: 1px solid #fff;\n border-radius: 10px;\n}\n.carousel-indicators .active {\n width: 12px;\n height: 12px;\n margin: 0;\n background-color: #fff;\n}\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 20px;\n left: 15%;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n}\n.carousel-caption .btn {\n text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-prev,\n .carousel-control .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -10px;\n font-size: 30px;\n }\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .icon-prev {\n margin-left: -10px;\n }\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-next {\n margin-right: -10px;\n }\n .carousel-caption {\n right: 20%;\n left: 20%;\n padding-bottom: 30px;\n }\n .carousel-indicators {\n bottom: 20px;\n }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-header:before,\n.modal-header:after,\n.modal-footer:before,\n.modal-footer:after {\n display: table;\n content: \" \";\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-header:after,\n.modal-footer:after {\n clear: both;\n}\n.center-block {\n display: block;\n margin-right: auto;\n margin-left: auto;\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n.hidden {\n display: none !important;\n}\n.affix {\n position: fixed;\n}\n@-ms-viewport {\n width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n@media (max-width: 767px) {\n .visible-xs {\n display: block !important;\n }\n table.visible-xs {\n display: table !important;\n }\n tr.visible-xs {\n display: table-row !important;\n }\n th.visible-xs,\n td.visible-xs {\n display: table-cell !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-block {\n display: block !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline {\n display: inline !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm {\n display: block !important;\n }\n table.visible-sm {\n display: table !important;\n }\n tr.visible-sm {\n display: table-row !important;\n }\n th.visible-sm,\n td.visible-sm {\n display: table-cell !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-block {\n display: block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline {\n display: inline !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md {\n display: block !important;\n }\n table.visible-md {\n display: table !important;\n }\n tr.visible-md {\n display: table-row !important;\n }\n th.visible-md,\n td.visible-md {\n display: table-cell !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-block {\n display: block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline {\n display: inline !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg {\n display: block !important;\n }\n table.visible-lg {\n display: table !important;\n }\n tr.visible-lg {\n display: table-row !important;\n }\n th.visible-lg,\n td.visible-lg {\n display: table-cell !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-block {\n display: block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline {\n display: inline !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline-block {\n display: inline-block !important;\n }\n}\n@media (max-width: 767px) {\n .hidden-xs {\n display: none !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .hidden-sm {\n display: none !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .hidden-md {\n display: none !important;\n }\n}\n@media (min-width: 1200px) {\n .hidden-lg {\n display: none !important;\n }\n}\n.visible-print {\n display: none !important;\n}\n@media print {\n .visible-print {\n display: block !important;\n }\n table.visible-print {\n display: table !important;\n }\n tr.visible-print {\n display: table-row !important;\n }\n th.visible-print,\n td.visible-print {\n display: table-cell !important;\n }\n}\n.visible-print-block {\n display: none !important;\n}\n@media print {\n .visible-print-block {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n}\n@media print {\n .visible-print-inline {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n}\n@media print {\n .visible-print-inline-block {\n display: inline-block !important;\n }\n}\n@media print {\n .hidden-print {\n display: none !important;\n }\n}\n/*# sourceMappingURL=bootstrap.css.map */\n","//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// Star\n\n// Import the fonts\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('@{icon-font-path}@{icon-font-name}.eot');\n src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'),\n url('@{icon-font-path}@{icon-font-name}.woff2') format('woff2'),\n url('@{icon-font-path}@{icon-font-name}.woff') format('woff'),\n url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'),\n url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg');\n}\n\n// Catchall baseclass\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk { &:before { content: \"\\002a\"; } }\n.glyphicon-plus { &:before { content: \"\\002b\"; } }\n.glyphicon-euro,\n.glyphicon-eur { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil { &:before { content: \"\\270f\"; } }\n.glyphicon-glass { &:before { content: \"\\e001\"; } }\n.glyphicon-music { &:before { content: \"\\e002\"; } }\n.glyphicon-search { &:before { content: \"\\e003\"; } }\n.glyphicon-heart { &:before { content: \"\\e005\"; } }\n.glyphicon-star { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty { &:before { content: \"\\e007\"; } }\n.glyphicon-user { &:before { content: \"\\e008\"; } }\n.glyphicon-film { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large { &:before { content: \"\\e010\"; } }\n.glyphicon-th { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list { &:before { content: \"\\e012\"; } }\n.glyphicon-ok { &:before { content: \"\\e013\"; } }\n.glyphicon-remove { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out { &:before { content: \"\\e016\"; } }\n.glyphicon-off { &:before { content: \"\\e017\"; } }\n.glyphicon-signal { &:before { content: \"\\e018\"; } }\n.glyphicon-cog { &:before { content: \"\\e019\"; } }\n.glyphicon-trash { &:before { content: \"\\e020\"; } }\n.glyphicon-home { &:before { content: \"\\e021\"; } }\n.glyphicon-file { &:before { content: \"\\e022\"; } }\n.glyphicon-time { &:before { content: \"\\e023\"; } }\n.glyphicon-road { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt { &:before { content: \"\\e025\"; } }\n.glyphicon-download { &:before { content: \"\\e026\"; } }\n.glyphicon-upload { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt { &:before { content: \"\\e032\"; } }\n.glyphicon-lock { &:before { content: \"\\e033\"; } }\n.glyphicon-flag { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode { &:before { content: \"\\e040\"; } }\n.glyphicon-tag { &:before { content: \"\\e041\"; } }\n.glyphicon-tags { &:before { content: \"\\e042\"; } }\n.glyphicon-book { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark { &:before { content: \"\\e044\"; } }\n.glyphicon-print { &:before { content: \"\\e045\"; } }\n.glyphicon-camera { &:before { content: \"\\e046\"; } }\n.glyphicon-font { &:before { content: \"\\e047\"; } }\n.glyphicon-bold { &:before { content: \"\\e048\"; } }\n.glyphicon-italic { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify { &:before { content: \"\\e055\"; } }\n.glyphicon-list { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video { &:before { content: \"\\e059\"; } }\n.glyphicon-picture { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust { &:before { content: \"\\e063\"; } }\n.glyphicon-tint { &:before { content: \"\\e064\"; } }\n.glyphicon-edit { &:before { content: \"\\e065\"; } }\n.glyphicon-share { &:before { content: \"\\e066\"; } }\n.glyphicon-check { &:before { content: \"\\e067\"; } }\n.glyphicon-move { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward { &:before { content: \"\\e070\"; } }\n.glyphicon-backward { &:before { content: \"\\e071\"; } }\n.glyphicon-play { &:before { content: \"\\e072\"; } }\n.glyphicon-pause { &:before { content: \"\\e073\"; } }\n.glyphicon-stop { &:before { content: \"\\e074\"; } }\n.glyphicon-forward { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward { &:before { content: \"\\e077\"; } }\n.glyphicon-eject { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign { &:before { content: \"\\e101\"; } }\n.glyphicon-gift { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf { &:before { content: \"\\e103\"; } }\n.glyphicon-fire { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign { &:before { content: \"\\e107\"; } }\n.glyphicon-plane { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar { &:before { content: \"\\e109\"; } }\n.glyphicon-random { &:before { content: \"\\e110\"; } }\n.glyphicon-comment { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn { &:before { content: \"\\e122\"; } }\n.glyphicon-bell { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down { &:before { content: \"\\e134\"; } }\n.glyphicon-globe { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks { &:before { content: \"\\e137\"; } }\n.glyphicon-filter { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty { &:before { content: \"\\e143\"; } }\n.glyphicon-link { &:before { content: \"\\e144\"; } }\n.glyphicon-phone { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin { &:before { content: \"\\e146\"; } }\n.glyphicon-usd { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp { &:before { content: \"\\e149\"; } }\n.glyphicon-sort { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked { &:before { content: \"\\e157\"; } }\n.glyphicon-expand { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in { &:before { content: \"\\e161\"; } }\n.glyphicon-flash { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window { &:before { content: \"\\e164\"; } }\n.glyphicon-record { &:before { content: \"\\e165\"; } }\n.glyphicon-save { &:before { content: \"\\e166\"; } }\n.glyphicon-open { &:before { content: \"\\e167\"; } }\n.glyphicon-saved { &:before { content: \"\\e168\"; } }\n.glyphicon-import { &:before { content: \"\\e169\"; } }\n.glyphicon-export { &:before { content: \"\\e170\"; } }\n.glyphicon-send { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery { &:before { content: \"\\e179\"; } }\n.glyphicon-header { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt { &:before { content: \"\\e183\"; } }\n.glyphicon-tower { &:before { content: \"\\e184\"; } }\n.glyphicon-stats { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1 { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1 { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1 { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous { &:before { content: \"\\e200\"; } }\n.glyphicon-cd { &:before { content: \"\\e201\"; } }\n.glyphicon-save-file { &:before { content: \"\\e202\"; } }\n.glyphicon-open-file { &:before { content: \"\\e203\"; } }\n.glyphicon-level-up { &:before { content: \"\\e204\"; } }\n.glyphicon-copy { &:before { content: \"\\e205\"; } }\n.glyphicon-paste { &:before { content: \"\\e206\"; } }\n// The following 2 Glyphicons are omitted for the time being because\n// they currently use Unicode codepoints that are outside the\n// Basic Multilingual Plane (BMP). Older buggy versions of WebKit can't handle\n// non-BMP codepoints in CSS string escapes, and thus can't display these two icons.\n// Notably, the bug affects some older versions of the Android Browser.\n// More info: https://github.com/twbs/bootstrap/issues/10106\n// .glyphicon-door { &:before { content: \"\\1f6aa\"; } }\n// .glyphicon-key { &:before { content: \"\\1f511\"; } }\n.glyphicon-alert { &:before { content: \"\\e209\"; } }\n.glyphicon-equalizer { &:before { content: \"\\e210\"; } }\n.glyphicon-king { &:before { content: \"\\e211\"; } }\n.glyphicon-queen { &:before { content: \"\\e212\"; } }\n.glyphicon-pawn { &:before { content: \"\\e213\"; } }\n.glyphicon-bishop { &:before { content: \"\\e214\"; } }\n.glyphicon-knight { &:before { content: \"\\e215\"; } }\n.glyphicon-baby-formula { &:before { content: \"\\e216\"; } }\n.glyphicon-tent { &:before { content: \"\\26fa\"; } }\n.glyphicon-blackboard { &:before { content: \"\\e218\"; } }\n.glyphicon-bed { &:before { content: \"\\e219\"; } }\n.glyphicon-apple { &:before { content: \"\\f8ff\"; } }\n.glyphicon-erase { &:before { content: \"\\e221\"; } }\n.glyphicon-hourglass { &:before { content: \"\\231b\"; } }\n.glyphicon-lamp { &:before { content: \"\\e223\"; } }\n.glyphicon-duplicate { &:before { content: \"\\e224\"; } }\n.glyphicon-piggy-bank { &:before { content: \"\\e225\"; } }\n.glyphicon-scissors { &:before { content: \"\\e226\"; } }\n.glyphicon-bitcoin { &:before { content: \"\\e227\"; } }\n.glyphicon-btc { &:before { content: \"\\e227\"; } }\n.glyphicon-xbt { &:before { content: \"\\e227\"; } }\n.glyphicon-yen { &:before { content: \"\\00a5\"; } }\n.glyphicon-jpy { &:before { content: \"\\00a5\"; } }\n.glyphicon-ruble { &:before { content: \"\\20bd\"; } }\n.glyphicon-rub { &:before { content: \"\\20bd\"; } }\n.glyphicon-scale { &:before { content: \"\\e230\"; } }\n.glyphicon-ice-lolly { &:before { content: \"\\e231\"; } }\n.glyphicon-ice-lolly-tasted { &:before { content: \"\\e232\"; } }\n.glyphicon-education { &:before { content: \"\\e233\"; } }\n.glyphicon-option-horizontal { &:before { content: \"\\e234\"; } }\n.glyphicon-option-vertical { &:before { content: \"\\e235\"; } }\n.glyphicon-menu-hamburger { &:before { content: \"\\e236\"; } }\n.glyphicon-modal-window { &:before { content: \"\\e237\"; } }\n.glyphicon-oil { &:before { content: \"\\e238\"; } }\n.glyphicon-grain { &:before { content: \"\\e239\"; } }\n.glyphicon-sunglasses { &:before { content: \"\\e240\"; } }\n.glyphicon-text-size { &:before { content: \"\\e241\"; } }\n.glyphicon-text-color { &:before { content: \"\\e242\"; } }\n.glyphicon-text-background { &:before { content: \"\\e243\"; } }\n.glyphicon-object-align-top { &:before { content: \"\\e244\"; } }\n.glyphicon-object-align-bottom { &:before { content: \"\\e245\"; } }\n.glyphicon-object-align-horizontal{ &:before { content: \"\\e246\"; } }\n.glyphicon-object-align-left { &:before { content: \"\\e247\"; } }\n.glyphicon-object-align-vertical { &:before { content: \"\\e248\"; } }\n.glyphicon-object-align-right { &:before { content: \"\\e249\"; } }\n.glyphicon-triangle-right { &:before { content: \"\\e250\"; } }\n.glyphicon-triangle-left { &:before { content: \"\\e251\"; } }\n.glyphicon-triangle-bottom { &:before { content: \"\\e252\"; } }\n.glyphicon-triangle-top { &:before { content: \"\\e253\"; } }\n.glyphicon-console { &:before { content: \"\\e254\"; } }\n.glyphicon-superscript { &:before { content: \"\\e255\"; } }\n.glyphicon-subscript { &:before { content: \"\\e256\"; } }\n.glyphicon-menu-left { &:before { content: \"\\e257\"; } }\n.glyphicon-menu-right { &:before { content: \"\\e258\"; } }\n.glyphicon-menu-down { &:before { content: \"\\e259\"; } }\n.glyphicon-menu-up { &:before { content: \"\\e260\"; } }\n","//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// http://getbootstrap.com/getting-started/#third-box-sizing\n* {\n .box-sizing(border-box);\n}\n*:before,\n*:after {\n .box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n}\n\nbody {\n font-family: @font-family-base;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @text-color;\n background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n\n// Links\n\na {\n color: @link-color;\n text-decoration: none;\n\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n }\n\n &:focus {\n .tab-focus();\n }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n margin: 0;\n}\n\n\n// Images\n\nimg {\n vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n padding: @thumbnail-padding;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(all .2s ease-in-out);\n\n // Keep them at most 100% wide\n .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n margin-top: @line-height-computed;\n margin-bottom: @line-height-computed;\n border: 0;\n border-top: 1px solid @hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0,0,0,0);\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n// Useful for \"Skip to main content\" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n }\n}\n\n\n// iOS \"clickable elements\" fix for role=\"button\"\n//\n// Fixes \"clickability\" issue (and more generally, the firing of events such as focus as well)\n// for traditionally non-focusable elements with role=\"button\"\n// see https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n[role=\"button\"] {\n cursor: pointer;\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// WebKit-style focus\n\n.tab-focus() {\n // WebKit-specific. Other browsers will keep their default outline style.\n // (Initially tried to also force default via `outline: initial`,\n // but that seems to erroneously remove the outline in Firefox altogether.)\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n.img-responsive(@display: block) {\n display: @display;\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size. Note that the\n// spelling of `min--moz-device-pixel-ratio` is intentional.\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n","//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n font-family: @headings-font-family;\n font-weight: @headings-font-weight;\n line-height: @headings-line-height;\n color: @headings-color;\n\n small,\n .small {\n font-weight: normal;\n line-height: 1;\n color: @headings-small-color;\n }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n margin-top: @line-height-computed;\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 65%;\n }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n margin-top: (@line-height-computed / 2);\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 75%;\n }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n margin-bottom: @line-height-computed;\n font-size: floor((@font-size-base * 1.15));\n font-weight: 300;\n line-height: 1.4;\n\n @media (min-width: @screen-sm-min) {\n font-size: (@font-size-base * 1.5);\n }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: (12px small font / 14px base font) * 100% = about 85%\nsmall,\n.small {\n font-size: floor((100% * @font-size-small / @font-size-base));\n}\n\nmark,\n.mark {\n background-color: @state-warning-bg;\n padding: .2em;\n}\n\n// Alignment\n.text-left { text-align: left; }\n.text-right { text-align: right; }\n.text-center { text-align: center; }\n.text-justify { text-align: justify; }\n.text-nowrap { white-space: nowrap; }\n\n// Transformation\n.text-lowercase { text-transform: lowercase; }\n.text-uppercase { text-transform: uppercase; }\n.text-capitalize { text-transform: capitalize; }\n\n// Contextual colors\n.text-muted {\n color: @text-muted;\n}\n.text-primary {\n .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n // Given the contrast here, this is the only class to have its color inverted\n // automatically.\n color: #fff;\n .bg-variant(@brand-primary);\n}\n.bg-success {\n .bg-variant(@state-success-bg);\n}\n.bg-info {\n .bg-variant(@state-info-bg);\n}\n.bg-warning {\n .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n padding-bottom: ((@line-height-computed / 2) - 1);\n margin: (@line-height-computed * 2) 0 @line-height-computed;\n border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// -------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n margin-top: 0;\n margin-bottom: (@line-height-computed / 2);\n ul,\n ol {\n margin-bottom: 0;\n }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n .list-unstyled();\n margin-left: -5px;\n\n > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n }\n}\n\n// Description Lists\ndl {\n margin-top: 0; // Remove browser default\n margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n line-height: @line-height-base;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n.dl-horizontal {\n dd {\n &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n }\n\n @media (min-width: @dl-horizontal-breakpoint) {\n dt {\n float: left;\n width: (@dl-horizontal-offset - 20);\n clear: left;\n text-align: right;\n .text-overflow();\n }\n dd {\n margin-left: @dl-horizontal-offset;\n }\n }\n}\n\n\n// Misc\n// -------------------------\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted @abbr-border-color;\n}\n.initialism {\n font-size: 90%;\n .text-uppercase();\n}\n\n// Blockquotes\nblockquote {\n padding: (@line-height-computed / 2) @line-height-computed;\n margin: 0 0 @line-height-computed;\n font-size: @blockquote-font-size;\n border-left: 5px solid @blockquote-border-color;\n\n p,\n ul,\n ol {\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n // Note: Deprecated small and .small as of v3.1.0\n // Context: https://github.com/twbs/bootstrap/issues/11660\n footer,\n small,\n .small {\n display: block;\n font-size: 80%; // back to default font-size\n line-height: @line-height-base;\n color: @blockquote-small-color;\n\n &:before {\n content: '\\2014 \\00A0'; // em dash, nbsp\n }\n }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid @blockquote-border-color;\n border-left: 0;\n text-align: right;\n\n // Account for citation\n footer,\n small,\n .small {\n &:before { content: ''; }\n &:after {\n content: '\\00A0 \\2014'; // nbsp, em dash\n }\n }\n}\n\n// Addresses\naddress {\n margin-bottom: @line-height-computed;\n font-style: normal;\n line-height: @line-height-base;\n}\n","// Typography\n\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover,\n a&:focus {\n color: darken(@color, 10%);\n }\n}\n","// Contextual backgrounds\n\n.bg-variant(@color) {\n background-color: @color;\n a&:hover,\n a&:focus {\n background-color: darken(@color, 10%);\n }\n}\n","// Text overflow\n// Requires inline-block or block for proper styling\n\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: @code-color;\n background-color: @code-bg;\n border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: @kbd-color;\n background-color: @kbd-bg;\n border-radius: @border-radius-small;\n box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n\n kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n }\n}\n\n// Blocks of code\npre {\n display: block;\n padding: ((@line-height-computed - 1) / 2);\n margin: 0 0 (@line-height-computed / 2);\n font-size: (@font-size-base - 1); // 14px to 13px\n line-height: @line-height-base;\n word-break: break-all;\n word-wrap: break-word;\n color: @pre-color;\n background-color: @pre-bg;\n border: 1px solid @pre-border-color;\n border-radius: @border-radius-base;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: @pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n .container-fixed();\n\n @media (min-width: @screen-sm-min) {\n width: @container-sm;\n }\n @media (min-width: @screen-md-min) {\n width: @container-md;\n }\n @media (min-width: @screen-lg-min) {\n width: @container-lg;\n }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n .make-row();\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n .make-grid(lg);\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n.container-fixed(@gutter: @grid-gutter-width) {\n margin-right: auto;\n margin-left: auto;\n padding-left: floor((@gutter / 2));\n padding-right: ceil((@gutter / 2));\n &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-left: ceil((@gutter / -2));\n margin-right: floor((@gutter / -2));\n &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n margin-left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-push(@columns) {\n left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-pull(@columns) {\n right: percentage((@columns / @grid-columns));\n}\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-md-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: ceil((@grid-gutter-width / 2));\n padding-right: floor((@grid-gutter-width / 2));\n }\n }\n .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n .col(@index) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {\n .col-@{class}-push-0 {\n left: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {\n .col-@{class}-pull-0 {\n right: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n .calc-grid-column(@index, @class, @type);\n // next iteration\n .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n .float-grid-columns(@class);\n .loop-grid-columns(@grid-columns, @class, width);\n .loop-grid-columns(@grid-columns, @class, pull);\n .loop-grid-columns(@grid-columns, @class, push);\n .loop-grid-columns(@grid-columns, @class, offset);\n}\n","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n background-color: @table-bg;\n}\ncaption {\n padding-top: @table-cell-padding;\n padding-bottom: @table-cell-padding;\n color: @text-muted;\n text-align: left;\n}\nth {\n text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: @line-height-computed;\n // Cells\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-cell-padding;\n line-height: @line-height-base;\n vertical-align: top;\n border-top: 1px solid @table-border-color;\n }\n }\n }\n // Bottom align for column headings\n > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid @table-border-color;\n }\n // Remove top border from thead by default\n > caption + thead,\n > colgroup + thead,\n > thead:first-child {\n > tr:first-child {\n > th,\n > td {\n border-top: 0;\n }\n }\n }\n // Account for multiple tbody instances\n > tbody + tbody {\n border-top: 2px solid @table-border-color;\n }\n\n // Nesting\n .table {\n background-color: @body-bg;\n }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-condensed-cell-padding;\n }\n }\n }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n border: 1px solid @table-border-color;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n border: 1px solid @table-border-color;\n }\n }\n }\n > thead > tr {\n > th,\n > td {\n border-bottom-width: 2px;\n }\n }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n > tbody > tr:nth-of-type(odd) {\n background-color: @table-bg-accent;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover {\n background-color: @table-bg-hover;\n }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-column;\n}\ntable {\n td,\n th {\n &[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-cell;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%; // Workaround for IE9 bug (see https://github.com/twbs/bootstrap/issues/14837)\n\n @media screen and (max-width: @screen-xs-max) {\n width: 100%;\n margin-bottom: (@line-height-computed * 0.75);\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid @table-border-color;\n\n // Tighten up spacing\n > .table {\n margin-bottom: 0;\n\n // Ensure the content doesn't wrap\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n white-space: nowrap;\n }\n }\n }\n }\n\n // Special overrides for the bordered tables\n > .table-bordered {\n border: 0;\n\n // Nuke the appropriate borders so that the parent can handle them\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n\n // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n // chances are there will be only one `tr` in a `thead` and that would\n // remove the border altogether.\n > tbody,\n > tfoot {\n > tr:last-child {\n > th,\n > td {\n border-bottom: 0;\n }\n }\n }\n\n }\n }\n}\n","// Tables\n\n.table-row-variant(@state; @background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{state}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &:hover > .@{state},\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n // so we reset that to ensure it behaves more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359.\n min-width: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: @line-height-computed;\n font-size: (@font-size-base * 1.5);\n line-height: inherit;\n color: @legend-color;\n border: 0;\n border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n display: inline-block;\n max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n margin-bottom: 5px;\n font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9; // IE8-9\n line-height: normal;\n}\n\ninput[type=\"file\"] {\n display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n .tab-focus();\n}\n\n// Adjust output element\noutput {\n display: block;\n padding-top: (@padding-base-vertical + 1);\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n display: block;\n width: 100%;\n height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n background-color: @input-bg;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid @input-border;\n border-radius: @input-border-radius; // Note: This has no effect on s in CSS.\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n // Customize the `:focus` state to imitate native WebKit styles.\n .form-control-focus();\n\n // Placeholder\n .placeholder();\n\n // Unstyle the caret on ``\n// element gets special love because it's special, and that's a fact!\n.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n height: @input-height;\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n\n select& {\n height: @input-height;\n line-height: @input-height;\n }\n\n textarea&,\n select[multiple]& {\n height: auto;\n }\n}\n","//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n.btn {\n display: inline-block;\n margin-bottom: 0; // For input.btn\n font-weight: @btn-font-weight;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n white-space: nowrap;\n .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @btn-border-radius-base);\n .user-select(none);\n\n &,\n &:active,\n &.active {\n &:focus,\n &.focus {\n .tab-focus();\n }\n }\n\n &:hover,\n &:focus,\n &.focus {\n color: @btn-default-color;\n text-decoration: none;\n }\n\n &:active,\n &.active {\n outline: 0;\n background-image: none;\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n .opacity(.65);\n .box-shadow(none);\n }\n\n a& {\n &.disabled,\n fieldset[disabled] & {\n pointer-events: none; // Future-proof disabling of clicks on `` elements\n }\n }\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);\n}\n.btn-primary {\n .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);\n}\n// Success appears as green\n.btn-success {\n .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);\n}\n// Warning appears as orange\n.btn-warning {\n .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n color: @link-color;\n font-weight: normal;\n border-radius: 0;\n\n &,\n &:active,\n &.active,\n &[disabled],\n fieldset[disabled] & {\n background-color: transparent;\n .box-shadow(none);\n }\n &,\n &:hover,\n &:focus,\n &:active {\n border-color: transparent;\n }\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n background-color: transparent;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @btn-link-disabled-color;\n text-decoration: none;\n }\n }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n // line-height: ensure even-numbered height of button next to large input\n .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @btn-border-radius-large);\n}\n.btn-sm {\n // line-height: ensure proper height of button next to small input\n .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small);\n}\n.btn-xs {\n .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small);\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n &.btn-block {\n width: 100%;\n }\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n.button-variant(@color; @background; @border) {\n color: @color;\n background-color: @background;\n border-color: @border;\n\n &:focus,\n &.focus {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 25%);\n }\n &:hover {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 12%);\n }\n &:active,\n &.active,\n .open > .dropdown-toggle& {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 12%);\n\n &:hover,\n &:focus,\n &.focus {\n color: @color;\n background-color: darken(@background, 17%);\n border-color: darken(@border, 25%);\n }\n }\n &:active,\n &.active,\n .open > .dropdown-toggle& {\n background-image: none;\n }\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus,\n &.focus {\n background-color: @background;\n border-color: @border;\n }\n }\n\n .badge {\n color: @background;\n background-color: @color;\n }\n}\n\n// Button sizes\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n}\n","// Opacity\n\n.opacity(@opacity) {\n opacity: @opacity;\n // IE8 filter\n @opacity-ie: (@opacity * 100);\n filter: ~\"alpha(opacity=@{opacity-ie})\";\n}\n","//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.\n\n.fade {\n opacity: 0;\n .transition(opacity .15s linear);\n &.in {\n opacity: 1;\n }\n}\n\n.collapse {\n display: none;\n\n &.in { display: block; }\n tr&.in { display: table-row; }\n tbody&.in { display: table-row-group; }\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n .transition-property(~\"height, visibility\");\n .transition-duration(.35s);\n .transition-timing-function(ease);\n}\n","//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: @caret-width-base dashed;\n border-top: @caret-width-base solid ~\"\\9\"; // IE8\n border-right: @caret-width-base solid transparent;\n border-left: @caret-width-base solid transparent;\n}\n\n// The dropdown wrapper (div)\n.dropup,\n.dropdown {\n position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: @zindex-dropdown;\n display: none; // none by default, but block on \"open\" of the menu\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0; // override default ul\n list-style: none;\n font-size: @font-size-base;\n text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n background-color: @dropdown-bg;\n border: 1px solid @dropdown-fallback-border; // IE8 fallback\n border: 1px solid @dropdown-border;\n border-radius: @border-radius-base;\n .box-shadow(0 6px 12px rgba(0,0,0,.175));\n background-clip: padding-box;\n\n // Aligns the dropdown menu to right\n //\n // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`\n &.pull-right {\n right: 0;\n left: auto;\n }\n\n // Dividers (basically an hr) within the dropdown\n .divider {\n .nav-divider(@dropdown-divider-bg);\n }\n\n // Links within the dropdown menu\n > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: @line-height-base;\n color: @dropdown-link-color;\n white-space: nowrap; // prevent links from randomly breaking onto new lines\n }\n}\n\n// Hover/Focus state\n.dropdown-menu > li > a {\n &:hover,\n &:focus {\n text-decoration: none;\n color: @dropdown-link-hover-color;\n background-color: @dropdown-link-hover-bg;\n }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-active-color;\n text-decoration: none;\n outline: 0;\n background-color: @dropdown-link-active-bg;\n }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-disabled-color;\n }\n\n // Nuke hover/focus effects\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none; // Remove CSS gradient\n .reset-filter();\n cursor: @cursor-disabled;\n }\n}\n\n// Open state for the dropdown\n.open {\n // Show the menu\n > .dropdown-menu {\n display: block;\n }\n\n // Remove the outline when :focus is triggered\n > a {\n outline: 0;\n }\n}\n\n// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n left: auto; // Reset the default from `.dropdown-menu`\n right: 0;\n}\n// With v3, we enabled auto-flipping if you have a dropdown within a right\n// aligned nav component. To enable the undoing of that, we provide an override\n// to restore the default dropdown menu alignment.\n//\n// This is only for left-aligning a dropdown menu within a `.navbar-right` or\n// `.pull-right` nav component.\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n\n// Dropdown section headers\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: @font-size-small;\n line-height: @line-height-base;\n color: @dropdown-header-color;\n white-space: nowrap; // as with > li > a\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: (@zindex-dropdown - 10);\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n // Reverse the caret\n .caret {\n border-top: 0;\n border-bottom: @caret-width-base dashed;\n border-bottom: @caret-width-base solid ~\"\\9\"; // IE8\n content: \"\";\n }\n // Different positioning for bottom up menu\n .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-right {\n .dropdown-menu {\n .dropdown-menu-right();\n }\n // Necessary for overrides of the default right aligned menu.\n // Will remove come v4 in all likelihood.\n .dropdown-menu-left {\n .dropdown-menu-left();\n }\n }\n}\n","// Horizontal dividers\n//\n// Dividers (basically an hr) within dropdowns and nav lists\n\n.nav-divider(@color: #e5e5e5) {\n height: 1px;\n margin: ((@line-height-computed / 2) - 1) 0;\n overflow: hidden;\n background-color: @color;\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n","//\n// Button groups\n// --------------------------------------------------\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle; // match .btn alignment given font-size hack above\n > .btn {\n position: relative;\n float: left;\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active,\n &.active {\n z-index: 2;\n }\n }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n .btn + .btn,\n .btn + .btn-group,\n .btn-group + .btn,\n .btn-group + .btn-group {\n margin-left: -1px;\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n margin-left: -5px; // Offset the first child's margin\n &:extend(.clearfix all);\n\n .btn,\n .btn-group,\n .input-group {\n float: left;\n }\n > .btn,\n > .btn-group,\n > .input-group {\n margin-left: 5px;\n }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n margin-left: 0;\n &:not(:last-child):not(.dropdown-toggle) {\n .border-right-radius(0);\n }\n}\n// Need .dropdown-toggle since :last-child doesn't apply, given that a .dropdown-menu is used immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n .border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-right-radius(0);\n }\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n .border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { &:extend(.btn-xs); }\n.btn-group-sm > .btn { &:extend(.btn-sm); }\n.btn-group-lg > .btn { &:extend(.btn-lg); }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n .box-shadow(none);\n }\n}\n\n\n// Reposition the caret\n.btn .caret {\n margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n border-width: @caret-width-large @caret-width-large 0;\n border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n border-width: 0 @caret-width-large @caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n > .btn,\n > .btn-group,\n > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n }\n\n // Clear floats so dropdown menus can be properly placed\n > .btn-group {\n &:extend(.clearfix all);\n > .btn {\n float: none;\n }\n }\n\n > .btn + .btn,\n > .btn + .btn-group,\n > .btn-group + .btn,\n > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n }\n}\n\n.btn-group-vertical > .btn {\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n &:first-child:not(:last-child) {\n .border-top-radius(@btn-border-radius-base);\n .border-bottom-radius(0);\n }\n &:last-child:not(:first-child) {\n .border-top-radius(0);\n .border-bottom-radius(@btn-border-radius-base);\n }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-bottom-radius(0);\n }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n .border-top-radius(0);\n}\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n > .btn,\n > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n }\n > .btn-group .btn {\n width: 100%;\n }\n\n > .btn-group .dropdown-menu {\n left: auto;\n }\n}\n\n\n// Checkbox and radio options\n//\n// In order to support the browser's form validation feedback, powered by the\n// `required` attribute, we have to \"hide\" the inputs via `clip`. We cannot use\n// `display: none;` or `visibility: hidden;` as that also hides the popover.\n// Simply visually hiding the inputs via `opacity` would leave them clickable in\n// certain cases which is prevented by using `clip` and `pointer-events`.\n// This way, we ensure a DOM element is visible to position the popover from.\n//\n// See https://github.com/twbs/bootstrap/pull/12794 and\n// https://github.com/twbs/bootstrap/pull/14559 for more information.\n\n[data-toggle=\"buttons\"] {\n > .btn,\n > .btn-group > .btn {\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0,0,0,0);\n pointer-events: none;\n }\n }\n}\n","// Single side border-radius\n\n.border-top-radius(@radius) {\n border-top-right-radius: @radius;\n border-top-left-radius: @radius;\n}\n.border-right-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-top-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n border-bottom-left-radius: @radius;\n border-top-left-radius: @radius;\n}\n","//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n position: relative; // For dropdowns\n display: table;\n border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n // Undo padding and float of grid classes\n &[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n }\n\n .form-control {\n // Ensure that the input is always above the *appended* addon button for\n // proper border colors.\n position: relative;\n z-index: 2;\n\n // IE9 fubars the placeholder attribute in text inputs and the arrows on\n // select elements in input groups. To fix it, we float the input. Details:\n // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855\n float: left;\n\n width: 100%;\n margin-bottom: 0;\n\n &:focus {\n z-index: 3;\n }\n }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n .input-lg();\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n .input-sm();\n}\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n font-weight: normal;\n line-height: 1;\n color: @input-color;\n text-align: center;\n background-color: @input-group-addon-bg;\n border: 1px solid @input-group-addon-border-color;\n border-radius: @input-border-radius;\n\n // Sizing\n &.input-sm {\n padding: @padding-small-vertical @padding-small-horizontal;\n font-size: @font-size-small;\n border-radius: @input-border-radius-small;\n }\n &.input-lg {\n padding: @padding-large-vertical @padding-large-horizontal;\n font-size: @font-size-large;\n border-radius: @input-border-radius-large;\n }\n\n // Nuke default margins from checkboxes and radios to vertically center within.\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n margin-top: 0;\n }\n}\n\n// Reset rounded corners\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n .border-right-radius(0);\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n .border-left-radius(0);\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n position: relative;\n // Jankily prevent input button groups from wrapping with `white-space` and\n // `font-size` in combination with `inline-block` on buttons.\n font-size: 0;\n white-space: nowrap;\n\n // Negative margin for spacing, position for bringing hovered/focused/actived\n // element above the siblings.\n > .btn {\n position: relative;\n + .btn {\n margin-left: -1px;\n }\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active {\n z-index: 2;\n }\n }\n\n // Negative margin to only have a 1px border between the two\n &:first-child {\n > .btn,\n > .btn-group {\n margin-right: -1px;\n }\n }\n &:last-child {\n > .btn,\n > .btn-group {\n z-index: 2;\n margin-left: -1px;\n }\n }\n}\n","//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n margin-bottom: 0;\n padding-left: 0; // Override default ul/ol\n list-style: none;\n &:extend(.clearfix all);\n\n > li {\n position: relative;\n display: block;\n\n > a {\n position: relative;\n display: block;\n padding: @nav-link-padding;\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: @nav-link-hover-bg;\n }\n }\n\n // Disabled state sets text to gray and nukes hover/tab effects\n &.disabled > a {\n color: @nav-disabled-link-color;\n\n &:hover,\n &:focus {\n color: @nav-disabled-link-hover-color;\n text-decoration: none;\n background-color: transparent;\n cursor: @cursor-disabled;\n }\n }\n }\n\n // Open dropdowns\n .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @nav-link-hover-bg;\n border-color: @link-color;\n }\n }\n\n // Nav dividers (deprecated with v3.0.1)\n //\n // This should have been removed in v3 with the dropping of `.nav-list`, but\n // we missed it. We don't currently support this anywhere, but in the interest\n // of maintaining backward compatibility in case you use it, it's deprecated.\n .nav-divider {\n .nav-divider();\n }\n\n // Prevent IE8 from misplacing imgs\n //\n // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n > li > a > img {\n max-width: none;\n }\n}\n\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n border-bottom: 1px solid @nav-tabs-border-color;\n > li {\n float: left;\n // Make the list-items overlay the bottom border\n margin-bottom: -1px;\n\n // Actual tabs (as links)\n > a {\n margin-right: 2px;\n line-height: @line-height-base;\n border: 1px solid transparent;\n border-radius: @border-radius-base @border-radius-base 0 0;\n &:hover {\n border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;\n }\n }\n\n // Active state, and its :hover to override normal :hover\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-tabs-active-link-hover-color;\n background-color: @nav-tabs-active-link-hover-bg;\n border: 1px solid @nav-tabs-active-link-hover-border-color;\n border-bottom-color: transparent;\n cursor: default;\n }\n }\n }\n // pulling this in mainly for less shorthand\n &.nav-justified {\n .nav-justified();\n .nav-tabs-justified();\n }\n}\n\n\n// Pills\n// -------------------------\n.nav-pills {\n > li {\n float: left;\n\n // Links rendered as pills\n > a {\n border-radius: @nav-pills-border-radius;\n }\n + li {\n margin-left: 2px;\n }\n\n // Active state\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-pills-active-link-hover-color;\n background-color: @nav-pills-active-link-hover-bg;\n }\n }\n }\n}\n\n\n// Stacked pills\n.nav-stacked {\n > li {\n float: none;\n + li {\n margin-top: 2px;\n margin-left: 0; // no need for this gap between nav items\n }\n }\n}\n\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n width: 100%;\n\n > li {\n float: none;\n > a {\n text-align: center;\n margin-bottom: 5px;\n }\n }\n\n > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n }\n\n @media (min-width: @screen-sm-min) {\n > li {\n display: table-cell;\n width: 1%;\n > a {\n margin-bottom: 0;\n }\n }\n }\n}\n\n// Move borders to anchors instead of bottom of list\n//\n// Mixin for adding on top the shared `.nav-justified` styles for our tabs\n.nav-tabs-justified {\n border-bottom: 0;\n\n > li > a {\n // Override margin from .nav-tabs\n margin-right: 0;\n border-radius: @border-radius-base;\n }\n\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border: 1px solid @nav-tabs-justified-link-border-color;\n }\n\n @media (min-width: @screen-sm-min) {\n > li > a {\n border-bottom: 1px solid @nav-tabs-justified-link-border-color;\n border-radius: @border-radius-base @border-radius-base 0 0;\n }\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border-bottom-color: @nav-tabs-justified-active-link-border-color;\n }\n }\n}\n\n\n// Tabbable tabs\n// -------------------------\n\n// Hide tabbable panes to start, show them when `.active`\n.tab-content {\n > .tab-pane {\n display: none;\n }\n > .active {\n display: block;\n }\n}\n\n\n// Dropdowns\n// -------------------------\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n // make dropdown border overlap tab border\n margin-top: -1px;\n // Remove the top rounded corners here since there is a hard edge above the menu\n .border-top-radius(0);\n}\n","//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n position: relative;\n min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n margin-bottom: @navbar-margin-bottom;\n border: 1px solid transparent;\n\n // Prevent floats from breaking the navbar\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: @navbar-border-radius;\n }\n}\n\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n }\n}\n\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n overflow-x: visible;\n padding-right: @navbar-padding-horizontal;\n padding-left: @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255,255,255,.1);\n &:extend(.clearfix all);\n -webkit-overflow-scrolling: touch;\n\n &.in {\n overflow-y: auto;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border-top: 0;\n box-shadow: none;\n\n &.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0; // Override default setting\n overflow: visible !important;\n }\n\n &.in {\n overflow-y: visible;\n }\n\n // Undo the collapse side padding for navbars with containers to ensure\n // alignment of right-aligned contents.\n .navbar-fixed-top &,\n .navbar-static-top &,\n .navbar-fixed-bottom & {\n padding-left: 0;\n padding-right: 0;\n }\n }\n}\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n .navbar-collapse {\n max-height: @navbar-collapse-max-height;\n\n @media (max-device-width: @screen-xs-min) and (orientation: landscape) {\n max-height: 200px;\n }\n }\n}\n\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container,\n.container-fluid {\n > .navbar-header,\n > .navbar-collapse {\n margin-right: -@navbar-padding-horizontal;\n margin-left: -@navbar-padding-horizontal;\n\n @media (min-width: @grid-float-breakpoint) {\n margin-right: 0;\n margin-left: 0;\n }\n }\n}\n\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirety of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n z-index: @zindex-navbar;\n border-width: 0 0 1px;\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n\n// Fix the top/bottom navbars when screen real estate supports it\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: @zindex-navbar-fixed;\n\n // Undo the rounded corners\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0; // override .navbar defaults\n border-width: 1px 0 0;\n}\n\n\n// Brand/project name\n\n.navbar-brand {\n float: left;\n padding: @navbar-padding-vertical @navbar-padding-horizontal;\n font-size: @font-size-large;\n line-height: @line-height-computed;\n height: @navbar-height;\n\n &:hover,\n &:focus {\n text-decoration: none;\n }\n\n > img {\n display: block;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n .navbar > .container &,\n .navbar > .container-fluid & {\n margin-left: -@navbar-padding-horizontal;\n }\n }\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: @navbar-padding-horizontal;\n padding: 9px 10px;\n .navbar-vertical-align(34px);\n background-color: transparent;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n border-radius: @border-radius-base;\n\n // We remove the `outline` here, but later compensate by attaching `:hover`\n // styles to `:focus`.\n &:focus {\n outline: 0;\n }\n\n // Bars\n .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n }\n .icon-bar + .icon-bar {\n margin-top: 4px;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n display: none;\n }\n}\n\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with its own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;\n\n > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: @line-height-computed;\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n > li > a,\n .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n > li > a {\n line-height: @line-height-computed;\n &:hover,\n &:focus {\n background-image: none;\n }\n }\n }\n }\n\n // Uncollapse the nav\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin: 0;\n\n > li {\n float: left;\n > a {\n padding-top: @navbar-padding-vertical;\n padding-bottom: @navbar-padding-vertical;\n }\n }\n }\n}\n\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n margin-left: -@navbar-padding-horizontal;\n margin-right: -@navbar-padding-horizontal;\n padding: 10px @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n\n // Mixin behavior for optimum display\n .form-inline();\n\n .form-group {\n @media (max-width: @grid-float-breakpoint-max) {\n margin-bottom: 5px;\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n }\n\n // Vertically center in expanded, horizontal navbar\n .navbar-vertical-align(@input-height-base);\n\n // Undo 100% width for pull classes\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n .box-shadow(none);\n }\n}\n\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n .border-top-radius(0);\n}\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n .border-top-radius(@navbar-border-radius);\n .border-bottom-radius(0);\n}\n\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n .navbar-vertical-align(@input-height-base);\n\n &.btn-sm {\n .navbar-vertical-align(@input-height-small);\n }\n &.btn-xs {\n .navbar-vertical-align(22);\n }\n}\n\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n .navbar-vertical-align(@line-height-computed);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin-left: @navbar-padding-horizontal;\n margin-right: @navbar-padding-horizontal;\n }\n}\n\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specificity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n//\n// Declared after the navbar components to ensure more specificity on the margins.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-left { .pull-left(); }\n .navbar-right {\n .pull-right();\n margin-right: -@navbar-padding-horizontal;\n\n ~ .navbar-right {\n margin-right: 0;\n }\n }\n}\n\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n background-color: @navbar-default-bg;\n border-color: @navbar-default-border;\n\n .navbar-brand {\n color: @navbar-default-brand-color;\n &:hover,\n &:focus {\n color: @navbar-default-brand-hover-color;\n background-color: @navbar-default-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-default-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-default-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n\n .navbar-toggle {\n border-color: @navbar-default-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-default-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-default-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: @navbar-default-border;\n }\n\n // Dropdown menu items\n .navbar-nav {\n // Remove background color from open dropdown\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-default-link-active-bg;\n color: @navbar-default-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n > li > a {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n }\n }\n\n\n // Links in navbars\n //\n // Add a class to ensure links outside the navbar nav are colored correctly.\n\n .navbar-link {\n color: @navbar-default-link-color;\n &:hover {\n color: @navbar-default-link-hover-color;\n }\n }\n\n .btn-link {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n }\n }\n }\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n background-color: @navbar-inverse-bg;\n border-color: @navbar-inverse-border;\n\n .navbar-brand {\n color: @navbar-inverse-brand-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-brand-hover-color;\n background-color: @navbar-inverse-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-inverse-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-inverse-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n\n // Darken the responsive nav toggle\n .navbar-toggle {\n border-color: @navbar-inverse-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-inverse-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-inverse-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: darken(@navbar-inverse-bg, 7%);\n }\n\n // Dropdowns\n .navbar-nav {\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-inverse-link-active-bg;\n color: @navbar-inverse-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display\n .open .dropdown-menu {\n > .dropdown-header {\n border-color: @navbar-inverse-border;\n }\n .divider {\n background-color: @navbar-inverse-border;\n }\n > li > a {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n }\n }\n\n .navbar-link {\n color: @navbar-inverse-link-color;\n &:hover {\n color: @navbar-inverse-link-hover-color;\n }\n }\n\n .btn-link {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n }\n }\n }\n}\n","// Navbar vertical align\n//\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n\n.navbar-vertical-align(@element-height) {\n margin-top: ((@navbar-height - @element-height) / 2);\n margin-bottom: ((@navbar-height - @element-height) / 2);\n}\n","//\n// Utility classes\n// --------------------------------------------------\n\n\n// Floats\n// -------------------------\n\n.clearfix {\n .clearfix();\n}\n.center-block {\n .center-block();\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n\n\n// Toggling content\n// -------------------------\n\n// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n .text-hide();\n}\n\n\n// Hide from screenreaders and browsers\n//\n// Credit: HTML5 Boilerplate\n\n.hidden {\n display: none !important;\n}\n\n\n// For Affix plugin\n// -------------------------\n\n.affix {\n position: fixed;\n}\n","//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;\n margin-bottom: @line-height-computed;\n list-style: none;\n background-color: @breadcrumb-bg;\n border-radius: @border-radius-base;\n\n > li {\n display: inline-block;\n\n + li:before {\n content: \"@{breadcrumb-separator}\\00a0\"; // Unicode space added since inline-block means non-collapsing white-space\n padding: 0 5px;\n color: @breadcrumb-color;\n }\n }\n\n > .active {\n color: @breadcrumb-active-color;\n }\n}\n","//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: @line-height-computed 0;\n border-radius: @border-radius-base;\n\n > li {\n display: inline; // Remove list-style and block-level defaults\n > a,\n > span {\n position: relative;\n float: left; // Collapse white-space\n padding: @padding-base-vertical @padding-base-horizontal;\n line-height: @line-height-base;\n text-decoration: none;\n color: @pagination-color;\n background-color: @pagination-bg;\n border: 1px solid @pagination-border;\n margin-left: -1px;\n }\n &:first-child {\n > a,\n > span {\n margin-left: 0;\n .border-left-radius(@border-radius-base);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius-base);\n }\n }\n }\n\n > li > a,\n > li > span {\n &:hover,\n &:focus {\n z-index: 2;\n color: @pagination-hover-color;\n background-color: @pagination-hover-bg;\n border-color: @pagination-hover-border;\n }\n }\n\n > .active > a,\n > .active > span {\n &,\n &:hover,\n &:focus {\n z-index: 3;\n color: @pagination-active-color;\n background-color: @pagination-active-bg;\n border-color: @pagination-active-border;\n cursor: default;\n }\n }\n\n > .disabled {\n > span,\n > span:hover,\n > span:focus,\n > a,\n > a:hover,\n > a:focus {\n color: @pagination-disabled-color;\n background-color: @pagination-disabled-bg;\n border-color: @pagination-disabled-border;\n cursor: @cursor-disabled;\n }\n }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n\n// Small\n.pagination-sm {\n .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n","// Pagination\n\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n > li {\n > a,\n > span {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n }\n &:first-child {\n > a,\n > span {\n .border-left-radius(@border-radius);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius);\n }\n }\n }\n}\n","//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n padding-left: 0;\n margin: @line-height-computed 0;\n list-style: none;\n text-align: center;\n &:extend(.clearfix all);\n li {\n display: inline;\n > a,\n > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: @pager-bg;\n border: 1px solid @pager-border;\n border-radius: @pager-border-radius;\n }\n\n > a:hover,\n > a:focus {\n text-decoration: none;\n background-color: @pager-hover-bg;\n }\n }\n\n .next {\n > a,\n > span {\n float: right;\n }\n }\n\n .previous {\n > a,\n > span {\n float: left;\n }\n }\n\n .disabled {\n > a,\n > a:hover,\n > a:focus,\n > span {\n color: @pager-disabled-color;\n background-color: @pager-bg;\n cursor: @cursor-disabled;\n }\n }\n}\n","//\n// Labels\n// --------------------------------------------------\n\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: @label-color;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n\n // Add hover effects, but only for links\n a& {\n &:hover,\n &:focus {\n color: @label-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Empty labels collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for labels in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n .label-variant(@label-default-bg);\n}\n\n.label-primary {\n .label-variant(@label-primary-bg);\n}\n\n.label-success {\n .label-variant(@label-success-bg);\n}\n\n.label-info {\n .label-variant(@label-info-bg);\n}\n\n.label-warning {\n .label-variant(@label-warning-bg);\n}\n\n.label-danger {\n .label-variant(@label-danger-bg);\n}\n","// Labels\n\n.label-variant(@color) {\n background-color: @color;\n\n &[href] {\n &:hover,\n &:focus {\n background-color: darken(@color, 10%);\n }\n }\n}\n","//\n// Badges\n// --------------------------------------------------\n\n\n// Base class\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: @font-size-small;\n font-weight: @badge-font-weight;\n color: @badge-color;\n line-height: @badge-line-height;\n vertical-align: middle;\n white-space: nowrap;\n text-align: center;\n background-color: @badge-bg;\n border-radius: @badge-border-radius;\n\n // Empty badges collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for badges in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n\n .btn-xs &,\n .btn-group-xs > .btn & {\n top: 0;\n padding: 1px 5px;\n }\n\n // Hover state, but only for links\n a& {\n &:hover,\n &:focus {\n color: @badge-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Account for badges in navs\n .list-group-item.active > &,\n .nav-pills > .active > a > & {\n color: @badge-active-color;\n background-color: @badge-active-bg;\n }\n\n .list-group-item > & {\n float: right;\n }\n\n .list-group-item > & + & {\n margin-right: 5px;\n }\n\n .nav-pills > li > a > & {\n margin-left: 3px;\n }\n}\n","//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n padding-top: @jumbotron-padding;\n padding-bottom: @jumbotron-padding;\n margin-bottom: @jumbotron-padding;\n color: @jumbotron-color;\n background-color: @jumbotron-bg;\n\n h1,\n .h1 {\n color: @jumbotron-heading-color;\n }\n\n p {\n margin-bottom: (@jumbotron-padding / 2);\n font-size: @jumbotron-font-size;\n font-weight: 200;\n }\n\n > hr {\n border-top-color: darken(@jumbotron-bg, 10%);\n }\n\n .container &,\n .container-fluid & {\n border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n }\n\n .container {\n max-width: 100%;\n }\n\n @media screen and (min-width: @screen-sm-min) {\n padding-top: (@jumbotron-padding * 1.6);\n padding-bottom: (@jumbotron-padding * 1.6);\n\n .container &,\n .container-fluid & {\n padding-left: (@jumbotron-padding * 2);\n padding-right: (@jumbotron-padding * 2);\n }\n\n h1,\n .h1 {\n font-size: @jumbotron-heading-font-size;\n }\n }\n}\n","//\n// Thumbnails\n// --------------------------------------------------\n\n\n// Mixin and adjust the regular image class\n.thumbnail {\n display: block;\n padding: @thumbnail-padding;\n margin-bottom: @line-height-computed;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(border .2s ease-in-out);\n\n > img,\n a > img {\n &:extend(.img-responsive);\n margin-left: auto;\n margin-right: auto;\n }\n\n // Add a hover state for linked versions only\n a&:hover,\n a&:focus,\n a&.active {\n border-color: @link-color;\n }\n\n // Image captions\n .caption {\n padding: @thumbnail-caption-padding;\n color: @thumbnail-caption-color;\n }\n}\n","//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n padding: @alert-padding;\n margin-bottom: @line-height-computed;\n border: 1px solid transparent;\n border-radius: @alert-border-radius;\n\n // Headings for larger alerts\n h4 {\n margin-top: 0;\n // Specified for the h4 to prevent conflicts of changing @headings-color\n color: inherit;\n }\n\n // Provide class for links that match alerts\n .alert-link {\n font-weight: @alert-link-font-weight;\n }\n\n // Improve alignment and spacing of inner content\n > p,\n > ul {\n margin-bottom: 0;\n }\n\n > p + p {\n margin-top: 5px;\n }\n}\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0.\n.alert-dismissible {\n padding-right: (@alert-padding + 20);\n\n // Adjust close link position\n .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);\n}\n\n.alert-info {\n .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);\n}\n\n.alert-warning {\n .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);\n}\n\n.alert-danger {\n .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);\n}\n","// Alerts\n\n.alert-variant(@background; @border; @text-color) {\n background-color: @background;\n border-color: @border;\n color: @text-color;\n\n hr {\n border-top-color: darken(@border, 5%);\n }\n .alert-link {\n color: darken(@text-color, 10%);\n }\n}\n","//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -------------------------\n\n// WebKit\n@-webkit-keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n overflow: hidden;\n height: @line-height-computed;\n margin-bottom: @line-height-computed;\n background-color: @progress-bg;\n border-radius: @progress-border-radius;\n .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));\n}\n\n// Bar of progress\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: @font-size-small;\n line-height: @line-height-computed;\n color: @progress-bar-color;\n text-align: center;\n background-color: @progress-bar-bg;\n .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));\n .transition(width .6s ease);\n}\n\n// Striped bars\n//\n// `.progress-striped .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar-striped` class, which you just add to an existing\n// `.progress-bar`.\n.progress-striped .progress-bar,\n.progress-bar-striped {\n #gradient > .striped();\n background-size: 40px 40px;\n}\n\n// Call animation for the active one\n//\n// `.progress.active .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar.active` approach.\n.progress.active .progress-bar,\n.progress-bar.active {\n .animation(progress-bar-stripes 2s linear infinite);\n}\n\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n .progress-bar-variant(@progress-bar-success-bg);\n}\n\n.progress-bar-info {\n .progress-bar-variant(@progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n .progress-bar-variant(@progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n .progress-bar-variant(@progress-bar-danger-bg);\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Progress bars\n\n.progress-bar-variant(@color) {\n background-color: @color;\n\n // Deprecated parent class requirement as of v3.2.0\n .progress-striped & {\n #gradient > .striped();\n }\n}\n",".media {\n // Proper spacing between instances of .media\n margin-top: 15px;\n\n &:first-child {\n margin-top: 0;\n }\n}\n\n.media,\n.media-body {\n zoom: 1;\n overflow: hidden;\n}\n\n.media-body {\n width: 10000px;\n}\n\n.media-object {\n display: block;\n\n // Fix collapse in webkit from max-width: 100% and display: table-cell.\n &.img-thumbnail {\n max-width: none;\n }\n}\n\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n\n.media-middle {\n vertical-align: middle;\n}\n\n.media-bottom {\n vertical-align: bottom;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n\n// Media list variation\n//\n// Undo default ul/ol styles\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n","//\n// List groups\n// --------------------------------------------------\n\n\n// Base class\n//\n// Easily usable on
        ,
          , or
          .\n\n.list-group {\n // No need to set list-style: none; since .list-group-item is block level\n margin-bottom: 20px;\n padding-left: 0; // reset padding because ul and ol\n}\n\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n // Place the border on the list items and negative margin up for better styling\n margin-bottom: -1px;\n background-color: @list-group-bg;\n border: 1px solid @list-group-border;\n\n // Round the first and last items\n &:first-child {\n .border-top-radius(@list-group-border-radius);\n }\n &:last-child {\n margin-bottom: 0;\n .border-bottom-radius(@list-group-border-radius);\n }\n}\n\n\n// Interactive list items\n//\n// Use anchor or button elements instead of `li`s or `div`s to create interactive items.\n// Includes an extra `.active` modifier class for showing selected items.\n\na.list-group-item,\nbutton.list-group-item {\n color: @list-group-link-color;\n\n .list-group-item-heading {\n color: @list-group-link-heading-color;\n }\n\n // Hover state\n &:hover,\n &:focus {\n text-decoration: none;\n color: @list-group-link-hover-color;\n background-color: @list-group-hover-bg;\n }\n}\n\nbutton.list-group-item {\n width: 100%;\n text-align: left;\n}\n\n.list-group-item {\n // Disabled state\n &.disabled,\n &.disabled:hover,\n &.disabled:focus {\n background-color: @list-group-disabled-bg;\n color: @list-group-disabled-color;\n cursor: @cursor-disabled;\n\n // Force color to inherit for custom content\n .list-group-item-heading {\n color: inherit;\n }\n .list-group-item-text {\n color: @list-group-disabled-text-color;\n }\n }\n\n // Active class on item itself, not parent\n &.active,\n &.active:hover,\n &.active:focus {\n z-index: 2; // Place active items above their siblings for proper border styling\n color: @list-group-active-color;\n background-color: @list-group-active-bg;\n border-color: @list-group-active-border;\n\n // Force color to inherit for custom content\n .list-group-item-heading,\n .list-group-item-heading > small,\n .list-group-item-heading > .small {\n color: inherit;\n }\n .list-group-item-text {\n color: @list-group-active-text-color;\n }\n }\n}\n\n\n// Contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n.list-group-item-variant(success; @state-success-bg; @state-success-text);\n.list-group-item-variant(info; @state-info-bg; @state-info-text);\n.list-group-item-variant(warning; @state-warning-bg; @state-warning-text);\n.list-group-item-variant(danger; @state-danger-bg; @state-danger-text);\n\n\n// Custom content options\n//\n// Extra classes for creating well-formatted content within `.list-group-item`s.\n\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n","// List Groups\n\n.list-group-item-variant(@state; @background; @color) {\n .list-group-item-@{state} {\n color: @color;\n background-color: @background;\n\n a&,\n button& {\n color: @color;\n\n .list-group-item-heading {\n color: inherit;\n }\n\n &:hover,\n &:focus {\n color: @color;\n background-color: darken(@background, 5%);\n }\n &.active,\n &.active:hover,\n &.active:focus {\n color: #fff;\n background-color: @color;\n border-color: @color;\n }\n }\n }\n}\n","//\n// Panels\n// --------------------------------------------------\n\n\n// Base class\n.panel {\n margin-bottom: @line-height-computed;\n background-color: @panel-bg;\n border: 1px solid transparent;\n border-radius: @panel-border-radius;\n .box-shadow(0 1px 1px rgba(0,0,0,.05));\n}\n\n// Panel contents\n.panel-body {\n padding: @panel-body-padding;\n &:extend(.clearfix all);\n}\n\n// Optional heading\n.panel-heading {\n padding: @panel-heading-padding;\n border-bottom: 1px solid transparent;\n .border-top-radius((@panel-border-radius - 1));\n\n > .dropdown .dropdown-toggle {\n color: inherit;\n }\n}\n\n// Within heading, strip any `h*` tag of its default margins for spacing.\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: ceil((@font-size-base * 1.125));\n color: inherit;\n\n > a,\n > small,\n > .small,\n > small > a,\n > .small > a {\n color: inherit;\n }\n}\n\n// Optional footer (stays gray in every modifier class)\n.panel-footer {\n padding: @panel-footer-padding;\n background-color: @panel-footer-bg;\n border-top: 1px solid @panel-inner-border;\n .border-bottom-radius((@panel-border-radius - 1));\n}\n\n\n// List groups in panels\n//\n// By default, space out list group content from panel headings to account for\n// any kind of custom content between the two.\n\n.panel {\n > .list-group,\n > .panel-collapse > .list-group {\n margin-bottom: 0;\n\n .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n }\n\n // Add border top radius for first one\n &:first-child {\n .list-group-item:first-child {\n border-top: 0;\n .border-top-radius((@panel-border-radius - 1));\n }\n }\n\n // Add border bottom radius for last one\n &:last-child {\n .list-group-item:last-child {\n border-bottom: 0;\n .border-bottom-radius((@panel-border-radius - 1));\n }\n }\n }\n > .panel-heading + .panel-collapse > .list-group {\n .list-group-item:first-child {\n .border-top-radius(0);\n }\n }\n}\n// Collapse space between when there's no additional content.\n.panel-heading + .list-group {\n .list-group-item:first-child {\n border-top-width: 0;\n }\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n\n// Tables in panels\n//\n// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and\n// watch it go full width.\n\n.panel {\n > .table,\n > .table-responsive > .table,\n > .panel-collapse > .table {\n margin-bottom: 0;\n\n caption {\n padding-left: @panel-body-padding;\n padding-right: @panel-body-padding;\n }\n }\n // Add border top radius for first one\n > .table:first-child,\n > .table-responsive:first-child > .table:first-child {\n .border-top-radius((@panel-border-radius - 1));\n\n > thead:first-child,\n > tbody:first-child {\n > tr:first-child {\n border-top-left-radius: (@panel-border-radius - 1);\n border-top-right-radius: (@panel-border-radius - 1);\n\n td:first-child,\n th:first-child {\n border-top-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-top-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n // Add border bottom radius for last one\n > .table:last-child,\n > .table-responsive:last-child > .table:last-child {\n .border-bottom-radius((@panel-border-radius - 1));\n\n > tbody:last-child,\n > tfoot:last-child {\n > tr:last-child {\n border-bottom-left-radius: (@panel-border-radius - 1);\n border-bottom-right-radius: (@panel-border-radius - 1);\n\n td:first-child,\n th:first-child {\n border-bottom-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-bottom-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n > .panel-body + .table,\n > .panel-body + .table-responsive,\n > .table + .panel-body,\n > .table-responsive + .panel-body {\n border-top: 1px solid @table-border-color;\n }\n > .table > tbody:first-child > tr:first-child th,\n > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n }\n > .table-bordered,\n > .table-responsive > .table-bordered {\n border: 0;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n > thead,\n > tbody {\n > tr:first-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n > tbody,\n > tfoot {\n > tr:last-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n }\n > .table-responsive {\n border: 0;\n margin-bottom: 0;\n }\n}\n\n\n// Collapsible panels (aka, accordion)\n//\n// Wrap a series of panels in `.panel-group` to turn them into an accordion with\n// the help of our collapse JavaScript plugin.\n\n.panel-group {\n margin-bottom: @line-height-computed;\n\n // Tighten up margin so it's only between panels\n .panel {\n margin-bottom: 0;\n border-radius: @panel-border-radius;\n\n + .panel {\n margin-top: 5px;\n }\n }\n\n .panel-heading {\n border-bottom: 0;\n\n + .panel-collapse > .panel-body,\n + .panel-collapse > .list-group {\n border-top: 1px solid @panel-inner-border;\n }\n }\n\n .panel-footer {\n border-top: 0;\n + .panel-collapse .panel-body {\n border-bottom: 1px solid @panel-inner-border;\n }\n }\n}\n\n\n// Contextual variations\n.panel-default {\n .panel-variant(@panel-default-border; @panel-default-text; @panel-default-heading-bg; @panel-default-border);\n}\n.panel-primary {\n .panel-variant(@panel-primary-border; @panel-primary-text; @panel-primary-heading-bg; @panel-primary-border);\n}\n.panel-success {\n .panel-variant(@panel-success-border; @panel-success-text; @panel-success-heading-bg; @panel-success-border);\n}\n.panel-info {\n .panel-variant(@panel-info-border; @panel-info-text; @panel-info-heading-bg; @panel-info-border);\n}\n.panel-warning {\n .panel-variant(@panel-warning-border; @panel-warning-text; @panel-warning-heading-bg; @panel-warning-border);\n}\n.panel-danger {\n .panel-variant(@panel-danger-border; @panel-danger-text; @panel-danger-heading-bg; @panel-danger-border);\n}\n","// Panels\n\n.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) {\n border-color: @border;\n\n & > .panel-heading {\n color: @heading-text-color;\n background-color: @heading-bg-color;\n border-color: @heading-border;\n\n + .panel-collapse > .panel-body {\n border-top-color: @border;\n }\n .badge {\n color: @heading-bg-color;\n background-color: @heading-text-color;\n }\n }\n & > .panel-footer {\n + .panel-collapse > .panel-body {\n border-bottom-color: @border;\n }\n }\n}\n","// Embeds responsive\n//\n// Credit: Nicolas Gallagher and SUIT CSS.\n\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n\n .embed-responsive-item,\n iframe,\n embed,\n object,\n video {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0;\n }\n}\n\n// Modifier class for 16:9 aspect ratio\n.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n\n// Modifier class for 4:3 aspect ratio\n.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n","//\n// Wells\n// --------------------------------------------------\n\n\n// Base class\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: @well-bg;\n border: 1px solid @well-border;\n border-radius: @border-radius-base;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));\n blockquote {\n border-color: #ddd;\n border-color: rgba(0,0,0,.15);\n }\n}\n\n// Sizes\n.well-lg {\n padding: 24px;\n border-radius: @border-radius-large;\n}\n.well-sm {\n padding: 9px;\n border-radius: @border-radius-small;\n}\n","//\n// Close icons\n// --------------------------------------------------\n\n\n.close {\n float: right;\n font-size: (@font-size-base * 1.5);\n font-weight: @close-font-weight;\n line-height: 1;\n color: @close-color;\n text-shadow: @close-text-shadow;\n .opacity(.2);\n\n &:hover,\n &:focus {\n color: @close-color;\n text-decoration: none;\n cursor: pointer;\n .opacity(.5);\n }\n\n // Additional properties for button version\n // iOS requires the button element instead of an anchor tag.\n // If you want the anchor version, it requires `href=\"#\"`.\n // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n button& {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n }\n}\n","//\n// Modals\n// --------------------------------------------------\n\n// .modal-open - body class for killing the scroll\n// .modal - container to scroll within\n// .modal-dialog - positioning shell for the actual modal\n// .modal-content - actual modal w/ bg and corners and shit\n\n// Kill the scroll on the body\n.modal-open {\n overflow: hidden;\n}\n\n// Container that the modal scrolls within\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal;\n -webkit-overflow-scrolling: touch;\n\n // Prevent Chrome on Windows from adding a focus outline. For details, see\n // https://github.com/twbs/bootstrap/pull/10951.\n outline: 0;\n\n // When fading in the modal, animate it to slide down\n &.fade .modal-dialog {\n .translate(0, -25%);\n .transition-transform(~\"0.3s ease-out\");\n }\n &.in .modal-dialog { .translate(0, 0) }\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n\n// Actual modal\n.modal-content {\n position: relative;\n background-color: @modal-content-bg;\n border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc)\n border: 1px solid @modal-content-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 3px 9px rgba(0,0,0,.5));\n background-clip: padding-box;\n // Remove focus outline from opened modal\n outline: 0;\n}\n\n// Modal background\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal-background;\n background-color: @modal-backdrop-bg;\n // Fade for backdrop\n &.fade { .opacity(0); }\n &.in { .opacity(@modal-backdrop-opacity); }\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n padding: @modal-title-padding;\n border-bottom: 1px solid @modal-header-border-color;\n &:extend(.clearfix all);\n}\n// Close icon\n.modal-header .close {\n margin-top: -2px;\n}\n\n// Title text within header\n.modal-title {\n margin: 0;\n line-height: @modal-title-line-height;\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n position: relative;\n padding: @modal-inner-padding;\n}\n\n// Footer (for actions)\n.modal-footer {\n padding: @modal-inner-padding;\n text-align: right; // right align buttons\n border-top: 1px solid @modal-footer-border-color;\n &:extend(.clearfix all); // clear it in case folks use .pull-* classes on buttons\n\n // Properly space out buttons\n .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0; // account for input[type=\"submit\"] which gets the bottom margin like all other inputs\n }\n // but override that for button groups\n .btn-group .btn + .btn {\n margin-left: -1px;\n }\n // and override it for block buttons as well\n .btn-block + .btn-block {\n margin-left: 0;\n }\n}\n\n// Measure scrollbar width for padding body during modal show/hide\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n// Scale up the modal\n@media (min-width: @screen-sm-min) {\n // Automatically set modal's width for larger viewports\n .modal-dialog {\n width: @modal-md;\n margin: 30px auto;\n }\n .modal-content {\n .box-shadow(0 5px 15px rgba(0,0,0,.5));\n }\n\n // Modal sizes\n .modal-sm { width: @modal-sm; }\n}\n\n@media (min-width: @screen-md-min) {\n .modal-lg { width: @modal-lg; }\n}\n","//\n// Tooltips\n// --------------------------------------------------\n\n\n// Base class\n.tooltip {\n position: absolute;\n z-index: @zindex-tooltip;\n display: block;\n // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n .reset-text();\n font-size: @font-size-small;\n\n .opacity(0);\n\n &.in { .opacity(@tooltip-opacity); }\n &.top { margin-top: -3px; padding: @tooltip-arrow-width 0; }\n &.right { margin-left: 3px; padding: 0 @tooltip-arrow-width; }\n &.bottom { margin-top: 3px; padding: @tooltip-arrow-width 0; }\n &.left { margin-left: -3px; padding: 0 @tooltip-arrow-width; }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n max-width: @tooltip-max-width;\n padding: 3px 8px;\n color: @tooltip-color;\n text-align: center;\n background-color: @tooltip-bg;\n border-radius: @border-radius-base;\n}\n\n// Arrows\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n// Note: Deprecated .top-left, .top-right, .bottom-left, and .bottom-right as of v3.3.1\n.tooltip {\n &.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-left .tooltip-arrow {\n bottom: 0;\n right: @tooltip-arrow-width;\n margin-bottom: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-right .tooltip-arrow {\n bottom: 0;\n left: @tooltip-arrow-width;\n margin-bottom: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0;\n border-right-color: @tooltip-arrow-color;\n }\n &.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-left-color: @tooltip-arrow-color;\n }\n &.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-left .tooltip-arrow {\n top: 0;\n right: @tooltip-arrow-width;\n margin-top: -@tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-right .tooltip-arrow {\n top: 0;\n left: @tooltip-arrow-width;\n margin-top: -@tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n}\n",".reset-text() {\n font-family: @font-family-base;\n // We deliberately do NOT reset font-size.\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: @line-height-base;\n text-align: left; // Fallback for where `start` is not supported\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n}\n","//\n// Popovers\n// --------------------------------------------------\n\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: @zindex-popover;\n display: none;\n max-width: @popover-max-width;\n padding: 1px;\n // Our parent element can be arbitrary since popovers are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n .reset-text();\n font-size: @font-size-base;\n\n background-color: @popover-bg;\n background-clip: padding-box;\n border: 1px solid @popover-fallback-border-color;\n border: 1px solid @popover-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 5px 10px rgba(0,0,0,.2));\n\n // Offset the popover to account for the popover arrow\n &.top { margin-top: -@popover-arrow-width; }\n &.right { margin-left: @popover-arrow-width; }\n &.bottom { margin-top: @popover-arrow-width; }\n &.left { margin-left: -@popover-arrow-width; }\n}\n\n.popover-title {\n margin: 0; // reset heading margin\n padding: 8px 14px;\n font-size: @font-size-base;\n background-color: @popover-title-bg;\n border-bottom: 1px solid darken(@popover-title-bg, 5%);\n border-radius: (@border-radius-large - 1) (@border-radius-large - 1) 0 0;\n}\n\n.popover-content {\n padding: 9px 14px;\n}\n\n// Arrows\n//\n// .arrow is outer, .arrow:after is inner\n\n.popover > .arrow {\n &,\n &:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n }\n}\n.popover > .arrow {\n border-width: @popover-arrow-outer-width;\n}\n.popover > .arrow:after {\n border-width: @popover-arrow-width;\n content: \"\";\n}\n\n.popover {\n &.top > .arrow {\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-bottom-width: 0;\n border-top-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-top-color: @popover-arrow-outer-color;\n bottom: -@popover-arrow-outer-width;\n &:after {\n content: \" \";\n bottom: 1px;\n margin-left: -@popover-arrow-width;\n border-bottom-width: 0;\n border-top-color: @popover-arrow-color;\n }\n }\n &.right > .arrow {\n top: 50%;\n left: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-left-width: 0;\n border-right-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-right-color: @popover-arrow-outer-color;\n &:after {\n content: \" \";\n left: 1px;\n bottom: -@popover-arrow-width;\n border-left-width: 0;\n border-right-color: @popover-arrow-color;\n }\n }\n &.bottom > .arrow {\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-top-width: 0;\n border-bottom-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-bottom-color: @popover-arrow-outer-color;\n top: -@popover-arrow-outer-width;\n &:after {\n content: \" \";\n top: 1px;\n margin-left: -@popover-arrow-width;\n border-top-width: 0;\n border-bottom-color: @popover-arrow-color;\n }\n }\n\n &.left > .arrow {\n top: 50%;\n right: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-right-width: 0;\n border-left-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-left-color: @popover-arrow-outer-color;\n &:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: @popover-arrow-color;\n bottom: -@popover-arrow-width;\n }\n }\n}\n","//\n// Carousel\n// --------------------------------------------------\n\n\n// Wrapper for the slide container and indicators\n.carousel {\n position: relative;\n}\n\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%;\n\n > .item {\n display: none;\n position: relative;\n .transition(.6s ease-in-out left);\n\n // Account for jankitude on images\n > img,\n > a > img {\n &:extend(.img-responsive);\n line-height: 1;\n }\n\n // WebKit CSS3 transforms for supported devices\n @media all and (transform-3d), (-webkit-transform-3d) {\n .transition-transform(~'0.6s ease-in-out');\n .backface-visibility(~'hidden');\n .perspective(1000px);\n\n &.next,\n &.active.right {\n .translate3d(100%, 0, 0);\n left: 0;\n }\n &.prev,\n &.active.left {\n .translate3d(-100%, 0, 0);\n left: 0;\n }\n &.next.left,\n &.prev.right,\n &.active {\n .translate3d(0, 0, 0);\n left: 0;\n }\n }\n }\n\n > .active,\n > .next,\n > .prev {\n display: block;\n }\n\n > .active {\n left: 0;\n }\n\n > .next,\n > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n }\n\n > .next {\n left: 100%;\n }\n > .prev {\n left: -100%;\n }\n > .next.left,\n > .prev.right {\n left: 0;\n }\n\n > .active.left {\n left: -100%;\n }\n > .active.right {\n left: 100%;\n }\n\n}\n\n// Left/right controls for nav\n// ---------------------------\n\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: @carousel-control-width;\n .opacity(@carousel-control-opacity);\n font-size: @carousel-control-font-size;\n color: @carousel-control-color;\n text-align: center;\n text-shadow: @carousel-text-shadow;\n background-color: rgba(0, 0, 0, 0); // Fix IE9 click-thru bug\n // We can't have this transition here because WebKit cancels the carousel\n // animation if you trip this while in the middle of another animation.\n\n // Set gradients for backgrounds\n &.left {\n #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));\n }\n &.right {\n left: auto;\n right: 0;\n #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));\n }\n\n // Hover/focus state\n &:hover,\n &:focus {\n outline: 0;\n color: @carousel-control-color;\n text-decoration: none;\n .opacity(.9);\n }\n\n // Toggles\n .icon-prev,\n .icon-next,\n .glyphicon-chevron-left,\n .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n margin-top: -10px;\n z-index: 5;\n display: inline-block;\n }\n .icon-prev,\n .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n }\n .icon-next,\n .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n }\n .icon-prev,\n .icon-next {\n width: 20px;\n height: 20px;\n line-height: 1;\n font-family: serif;\n }\n\n\n .icon-prev {\n &:before {\n content: '\\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)\n }\n }\n .icon-next {\n &:before {\n content: '\\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)\n }\n }\n}\n\n// Optional indicator pips\n//\n// Add an unordered list with the following class and add a list item for each\n// slide your carousel holds.\n\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center;\n\n li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid @carousel-indicator-border-color;\n border-radius: 10px;\n cursor: pointer;\n\n // IE8-9 hack for event handling\n //\n // Internet Explorer 8-9 does not support clicks on elements without a set\n // `background-color`. We cannot use `filter` since that's not viewed as a\n // background color by the browser. Thus, a hack is needed.\n // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Internet_Explorer\n //\n // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we\n // set alpha transparency for the best results possible.\n background-color: #000 \\9; // IE8\n background-color: rgba(0,0,0,0); // IE9\n }\n .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: @carousel-indicator-active-bg;\n }\n}\n\n// Optional captions\n// -----------------------------\n// Hidden by default for smaller viewports\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: @carousel-caption-color;\n text-align: center;\n text-shadow: @carousel-text-shadow;\n & .btn {\n text-shadow: none; // No shadow for button elements in carousel-caption\n }\n}\n\n\n// Scale up controls for tablets and up\n@media screen and (min-width: @screen-sm-min) {\n\n // Scale up the controls a smidge\n .carousel-control {\n .glyphicon-chevron-left,\n .glyphicon-chevron-right,\n .icon-prev,\n .icon-next {\n width: (@carousel-control-font-size * 1.5);\n height: (@carousel-control-font-size * 1.5);\n margin-top: (@carousel-control-font-size / -2);\n font-size: (@carousel-control-font-size * 1.5);\n }\n .glyphicon-chevron-left,\n .icon-prev {\n margin-left: (@carousel-control-font-size / -2);\n }\n .glyphicon-chevron-right,\n .icon-next {\n margin-right: (@carousel-control-font-size / -2);\n }\n }\n\n // Show and left align the captions\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px;\n }\n\n // Move up the indicators\n .carousel-indicators {\n bottom: 20px;\n }\n}\n","// Clearfix\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n// contenteditable attribute is included anywhere else in the document.\n// Otherwise it causes space to appear at the top and bottom of elements\n// that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n// `:before` to contain the top-margins of child elements.\n//\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n\n.clearfix() {\n &:before,\n &:after {\n content: \" \"; // 1\n display: table; // 2\n }\n &:after {\n clear: both;\n }\n}\n","// Center-align a block level element\n\n.center-block() {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n","// CSS image replacement\n//\n// Heads up! v3 launched with only `.hide-text()`, but per our pattern for\n// mixins being reused as classes with the same name, this doesn't hold up. As\n// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`.\n//\n// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757\n\n// Deprecated as of v3.0.1 (has been removed in v4)\n.hide-text() {\n font: ~\"0/0\" a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n\n// New mixin to use as of v3.0.1\n.text-hide() {\n .hide-text();\n}\n","//\n// Responsive: Utility classes\n// --------------------------------------------------\n\n\n// IE10 in Windows (Phone) 8\n//\n// Support for responsive views via media queries is kind of borked in IE10, for\n// Surface/desktop in split view and for Windows Phone 8. This particular fix\n// must be accompanied by a snippet of JavaScript to sniff the user agent and\n// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at\n// our Getting Started page for more information on this bug.\n//\n// For more information, see the following:\n//\n// Issue: https://github.com/twbs/bootstrap/issues/10497\n// Docs: http://getbootstrap.com/getting-started/#support-ie10-width\n// Source: http://timkadlec.com/2013/01/windows-phone-8-and-device-width/\n// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/\n\n@-ms-viewport {\n width: device-width;\n}\n\n\n// Visibility utilities\n// Note: Deprecated .visible-xs, .visible-sm, .visible-md, and .visible-lg as of v3.2.0\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n .responsive-invisibility();\n}\n\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n\n.visible-xs {\n @media (max-width: @screen-xs-max) {\n .responsive-visibility();\n }\n}\n.visible-xs-block {\n @media (max-width: @screen-xs-max) {\n display: block !important;\n }\n}\n.visible-xs-inline {\n @media (max-width: @screen-xs-max) {\n display: inline !important;\n }\n}\n.visible-xs-inline-block {\n @media (max-width: @screen-xs-max) {\n display: inline-block !important;\n }\n}\n\n.visible-sm {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-visibility();\n }\n}\n.visible-sm-block {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: block !important;\n }\n}\n.visible-sm-inline {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: inline !important;\n }\n}\n.visible-sm-inline-block {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: inline-block !important;\n }\n}\n\n.visible-md {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-visibility();\n }\n}\n.visible-md-block {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: block !important;\n }\n}\n.visible-md-inline {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: inline !important;\n }\n}\n.visible-md-inline-block {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: inline-block !important;\n }\n}\n\n.visible-lg {\n @media (min-width: @screen-lg-min) {\n .responsive-visibility();\n }\n}\n.visible-lg-block {\n @media (min-width: @screen-lg-min) {\n display: block !important;\n }\n}\n.visible-lg-inline {\n @media (min-width: @screen-lg-min) {\n display: inline !important;\n }\n}\n.visible-lg-inline-block {\n @media (min-width: @screen-lg-min) {\n display: inline-block !important;\n }\n}\n\n.hidden-xs {\n @media (max-width: @screen-xs-max) {\n .responsive-invisibility();\n }\n}\n.hidden-sm {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-invisibility();\n }\n}\n.hidden-md {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-invisibility();\n }\n}\n.hidden-lg {\n @media (min-width: @screen-lg-min) {\n .responsive-invisibility();\n }\n}\n\n\n// Print utilities\n//\n// Media queries are placed on the inside to be mixin-friendly.\n\n// Note: Deprecated .visible-print as of v3.2.0\n.visible-print {\n .responsive-invisibility();\n\n @media print {\n .responsive-visibility();\n }\n}\n.visible-print-block {\n display: none !important;\n\n @media print {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n\n @media print {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n\n @media print {\n display: inline-block !important;\n }\n}\n\n.hidden-print {\n @media print {\n .responsive-invisibility();\n }\n}\n","// Responsive utilities\n\n//\n// More easily include all the states for responsive-utilities.less.\n.responsive-visibility() {\n display: block !important;\n table& { display: table !important; }\n tr& { display: table-row !important; }\n th&,\n td& { display: table-cell !important; }\n}\n\n.responsive-invisibility() {\n display: none !important;\n}\n"]} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/font-awesome.css b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/font-awesome.css new file mode 100644 index 000000000..ee906a819 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/font-awesome.css @@ -0,0 +1,2337 @@ +/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */ +/* FONT PATH + * -------------------------- */ +@font-face { + font-family: 'FontAwesome'; + src: url('../fonts/fontawesome-webfont.eot?v=4.7.0'); + src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg'); + font-weight: normal; + font-style: normal; +} +.fa { + display: inline-block; + font: normal normal normal 14px/1 FontAwesome; + font-size: inherit; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +/* makes the font 33% larger relative to the icon container */ +.fa-lg { + font-size: 1.33333333em; + line-height: 0.75em; + vertical-align: -15%; +} +.fa-2x { + font-size: 2em; +} +.fa-3x { + font-size: 3em; +} +.fa-4x { + font-size: 4em; +} +.fa-5x { + font-size: 5em; +} +.fa-fw { + width: 1.28571429em; + text-align: center; +} +.fa-ul { + padding-left: 0; + margin-left: 2.14285714em; + list-style-type: none; +} +.fa-ul > li { + position: relative; +} +.fa-li { + position: absolute; + left: -2.14285714em; + width: 2.14285714em; + top: 0.14285714em; + text-align: center; +} +.fa-li.fa-lg { + left: -1.85714286em; +} +.fa-border { + padding: .2em .25em .15em; + border: solid 0.08em #eeeeee; + border-radius: .1em; +} +.fa-pull-left { + float: left; +} +.fa-pull-right { + float: right; +} +.fa.fa-pull-left { + margin-right: .3em; +} +.fa.fa-pull-right { + margin-left: .3em; +} +/* Deprecated as of 4.4.0 */ +.pull-right { + float: right; +} +.pull-left { + float: left; +} +.fa.pull-left { + margin-right: .3em; +} +.fa.pull-right { + margin-left: .3em; +} +.fa-spin { + -webkit-animation: fa-spin 2s infinite linear; + animation: fa-spin 2s infinite linear; +} +.fa-pulse { + -webkit-animation: fa-spin 1s infinite steps(8); + animation: fa-spin 1s infinite steps(8); +} +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +.fa-rotate-90 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"; + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); +} +.fa-rotate-180 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} +.fa-rotate-270 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; + -webkit-transform: rotate(270deg); + -ms-transform: rotate(270deg); + transform: rotate(270deg); +} +.fa-flip-horizontal { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)"; + -webkit-transform: scale(-1, 1); + -ms-transform: scale(-1, 1); + transform: scale(-1, 1); +} +.fa-flip-vertical { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; + -webkit-transform: scale(1, -1); + -ms-transform: scale(1, -1); + transform: scale(1, -1); +} +:root .fa-rotate-90, +:root .fa-rotate-180, +:root .fa-rotate-270, +:root .fa-flip-horizontal, +:root .fa-flip-vertical { + filter: none; +} +.fa-stack { + position: relative; + display: inline-block; + width: 2em; + height: 2em; + line-height: 2em; + vertical-align: middle; +} +.fa-stack-1x, +.fa-stack-2x { + position: absolute; + left: 0; + width: 100%; + text-align: center; +} +.fa-stack-1x { + line-height: inherit; +} +.fa-stack-2x { + font-size: 2em; +} +.fa-inverse { + color: #ffffff; +} +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen + readers do not read off random characters that represent icons */ +.fa-glass:before { + content: "\f000"; +} +.fa-music:before { + content: "\f001"; +} +.fa-search:before { + content: "\f002"; +} +.fa-envelope-o:before { + content: "\f003"; +} +.fa-heart:before { + content: "\f004"; +} +.fa-star:before { + content: "\f005"; +} +.fa-star-o:before { + content: "\f006"; +} +.fa-user:before { + content: "\f007"; +} +.fa-film:before { + content: "\f008"; +} +.fa-th-large:before { + content: "\f009"; +} +.fa-th:before { + content: "\f00a"; +} +.fa-th-list:before { + content: "\f00b"; +} +.fa-check:before { + content: "\f00c"; +} +.fa-remove:before, +.fa-close:before, +.fa-times:before { + content: "\f00d"; +} +.fa-search-plus:before { + content: "\f00e"; +} +.fa-search-minus:before { + content: "\f010"; +} +.fa-power-off:before { + content: "\f011"; +} +.fa-signal:before { + content: "\f012"; +} +.fa-gear:before, +.fa-cog:before { + content: "\f013"; +} +.fa-trash-o:before { + content: "\f014"; +} +.fa-home:before { + content: "\f015"; +} +.fa-file-o:before { + content: "\f016"; +} +.fa-clock-o:before { + content: "\f017"; +} +.fa-road:before { + content: "\f018"; +} +.fa-download:before { + content: "\f019"; +} +.fa-arrow-circle-o-down:before { + content: "\f01a"; +} +.fa-arrow-circle-o-up:before { + content: "\f01b"; +} +.fa-inbox:before { + content: "\f01c"; +} +.fa-play-circle-o:before { + content: "\f01d"; +} +.fa-rotate-right:before, +.fa-repeat:before { + content: "\f01e"; +} +.fa-refresh:before { + content: "\f021"; +} +.fa-list-alt:before { + content: "\f022"; +} +.fa-lock:before { + content: "\f023"; +} +.fa-flag:before { + content: "\f024"; +} +.fa-headphones:before { + content: "\f025"; +} +.fa-volume-off:before { + content: "\f026"; +} +.fa-volume-down:before { + content: "\f027"; +} +.fa-volume-up:before { + content: "\f028"; +} +.fa-qrcode:before { + content: "\f029"; +} +.fa-barcode:before { + content: "\f02a"; +} +.fa-tag:before { + content: "\f02b"; +} +.fa-tags:before { + content: "\f02c"; +} +.fa-book:before { + content: "\f02d"; +} +.fa-bookmark:before { + content: "\f02e"; +} +.fa-print:before { + content: "\f02f"; +} +.fa-camera:before { + content: "\f030"; +} +.fa-font:before { + content: "\f031"; +} +.fa-bold:before { + content: "\f032"; +} +.fa-italic:before { + content: "\f033"; +} +.fa-text-height:before { + content: "\f034"; +} +.fa-text-width:before { + content: "\f035"; +} +.fa-align-left:before { + content: "\f036"; +} +.fa-align-center:before { + content: "\f037"; +} +.fa-align-right:before { + content: "\f038"; +} +.fa-align-justify:before { + content: "\f039"; +} +.fa-list:before { + content: "\f03a"; +} +.fa-dedent:before, +.fa-outdent:before { + content: "\f03b"; +} +.fa-indent:before { + content: "\f03c"; +} +.fa-video-camera:before { + content: "\f03d"; +} +.fa-photo:before, +.fa-image:before, +.fa-picture-o:before { + content: "\f03e"; +} +.fa-pencil:before { + content: "\f040"; +} +.fa-map-marker:before { + content: "\f041"; +} +.fa-adjust:before { + content: "\f042"; +} +.fa-tint:before { + content: "\f043"; +} +.fa-edit:before, +.fa-pencil-square-o:before { + content: "\f044"; +} +.fa-share-square-o:before { + content: "\f045"; +} +.fa-check-square-o:before { + content: "\f046"; +} +.fa-arrows:before { + content: "\f047"; +} +.fa-step-backward:before { + content: "\f048"; +} +.fa-fast-backward:before { + content: "\f049"; +} +.fa-backward:before { + content: "\f04a"; +} +.fa-play:before { + content: "\f04b"; +} +.fa-pause:before { + content: "\f04c"; +} +.fa-stop:before { + content: "\f04d"; +} +.fa-forward:before { + content: "\f04e"; +} +.fa-fast-forward:before { + content: "\f050"; +} +.fa-step-forward:before { + content: "\f051"; +} +.fa-eject:before { + content: "\f052"; +} +.fa-chevron-left:before { + content: "\f053"; +} +.fa-chevron-right:before { + content: "\f054"; +} +.fa-plus-circle:before { + content: "\f055"; +} +.fa-minus-circle:before { + content: "\f056"; +} +.fa-times-circle:before { + content: "\f057"; +} +.fa-check-circle:before { + content: "\f058"; +} +.fa-question-circle:before { + content: "\f059"; +} +.fa-info-circle:before { + content: "\f05a"; +} +.fa-crosshairs:before { + content: "\f05b"; +} +.fa-times-circle-o:before { + content: "\f05c"; +} +.fa-check-circle-o:before { + content: "\f05d"; +} +.fa-ban:before { + content: "\f05e"; +} +.fa-arrow-left:before { + content: "\f060"; +} +.fa-arrow-right:before { + content: "\f061"; +} +.fa-arrow-up:before { + content: "\f062"; +} +.fa-arrow-down:before { + content: "\f063"; +} +.fa-mail-forward:before, +.fa-share:before { + content: "\f064"; +} +.fa-expand:before { + content: "\f065"; +} +.fa-compress:before { + content: "\f066"; +} +.fa-plus:before { + content: "\f067"; +} +.fa-minus:before { + content: "\f068"; +} +.fa-asterisk:before { + content: "\f069"; +} +.fa-exclamation-circle:before { + content: "\f06a"; +} +.fa-gift:before { + content: "\f06b"; +} +.fa-leaf:before { + content: "\f06c"; +} +.fa-fire:before { + content: "\f06d"; +} +.fa-eye:before { + content: "\f06e"; +} +.fa-eye-slash:before { + content: "\f070"; +} +.fa-warning:before, +.fa-exclamation-triangle:before { + content: "\f071"; +} +.fa-plane:before { + content: "\f072"; +} +.fa-calendar:before { + content: "\f073"; +} +.fa-random:before { + content: "\f074"; +} +.fa-comment:before { + content: "\f075"; +} +.fa-magnet:before { + content: "\f076"; +} +.fa-chevron-up:before { + content: "\f077"; +} +.fa-chevron-down:before { + content: "\f078"; +} +.fa-retweet:before { + content: "\f079"; +} +.fa-shopping-cart:before { + content: "\f07a"; +} +.fa-folder:before { + content: "\f07b"; +} +.fa-folder-open:before { + content: "\f07c"; +} +.fa-arrows-v:before { + content: "\f07d"; +} +.fa-arrows-h:before { + content: "\f07e"; +} +.fa-bar-chart-o:before, +.fa-bar-chart:before { + content: "\f080"; +} +.fa-twitter-square:before { + content: "\f081"; +} +.fa-facebook-square:before { + content: "\f082"; +} +.fa-camera-retro:before { + content: "\f083"; +} +.fa-key:before { + content: "\f084"; +} +.fa-gears:before, +.fa-cogs:before { + content: "\f085"; +} +.fa-comments:before { + content: "\f086"; +} +.fa-thumbs-o-up:before { + content: "\f087"; +} +.fa-thumbs-o-down:before { + content: "\f088"; +} +.fa-star-half:before { + content: "\f089"; +} +.fa-heart-o:before { + content: "\f08a"; +} +.fa-sign-out:before { + content: "\f08b"; +} +.fa-linkedin-square:before { + content: "\f08c"; +} +.fa-thumb-tack:before { + content: "\f08d"; +} +.fa-external-link:before { + content: "\f08e"; +} +.fa-sign-in:before { + content: "\f090"; +} +.fa-trophy:before { + content: "\f091"; +} +.fa-github-square:before { + content: "\f092"; +} +.fa-upload:before { + content: "\f093"; +} +.fa-lemon-o:before { + content: "\f094"; +} +.fa-phone:before { + content: "\f095"; +} +.fa-square-o:before { + content: "\f096"; +} +.fa-bookmark-o:before { + content: "\f097"; +} +.fa-phone-square:before { + content: "\f098"; +} +.fa-twitter:before { + content: "\f099"; +} +.fa-facebook-f:before, +.fa-facebook:before { + content: "\f09a"; +} +.fa-github:before { + content: "\f09b"; +} +.fa-unlock:before { + content: "\f09c"; +} +.fa-credit-card:before { + content: "\f09d"; +} +.fa-feed:before, +.fa-rss:before { + content: "\f09e"; +} +.fa-hdd-o:before { + content: "\f0a0"; +} +.fa-bullhorn:before { + content: "\f0a1"; +} +.fa-bell:before { + content: "\f0f3"; +} +.fa-certificate:before { + content: "\f0a3"; +} +.fa-hand-o-right:before { + content: "\f0a4"; +} +.fa-hand-o-left:before { + content: "\f0a5"; +} +.fa-hand-o-up:before { + content: "\f0a6"; +} +.fa-hand-o-down:before { + content: "\f0a7"; +} +.fa-arrow-circle-left:before { + content: "\f0a8"; +} +.fa-arrow-circle-right:before { + content: "\f0a9"; +} +.fa-arrow-circle-up:before { + content: "\f0aa"; +} +.fa-arrow-circle-down:before { + content: "\f0ab"; +} +.fa-globe:before { + content: "\f0ac"; +} +.fa-wrench:before { + content: "\f0ad"; +} +.fa-tasks:before { + content: "\f0ae"; +} +.fa-filter:before { + content: "\f0b0"; +} +.fa-briefcase:before { + content: "\f0b1"; +} +.fa-arrows-alt:before { + content: "\f0b2"; +} +.fa-group:before, +.fa-users:before { + content: "\f0c0"; +} +.fa-chain:before, +.fa-link:before { + content: "\f0c1"; +} +.fa-cloud:before { + content: "\f0c2"; +} +.fa-flask:before { + content: "\f0c3"; +} +.fa-cut:before, +.fa-scissors:before { + content: "\f0c4"; +} +.fa-copy:before, +.fa-files-o:before { + content: "\f0c5"; +} +.fa-paperclip:before { + content: "\f0c6"; +} +.fa-save:before, +.fa-floppy-o:before { + content: "\f0c7"; +} +.fa-square:before { + content: "\f0c8"; +} +.fa-navicon:before, +.fa-reorder:before, +.fa-bars:before { + content: "\f0c9"; +} +.fa-list-ul:before { + content: "\f0ca"; +} +.fa-list-ol:before { + content: "\f0cb"; +} +.fa-strikethrough:before { + content: "\f0cc"; +} +.fa-underline:before { + content: "\f0cd"; +} +.fa-table:before { + content: "\f0ce"; +} +.fa-magic:before { + content: "\f0d0"; +} +.fa-truck:before { + content: "\f0d1"; +} +.fa-pinterest:before { + content: "\f0d2"; +} +.fa-pinterest-square:before { + content: "\f0d3"; +} +.fa-google-plus-square:before { + content: "\f0d4"; +} +.fa-google-plus:before { + content: "\f0d5"; +} +.fa-money:before { + content: "\f0d6"; +} +.fa-caret-down:before { + content: "\f0d7"; +} +.fa-caret-up:before { + content: "\f0d8"; +} +.fa-caret-left:before { + content: "\f0d9"; +} +.fa-caret-right:before { + content: "\f0da"; +} +.fa-columns:before { + content: "\f0db"; +} +.fa-unsorted:before, +.fa-sort:before { + content: "\f0dc"; +} +.fa-sort-down:before, +.fa-sort-desc:before { + content: "\f0dd"; +} +.fa-sort-up:before, +.fa-sort-asc:before { + content: "\f0de"; +} +.fa-envelope:before { + content: "\f0e0"; +} +.fa-linkedin:before { + content: "\f0e1"; +} +.fa-rotate-left:before, +.fa-undo:before { + content: "\f0e2"; +} +.fa-legal:before, +.fa-gavel:before { + content: "\f0e3"; +} +.fa-dashboard:before, +.fa-tachometer:before { + content: "\f0e4"; +} +.fa-comment-o:before { + content: "\f0e5"; +} +.fa-comments-o:before { + content: "\f0e6"; +} +.fa-flash:before, +.fa-bolt:before { + content: "\f0e7"; +} +.fa-sitemap:before { + content: "\f0e8"; +} +.fa-umbrella:before { + content: "\f0e9"; +} +.fa-paste:before, +.fa-clipboard:before { + content: "\f0ea"; +} +.fa-lightbulb-o:before { + content: "\f0eb"; +} +.fa-exchange:before { + content: "\f0ec"; +} +.fa-cloud-download:before { + content: "\f0ed"; +} +.fa-cloud-upload:before { + content: "\f0ee"; +} +.fa-user-md:before { + content: "\f0f0"; +} +.fa-stethoscope:before { + content: "\f0f1"; +} +.fa-suitcase:before { + content: "\f0f2"; +} +.fa-bell-o:before { + content: "\f0a2"; +} +.fa-coffee:before { + content: "\f0f4"; +} +.fa-cutlery:before { + content: "\f0f5"; +} +.fa-file-text-o:before { + content: "\f0f6"; +} +.fa-building-o:before { + content: "\f0f7"; +} +.fa-hospital-o:before { + content: "\f0f8"; +} +.fa-ambulance:before { + content: "\f0f9"; +} +.fa-medkit:before { + content: "\f0fa"; +} +.fa-fighter-jet:before { + content: "\f0fb"; +} +.fa-beer:before { + content: "\f0fc"; +} +.fa-h-square:before { + content: "\f0fd"; +} +.fa-plus-square:before { + content: "\f0fe"; +} +.fa-angle-double-left:before { + content: "\f100"; +} +.fa-angle-double-right:before { + content: "\f101"; +} +.fa-angle-double-up:before { + content: "\f102"; +} +.fa-angle-double-down:before { + content: "\f103"; +} +.fa-angle-left:before { + content: "\f104"; +} +.fa-angle-right:before { + content: "\f105"; +} +.fa-angle-up:before { + content: "\f106"; +} +.fa-angle-down:before { + content: "\f107"; +} +.fa-desktop:before { + content: "\f108"; +} +.fa-laptop:before { + content: "\f109"; +} +.fa-tablet:before { + content: "\f10a"; +} +.fa-mobile-phone:before, +.fa-mobile:before { + content: "\f10b"; +} +.fa-circle-o:before { + content: "\f10c"; +} +.fa-quote-left:before { + content: "\f10d"; +} +.fa-quote-right:before { + content: "\f10e"; +} +.fa-spinner:before { + content: "\f110"; +} +.fa-circle:before { + content: "\f111"; +} +.fa-mail-reply:before, +.fa-reply:before { + content: "\f112"; +} +.fa-github-alt:before { + content: "\f113"; +} +.fa-folder-o:before { + content: "\f114"; +} +.fa-folder-open-o:before { + content: "\f115"; +} +.fa-smile-o:before { + content: "\f118"; +} +.fa-frown-o:before { + content: "\f119"; +} +.fa-meh-o:before { + content: "\f11a"; +} +.fa-gamepad:before { + content: "\f11b"; +} +.fa-keyboard-o:before { + content: "\f11c"; +} +.fa-flag-o:before { + content: "\f11d"; +} +.fa-flag-checkered:before { + content: "\f11e"; +} +.fa-terminal:before { + content: "\f120"; +} +.fa-code:before { + content: "\f121"; +} +.fa-mail-reply-all:before, +.fa-reply-all:before { + content: "\f122"; +} +.fa-star-half-empty:before, +.fa-star-half-full:before, +.fa-star-half-o:before { + content: "\f123"; +} +.fa-location-arrow:before { + content: "\f124"; +} +.fa-crop:before { + content: "\f125"; +} +.fa-code-fork:before { + content: "\f126"; +} +.fa-unlink:before, +.fa-chain-broken:before { + content: "\f127"; +} +.fa-question:before { + content: "\f128"; +} +.fa-info:before { + content: "\f129"; +} +.fa-exclamation:before { + content: "\f12a"; +} +.fa-superscript:before { + content: "\f12b"; +} +.fa-subscript:before { + content: "\f12c"; +} +.fa-eraser:before { + content: "\f12d"; +} +.fa-puzzle-piece:before { + content: "\f12e"; +} +.fa-microphone:before { + content: "\f130"; +} +.fa-microphone-slash:before { + content: "\f131"; +} +.fa-shield:before { + content: "\f132"; +} +.fa-calendar-o:before { + content: "\f133"; +} +.fa-fire-extinguisher:before { + content: "\f134"; +} +.fa-rocket:before { + content: "\f135"; +} +.fa-maxcdn:before { + content: "\f136"; +} +.fa-chevron-circle-left:before { + content: "\f137"; +} +.fa-chevron-circle-right:before { + content: "\f138"; +} +.fa-chevron-circle-up:before { + content: "\f139"; +} +.fa-chevron-circle-down:before { + content: "\f13a"; +} +.fa-html5:before { + content: "\f13b"; +} +.fa-css3:before { + content: "\f13c"; +} +.fa-anchor:before { + content: "\f13d"; +} +.fa-unlock-alt:before { + content: "\f13e"; +} +.fa-bullseye:before { + content: "\f140"; +} +.fa-ellipsis-h:before { + content: "\f141"; +} +.fa-ellipsis-v:before { + content: "\f142"; +} +.fa-rss-square:before { + content: "\f143"; +} +.fa-play-circle:before { + content: "\f144"; +} +.fa-ticket:before { + content: "\f145"; +} +.fa-minus-square:before { + content: "\f146"; +} +.fa-minus-square-o:before { + content: "\f147"; +} +.fa-level-up:before { + content: "\f148"; +} +.fa-level-down:before { + content: "\f149"; +} +.fa-check-square:before { + content: "\f14a"; +} +.fa-pencil-square:before { + content: "\f14b"; +} +.fa-external-link-square:before { + content: "\f14c"; +} +.fa-share-square:before { + content: "\f14d"; +} +.fa-compass:before { + content: "\f14e"; +} +.fa-toggle-down:before, +.fa-caret-square-o-down:before { + content: "\f150"; +} +.fa-toggle-up:before, +.fa-caret-square-o-up:before { + content: "\f151"; +} +.fa-toggle-right:before, +.fa-caret-square-o-right:before { + content: "\f152"; +} +.fa-euro:before, +.fa-eur:before { + content: "\f153"; +} +.fa-gbp:before { + content: "\f154"; +} +.fa-dollar:before, +.fa-usd:before { + content: "\f155"; +} +.fa-rupee:before, +.fa-inr:before { + content: "\f156"; +} +.fa-cny:before, +.fa-rmb:before, +.fa-yen:before, +.fa-jpy:before { + content: "\f157"; +} +.fa-ruble:before, +.fa-rouble:before, +.fa-rub:before { + content: "\f158"; +} +.fa-won:before, +.fa-krw:before { + content: "\f159"; +} +.fa-bitcoin:before, +.fa-btc:before { + content: "\f15a"; +} +.fa-file:before { + content: "\f15b"; +} +.fa-file-text:before { + content: "\f15c"; +} +.fa-sort-alpha-asc:before { + content: "\f15d"; +} +.fa-sort-alpha-desc:before { + content: "\f15e"; +} +.fa-sort-amount-asc:before { + content: "\f160"; +} +.fa-sort-amount-desc:before { + content: "\f161"; +} +.fa-sort-numeric-asc:before { + content: "\f162"; +} +.fa-sort-numeric-desc:before { + content: "\f163"; +} +.fa-thumbs-up:before { + content: "\f164"; +} +.fa-thumbs-down:before { + content: "\f165"; +} +.fa-youtube-square:before { + content: "\f166"; +} +.fa-youtube:before { + content: "\f167"; +} +.fa-xing:before { + content: "\f168"; +} +.fa-xing-square:before { + content: "\f169"; +} +.fa-youtube-play:before { + content: "\f16a"; +} +.fa-dropbox:before { + content: "\f16b"; +} +.fa-stack-overflow:before { + content: "\f16c"; +} +.fa-instagram:before { + content: "\f16d"; +} +.fa-flickr:before { + content: "\f16e"; +} +.fa-adn:before { + content: "\f170"; +} +.fa-bitbucket:before { + content: "\f171"; +} +.fa-bitbucket-square:before { + content: "\f172"; +} +.fa-tumblr:before { + content: "\f173"; +} +.fa-tumblr-square:before { + content: "\f174"; +} +.fa-long-arrow-down:before { + content: "\f175"; +} +.fa-long-arrow-up:before { + content: "\f176"; +} +.fa-long-arrow-left:before { + content: "\f177"; +} +.fa-long-arrow-right:before { + content: "\f178"; +} +.fa-apple:before { + content: "\f179"; +} +.fa-windows:before { + content: "\f17a"; +} +.fa-android:before { + content: "\f17b"; +} +.fa-linux:before { + content: "\f17c"; +} +.fa-dribbble:before { + content: "\f17d"; +} +.fa-skype:before { + content: "\f17e"; +} +.fa-foursquare:before { + content: "\f180"; +} +.fa-trello:before { + content: "\f181"; +} +.fa-female:before { + content: "\f182"; +} +.fa-male:before { + content: "\f183"; +} +.fa-gittip:before, +.fa-gratipay:before { + content: "\f184"; +} +.fa-sun-o:before { + content: "\f185"; +} +.fa-moon-o:before { + content: "\f186"; +} +.fa-archive:before { + content: "\f187"; +} +.fa-bug:before { + content: "\f188"; +} +.fa-vk:before { + content: "\f189"; +} +.fa-weibo:before { + content: "\f18a"; +} +.fa-renren:before { + content: "\f18b"; +} +.fa-pagelines:before { + content: "\f18c"; +} +.fa-stack-exchange:before { + content: "\f18d"; +} +.fa-arrow-circle-o-right:before { + content: "\f18e"; +} +.fa-arrow-circle-o-left:before { + content: "\f190"; +} +.fa-toggle-left:before, +.fa-caret-square-o-left:before { + content: "\f191"; +} +.fa-dot-circle-o:before { + content: "\f192"; +} +.fa-wheelchair:before { + content: "\f193"; +} +.fa-vimeo-square:before { + content: "\f194"; +} +.fa-turkish-lira:before, +.fa-try:before { + content: "\f195"; +} +.fa-plus-square-o:before { + content: "\f196"; +} +.fa-space-shuttle:before { + content: "\f197"; +} +.fa-slack:before { + content: "\f198"; +} +.fa-envelope-square:before { + content: "\f199"; +} +.fa-wordpress:before { + content: "\f19a"; +} +.fa-openid:before { + content: "\f19b"; +} +.fa-institution:before, +.fa-bank:before, +.fa-university:before { + content: "\f19c"; +} +.fa-mortar-board:before, +.fa-graduation-cap:before { + content: "\f19d"; +} +.fa-yahoo:before { + content: "\f19e"; +} +.fa-google:before { + content: "\f1a0"; +} +.fa-reddit:before { + content: "\f1a1"; +} +.fa-reddit-square:before { + content: "\f1a2"; +} +.fa-stumbleupon-circle:before { + content: "\f1a3"; +} +.fa-stumbleupon:before { + content: "\f1a4"; +} +.fa-delicious:before { + content: "\f1a5"; +} +.fa-digg:before { + content: "\f1a6"; +} +.fa-pied-piper-pp:before { + content: "\f1a7"; +} +.fa-pied-piper-alt:before { + content: "\f1a8"; +} +.fa-drupal:before { + content: "\f1a9"; +} +.fa-joomla:before { + content: "\f1aa"; +} +.fa-language:before { + content: "\f1ab"; +} +.fa-fax:before { + content: "\f1ac"; +} +.fa-building:before { + content: "\f1ad"; +} +.fa-child:before { + content: "\f1ae"; +} +.fa-paw:before { + content: "\f1b0"; +} +.fa-spoon:before { + content: "\f1b1"; +} +.fa-cube:before { + content: "\f1b2"; +} +.fa-cubes:before { + content: "\f1b3"; +} +.fa-behance:before { + content: "\f1b4"; +} +.fa-behance-square:before { + content: "\f1b5"; +} +.fa-steam:before { + content: "\f1b6"; +} +.fa-steam-square:before { + content: "\f1b7"; +} +.fa-recycle:before { + content: "\f1b8"; +} +.fa-automobile:before, +.fa-car:before { + content: "\f1b9"; +} +.fa-cab:before, +.fa-taxi:before { + content: "\f1ba"; +} +.fa-tree:before { + content: "\f1bb"; +} +.fa-spotify:before { + content: "\f1bc"; +} +.fa-deviantart:before { + content: "\f1bd"; +} +.fa-soundcloud:before { + content: "\f1be"; +} +.fa-database:before { + content: "\f1c0"; +} +.fa-file-pdf-o:before { + content: "\f1c1"; +} +.fa-file-word-o:before { + content: "\f1c2"; +} +.fa-file-excel-o:before { + content: "\f1c3"; +} +.fa-file-powerpoint-o:before { + content: "\f1c4"; +} +.fa-file-photo-o:before, +.fa-file-picture-o:before, +.fa-file-image-o:before { + content: "\f1c5"; +} +.fa-file-zip-o:before, +.fa-file-archive-o:before { + content: "\f1c6"; +} +.fa-file-sound-o:before, +.fa-file-audio-o:before { + content: "\f1c7"; +} +.fa-file-movie-o:before, +.fa-file-video-o:before { + content: "\f1c8"; +} +.fa-file-code-o:before { + content: "\f1c9"; +} +.fa-vine:before { + content: "\f1ca"; +} +.fa-codepen:before { + content: "\f1cb"; +} +.fa-jsfiddle:before { + content: "\f1cc"; +} +.fa-life-bouy:before, +.fa-life-buoy:before, +.fa-life-saver:before, +.fa-support:before, +.fa-life-ring:before { + content: "\f1cd"; +} +.fa-circle-o-notch:before { + content: "\f1ce"; +} +.fa-ra:before, +.fa-resistance:before, +.fa-rebel:before { + content: "\f1d0"; +} +.fa-ge:before, +.fa-empire:before { + content: "\f1d1"; +} +.fa-git-square:before { + content: "\f1d2"; +} +.fa-git:before { + content: "\f1d3"; +} +.fa-y-combinator-square:before, +.fa-yc-square:before, +.fa-hacker-news:before { + content: "\f1d4"; +} +.fa-tencent-weibo:before { + content: "\f1d5"; +} +.fa-qq:before { + content: "\f1d6"; +} +.fa-wechat:before, +.fa-weixin:before { + content: "\f1d7"; +} +.fa-send:before, +.fa-paper-plane:before { + content: "\f1d8"; +} +.fa-send-o:before, +.fa-paper-plane-o:before { + content: "\f1d9"; +} +.fa-history:before { + content: "\f1da"; +} +.fa-circle-thin:before { + content: "\f1db"; +} +.fa-header:before { + content: "\f1dc"; +} +.fa-paragraph:before { + content: "\f1dd"; +} +.fa-sliders:before { + content: "\f1de"; +} +.fa-share-alt:before { + content: "\f1e0"; +} +.fa-share-alt-square:before { + content: "\f1e1"; +} +.fa-bomb:before { + content: "\f1e2"; +} +.fa-soccer-ball-o:before, +.fa-futbol-o:before { + content: "\f1e3"; +} +.fa-tty:before { + content: "\f1e4"; +} +.fa-binoculars:before { + content: "\f1e5"; +} +.fa-plug:before { + content: "\f1e6"; +} +.fa-slideshare:before { + content: "\f1e7"; +} +.fa-twitch:before { + content: "\f1e8"; +} +.fa-yelp:before { + content: "\f1e9"; +} +.fa-newspaper-o:before { + content: "\f1ea"; +} +.fa-wifi:before { + content: "\f1eb"; +} +.fa-calculator:before { + content: "\f1ec"; +} +.fa-paypal:before { + content: "\f1ed"; +} +.fa-google-wallet:before { + content: "\f1ee"; +} +.fa-cc-visa:before { + content: "\f1f0"; +} +.fa-cc-mastercard:before { + content: "\f1f1"; +} +.fa-cc-discover:before { + content: "\f1f2"; +} +.fa-cc-amex:before { + content: "\f1f3"; +} +.fa-cc-paypal:before { + content: "\f1f4"; +} +.fa-cc-stripe:before { + content: "\f1f5"; +} +.fa-bell-slash:before { + content: "\f1f6"; +} +.fa-bell-slash-o:before { + content: "\f1f7"; +} +.fa-trash:before { + content: "\f1f8"; +} +.fa-copyright:before { + content: "\f1f9"; +} +.fa-at:before { + content: "\f1fa"; +} +.fa-eyedropper:before { + content: "\f1fb"; +} +.fa-paint-brush:before { + content: "\f1fc"; +} +.fa-birthday-cake:before { + content: "\f1fd"; +} +.fa-area-chart:before { + content: "\f1fe"; +} +.fa-pie-chart:before { + content: "\f200"; +} +.fa-line-chart:before { + content: "\f201"; +} +.fa-lastfm:before { + content: "\f202"; +} +.fa-lastfm-square:before { + content: "\f203"; +} +.fa-toggle-off:before { + content: "\f204"; +} +.fa-toggle-on:before { + content: "\f205"; +} +.fa-bicycle:before { + content: "\f206"; +} +.fa-bus:before { + content: "\f207"; +} +.fa-ioxhost:before { + content: "\f208"; +} +.fa-angellist:before { + content: "\f209"; +} +.fa-cc:before { + content: "\f20a"; +} +.fa-shekel:before, +.fa-sheqel:before, +.fa-ils:before { + content: "\f20b"; +} +.fa-meanpath:before { + content: "\f20c"; +} +.fa-buysellads:before { + content: "\f20d"; +} +.fa-connectdevelop:before { + content: "\f20e"; +} +.fa-dashcube:before { + content: "\f210"; +} +.fa-forumbee:before { + content: "\f211"; +} +.fa-leanpub:before { + content: "\f212"; +} +.fa-sellsy:before { + content: "\f213"; +} +.fa-shirtsinbulk:before { + content: "\f214"; +} +.fa-simplybuilt:before { + content: "\f215"; +} +.fa-skyatlas:before { + content: "\f216"; +} +.fa-cart-plus:before { + content: "\f217"; +} +.fa-cart-arrow-down:before { + content: "\f218"; +} +.fa-diamond:before { + content: "\f219"; +} +.fa-ship:before { + content: "\f21a"; +} +.fa-user-secret:before { + content: "\f21b"; +} +.fa-motorcycle:before { + content: "\f21c"; +} +.fa-street-view:before { + content: "\f21d"; +} +.fa-heartbeat:before { + content: "\f21e"; +} +.fa-venus:before { + content: "\f221"; +} +.fa-mars:before { + content: "\f222"; +} +.fa-mercury:before { + content: "\f223"; +} +.fa-intersex:before, +.fa-transgender:before { + content: "\f224"; +} +.fa-transgender-alt:before { + content: "\f225"; +} +.fa-venus-double:before { + content: "\f226"; +} +.fa-mars-double:before { + content: "\f227"; +} +.fa-venus-mars:before { + content: "\f228"; +} +.fa-mars-stroke:before { + content: "\f229"; +} +.fa-mars-stroke-v:before { + content: "\f22a"; +} +.fa-mars-stroke-h:before { + content: "\f22b"; +} +.fa-neuter:before { + content: "\f22c"; +} +.fa-genderless:before { + content: "\f22d"; +} +.fa-facebook-official:before { + content: "\f230"; +} +.fa-pinterest-p:before { + content: "\f231"; +} +.fa-whatsapp:before { + content: "\f232"; +} +.fa-server:before { + content: "\f233"; +} +.fa-user-plus:before { + content: "\f234"; +} +.fa-user-times:before { + content: "\f235"; +} +.fa-hotel:before, +.fa-bed:before { + content: "\f236"; +} +.fa-viacoin:before { + content: "\f237"; +} +.fa-train:before { + content: "\f238"; +} +.fa-subway:before { + content: "\f239"; +} +.fa-medium:before { + content: "\f23a"; +} +.fa-yc:before, +.fa-y-combinator:before { + content: "\f23b"; +} +.fa-optin-monster:before { + content: "\f23c"; +} +.fa-opencart:before { + content: "\f23d"; +} +.fa-expeditedssl:before { + content: "\f23e"; +} +.fa-battery-4:before, +.fa-battery:before, +.fa-battery-full:before { + content: "\f240"; +} +.fa-battery-3:before, +.fa-battery-three-quarters:before { + content: "\f241"; +} +.fa-battery-2:before, +.fa-battery-half:before { + content: "\f242"; +} +.fa-battery-1:before, +.fa-battery-quarter:before { + content: "\f243"; +} +.fa-battery-0:before, +.fa-battery-empty:before { + content: "\f244"; +} +.fa-mouse-pointer:before { + content: "\f245"; +} +.fa-i-cursor:before { + content: "\f246"; +} +.fa-object-group:before { + content: "\f247"; +} +.fa-object-ungroup:before { + content: "\f248"; +} +.fa-sticky-note:before { + content: "\f249"; +} +.fa-sticky-note-o:before { + content: "\f24a"; +} +.fa-cc-jcb:before { + content: "\f24b"; +} +.fa-cc-diners-club:before { + content: "\f24c"; +} +.fa-clone:before { + content: "\f24d"; +} +.fa-balance-scale:before { + content: "\f24e"; +} +.fa-hourglass-o:before { + content: "\f250"; +} +.fa-hourglass-1:before, +.fa-hourglass-start:before { + content: "\f251"; +} +.fa-hourglass-2:before, +.fa-hourglass-half:before { + content: "\f252"; +} +.fa-hourglass-3:before, +.fa-hourglass-end:before { + content: "\f253"; +} +.fa-hourglass:before { + content: "\f254"; +} +.fa-hand-grab-o:before, +.fa-hand-rock-o:before { + content: "\f255"; +} +.fa-hand-stop-o:before, +.fa-hand-paper-o:before { + content: "\f256"; +} +.fa-hand-scissors-o:before { + content: "\f257"; +} +.fa-hand-lizard-o:before { + content: "\f258"; +} +.fa-hand-spock-o:before { + content: "\f259"; +} +.fa-hand-pointer-o:before { + content: "\f25a"; +} +.fa-hand-peace-o:before { + content: "\f25b"; +} +.fa-trademark:before { + content: "\f25c"; +} +.fa-registered:before { + content: "\f25d"; +} +.fa-creative-commons:before { + content: "\f25e"; +} +.fa-gg:before { + content: "\f260"; +} +.fa-gg-circle:before { + content: "\f261"; +} +.fa-tripadvisor:before { + content: "\f262"; +} +.fa-odnoklassniki:before { + content: "\f263"; +} +.fa-odnoklassniki-square:before { + content: "\f264"; +} +.fa-get-pocket:before { + content: "\f265"; +} +.fa-wikipedia-w:before { + content: "\f266"; +} +.fa-safari:before { + content: "\f267"; +} +.fa-chrome:before { + content: "\f268"; +} +.fa-firefox:before { + content: "\f269"; +} +.fa-opera:before { + content: "\f26a"; +} +.fa-internet-explorer:before { + content: "\f26b"; +} +.fa-tv:before, +.fa-television:before { + content: "\f26c"; +} +.fa-contao:before { + content: "\f26d"; +} +.fa-500px:before { + content: "\f26e"; +} +.fa-amazon:before { + content: "\f270"; +} +.fa-calendar-plus-o:before { + content: "\f271"; +} +.fa-calendar-minus-o:before { + content: "\f272"; +} +.fa-calendar-times-o:before { + content: "\f273"; +} +.fa-calendar-check-o:before { + content: "\f274"; +} +.fa-industry:before { + content: "\f275"; +} +.fa-map-pin:before { + content: "\f276"; +} +.fa-map-signs:before { + content: "\f277"; +} +.fa-map-o:before { + content: "\f278"; +} +.fa-map:before { + content: "\f279"; +} +.fa-commenting:before { + content: "\f27a"; +} +.fa-commenting-o:before { + content: "\f27b"; +} +.fa-houzz:before { + content: "\f27c"; +} +.fa-vimeo:before { + content: "\f27d"; +} +.fa-black-tie:before { + content: "\f27e"; +} +.fa-fonticons:before { + content: "\f280"; +} +.fa-reddit-alien:before { + content: "\f281"; +} +.fa-edge:before { + content: "\f282"; +} +.fa-credit-card-alt:before { + content: "\f283"; +} +.fa-codiepie:before { + content: "\f284"; +} +.fa-modx:before { + content: "\f285"; +} +.fa-fort-awesome:before { + content: "\f286"; +} +.fa-usb:before { + content: "\f287"; +} +.fa-product-hunt:before { + content: "\f288"; +} +.fa-mixcloud:before { + content: "\f289"; +} +.fa-scribd:before { + content: "\f28a"; +} +.fa-pause-circle:before { + content: "\f28b"; +} +.fa-pause-circle-o:before { + content: "\f28c"; +} +.fa-stop-circle:before { + content: "\f28d"; +} +.fa-stop-circle-o:before { + content: "\f28e"; +} +.fa-shopping-bag:before { + content: "\f290"; +} +.fa-shopping-basket:before { + content: "\f291"; +} +.fa-hashtag:before { + content: "\f292"; +} +.fa-bluetooth:before { + content: "\f293"; +} +.fa-bluetooth-b:before { + content: "\f294"; +} +.fa-percent:before { + content: "\f295"; +} +.fa-gitlab:before { + content: "\f296"; +} +.fa-wpbeginner:before { + content: "\f297"; +} +.fa-wpforms:before { + content: "\f298"; +} +.fa-envira:before { + content: "\f299"; +} +.fa-universal-access:before { + content: "\f29a"; +} +.fa-wheelchair-alt:before { + content: "\f29b"; +} +.fa-question-circle-o:before { + content: "\f29c"; +} +.fa-blind:before { + content: "\f29d"; +} +.fa-audio-description:before { + content: "\f29e"; +} +.fa-volume-control-phone:before { + content: "\f2a0"; +} +.fa-braille:before { + content: "\f2a1"; +} +.fa-assistive-listening-systems:before { + content: "\f2a2"; +} +.fa-asl-interpreting:before, +.fa-american-sign-language-interpreting:before { + content: "\f2a3"; +} +.fa-deafness:before, +.fa-hard-of-hearing:before, +.fa-deaf:before { + content: "\f2a4"; +} +.fa-glide:before { + content: "\f2a5"; +} +.fa-glide-g:before { + content: "\f2a6"; +} +.fa-signing:before, +.fa-sign-language:before { + content: "\f2a7"; +} +.fa-low-vision:before { + content: "\f2a8"; +} +.fa-viadeo:before { + content: "\f2a9"; +} +.fa-viadeo-square:before { + content: "\f2aa"; +} +.fa-snapchat:before { + content: "\f2ab"; +} +.fa-snapchat-ghost:before { + content: "\f2ac"; +} +.fa-snapchat-square:before { + content: "\f2ad"; +} +.fa-pied-piper:before { + content: "\f2ae"; +} +.fa-first-order:before { + content: "\f2b0"; +} +.fa-yoast:before { + content: "\f2b1"; +} +.fa-themeisle:before { + content: "\f2b2"; +} +.fa-google-plus-circle:before, +.fa-google-plus-official:before { + content: "\f2b3"; +} +.fa-fa:before, +.fa-font-awesome:before { + content: "\f2b4"; +} +.fa-handshake-o:before { + content: "\f2b5"; +} +.fa-envelope-open:before { + content: "\f2b6"; +} +.fa-envelope-open-o:before { + content: "\f2b7"; +} +.fa-linode:before { + content: "\f2b8"; +} +.fa-address-book:before { + content: "\f2b9"; +} +.fa-address-book-o:before { + content: "\f2ba"; +} +.fa-vcard:before, +.fa-address-card:before { + content: "\f2bb"; +} +.fa-vcard-o:before, +.fa-address-card-o:before { + content: "\f2bc"; +} +.fa-user-circle:before { + content: "\f2bd"; +} +.fa-user-circle-o:before { + content: "\f2be"; +} +.fa-user-o:before { + content: "\f2c0"; +} +.fa-id-badge:before { + content: "\f2c1"; +} +.fa-drivers-license:before, +.fa-id-card:before { + content: "\f2c2"; +} +.fa-drivers-license-o:before, +.fa-id-card-o:before { + content: "\f2c3"; +} +.fa-quora:before { + content: "\f2c4"; +} +.fa-free-code-camp:before { + content: "\f2c5"; +} +.fa-telegram:before { + content: "\f2c6"; +} +.fa-thermometer-4:before, +.fa-thermometer:before, +.fa-thermometer-full:before { + content: "\f2c7"; +} +.fa-thermometer-3:before, +.fa-thermometer-three-quarters:before { + content: "\f2c8"; +} +.fa-thermometer-2:before, +.fa-thermometer-half:before { + content: "\f2c9"; +} +.fa-thermometer-1:before, +.fa-thermometer-quarter:before { + content: "\f2ca"; +} +.fa-thermometer-0:before, +.fa-thermometer-empty:before { + content: "\f2cb"; +} +.fa-shower:before { + content: "\f2cc"; +} +.fa-bathtub:before, +.fa-s15:before, +.fa-bath:before { + content: "\f2cd"; +} +.fa-podcast:before { + content: "\f2ce"; +} +.fa-window-maximize:before { + content: "\f2d0"; +} +.fa-window-minimize:before { + content: "\f2d1"; +} +.fa-window-restore:before { + content: "\f2d2"; +} +.fa-times-rectangle:before, +.fa-window-close:before { + content: "\f2d3"; +} +.fa-times-rectangle-o:before, +.fa-window-close-o:before { + content: "\f2d4"; +} +.fa-bandcamp:before { + content: "\f2d5"; +} +.fa-grav:before { + content: "\f2d6"; +} +.fa-etsy:before { + content: "\f2d7"; +} +.fa-imdb:before { + content: "\f2d8"; +} +.fa-ravelry:before { + content: "\f2d9"; +} +.fa-eercast:before { + content: "\f2da"; +} +.fa-microchip:before { + content: "\f2db"; +} +.fa-snowflake-o:before { + content: "\f2dc"; +} +.fa-superpowers:before { + content: "\f2dd"; +} +.fa-wpexplorer:before { + content: "\f2de"; +} +.fa-meetup:before { + content: "\f2e0"; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/font-awesome.min.css b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/font-awesome.min.css new file mode 100644 index 000000000..540440ce8 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/font-awesome.min.css @@ -0,0 +1,4 @@ +/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/images/TardisBankLogo_128.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/images/TardisBankLogo_128.png new file mode 100644 index 000000000..0a1e204ec Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/images/TardisBankLogo_128.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/images/TardisBankLogo_16.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/images/TardisBankLogo_16.png new file mode 100644 index 000000000..949b8801f Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/images/TardisBankLogo_16.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/images/TardisBankLogo_32.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/images/TardisBankLogo_32.png new file mode 100644 index 000000000..f94869af5 Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/images/TardisBankLogo_32.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/images/TardisBankLogo_64.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/images/TardisBankLogo_64.png new file mode 100644 index 000000000..6ff73e874 Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/images/TardisBankLogo_64.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/images/TardisBankLogo_75.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/images/TardisBankLogo_75.png new file mode 100644 index 000000000..8723437da Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/images/TardisBankLogo_75.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/images/TardisBankLogo_Shadow.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/images/TardisBankLogo_Shadow.png new file mode 100644 index 000000000..0ef3b4483 Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/images/TardisBankLogo_Shadow.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/images/TardisBankLogo_ShadowWhite.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/images/TardisBankLogo_ShadowWhite.png new file mode 100644 index 000000000..67c204e2a Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/images/TardisBankLogo_ShadowWhite.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/images/Thumbs.db b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/images/Thumbs.db new file mode 100644 index 000000000..9433c17f4 Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/images/Thumbs.db differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/images/hover.gif b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/images/hover.gif new file mode 100644 index 000000000..98fc8e993 Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/images/hover.gif differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/images/meandleo.jpg b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/images/meandleo.jpg new file mode 100644 index 000000000..c0fe08c15 Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/images/meandleo.jpg differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/images/meandleo.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/images/meandleo.png new file mode 100644 index 000000000..9fcec5860 Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/images/meandleo.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/images/seperator.gif b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/images/seperator.gif new file mode 100644 index 000000000..8f7aedf7e Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/images/seperator.gif differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/images/title_background.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/images/title_background.png new file mode 100644 index 000000000..79b8df92c Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/images/title_background.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/img/sharp_arch.jpg b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/img/sharp_arch.jpg new file mode 100644 index 000000000..28fe76681 Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/img/sharp_arch.jpg differ diff --git a/src/NorthwindSample/app/Northwind.Web/Content/Images/sharp_arch_small.gif b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/img/sharp_arch_small.gif similarity index 100% rename from src/NorthwindSample/app/Northwind.Web/Content/Images/sharp_arch_small.gif rename to Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/img/sharp_arch_small.gif diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/menu_style.css b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/menu_style.css new file mode 100644 index 000000000..912fdc683 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/menu_style.css @@ -0,0 +1,27 @@ +#menu { + background: #333; + float: left; + list-style: none; + margin: 0; + padding: 0; + width: 100%; +} +#menu li { + float: left; + margin: 0; + padding: 0; +} +#menu a { + background: #333 url("images/seperator.gif") bottom right no-repeat; + color: #ccc; + display: block; + float: left; + margin: 0; + padding: 8px 12px; + text-decoration: none; +} +#menu a:hover { + background: #2580a2 url("images/hover.gif") bottom center no-repeat; + color: #fff; + padding-bottom: 8px; +} diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/reset.css b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/reset.css new file mode 100644 index 000000000..99a021167 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/reset.css @@ -0,0 +1 @@ +html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;border:0;outline:0;font-size:100%;vertical-align:baseline;background:transparent}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}:focus{outline:0}ins{text-decoration:none}del{text-decoration:line-through}table{border-collapse:collapse;border-spacing:0} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/text.css b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/text.css new file mode 100644 index 000000000..f37d17459 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/text.css @@ -0,0 +1 @@ +body{font:13px/1.5 'Helvetica Neue',Arial,'Liberation Sans',FreeSans,sans-serif}a:focus{outline:1px dotted}hr{border:0 #ccc solid;border-top-width:1px;clear:both;height:0}h1{font-size:25px}h2{font-size:23px}h3{font-size:21px}h4{font-size:19px}h5{font-size:17px}h6{font-size:15px}ol{list-style:decimal}ul{list-style:disc}li{margin-left:30px}p,dl,hr,h1,h2,h3,h4,h5,h6,ol,ul,pre,table,address,fieldset{margin-bottom:20px} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/accordion.css b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/accordion.css new file mode 100644 index 000000000..13e57528b --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/accordion.css @@ -0,0 +1,36 @@ +/*! + * jQuery UI Accordion 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/accordion/#theming + */ +.ui-accordion .ui-accordion-header { + display: block; + cursor: pointer; + position: relative; + margin: 2px 0 0 0; + padding: .5em .5em .5em .7em; + min-height: 0; /* support: IE7 */ + font-size: 100%; +} +.ui-accordion .ui-accordion-icons { + padding-left: 2.2em; +} +.ui-accordion .ui-accordion-icons .ui-accordion-icons { + padding-left: 2.2em; +} +.ui-accordion .ui-accordion-header .ui-accordion-header-icon { + position: absolute; + left: .5em; + top: 50%; + margin-top: -8px; +} +.ui-accordion .ui-accordion-content { + padding: 1em 2.2em; + border-top: 0; + overflow: auto; +} diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/all.css b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/all.css new file mode 100644 index 000000000..0bab99138 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/all.css @@ -0,0 +1,12 @@ +/*! + * jQuery UI CSS Framework 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/category/theming/ + */ +@import "base.css"; +@import "theme.css"; diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/autocomplete.css b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/autocomplete.css new file mode 100644 index 000000000..c21c54f60 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/autocomplete.css @@ -0,0 +1,16 @@ +/*! + * jQuery UI Autocomplete 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/autocomplete/#theming + */ +.ui-autocomplete { + position: absolute; + top: 0; + left: 0; + cursor: default; +} diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/base.css b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/base.css new file mode 100644 index 000000000..7f5317264 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/base.css @@ -0,0 +1,28 @@ +/*! + * jQuery UI CSS Framework 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/category/theming/ + */ +@import url("core.css"); + +@import url("accordion.css"); +@import url("autocomplete.css"); +@import url("button.css"); +@import url("datepicker.css"); +@import url("dialog.css"); +@import url("draggable.css"); +@import url("menu.css"); +@import url("progressbar.css"); +@import url("resizable.css"); +@import url("selectable.css"); +@import url("selectmenu.css"); +@import url("sortable.css"); +@import url("slider.css"); +@import url("spinner.css"); +@import url("tabs.css"); +@import url("tooltip.css"); diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/button.css b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/button.css new file mode 100644 index 000000000..7f11bdd27 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/button.css @@ -0,0 +1,114 @@ +/*! + * jQuery UI Button 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/button/#theming + */ +.ui-button { + display: inline-block; + position: relative; + padding: 0; + line-height: normal; + margin-right: .1em; + cursor: pointer; + vertical-align: middle; + text-align: center; + overflow: visible; /* removes extra width in IE */ +} +.ui-button, +.ui-button:link, +.ui-button:visited, +.ui-button:hover, +.ui-button:active { + text-decoration: none; +} +/* to make room for the icon, a width needs to be set here */ +.ui-button-icon-only { + width: 2.2em; +} +/* button elements seem to need a little more width */ +button.ui-button-icon-only { + width: 2.4em; +} +.ui-button-icons-only { + width: 3.4em; +} +button.ui-button-icons-only { + width: 3.7em; +} + +/* button text element */ +.ui-button .ui-button-text { + display: block; + line-height: normal; +} +.ui-button-text-only .ui-button-text { + padding: .4em 1em; +} +.ui-button-icon-only .ui-button-text, +.ui-button-icons-only .ui-button-text { + padding: .4em; + text-indent: -9999999px; +} +.ui-button-text-icon-primary .ui-button-text, +.ui-button-text-icons .ui-button-text { + padding: .4em 1em .4em 2.1em; +} +.ui-button-text-icon-secondary .ui-button-text, +.ui-button-text-icons .ui-button-text { + padding: .4em 2.1em .4em 1em; +} +.ui-button-text-icons .ui-button-text { + padding-left: 2.1em; + padding-right: 2.1em; +} +/* no icon support for input elements, provide padding by default */ +input.ui-button { + padding: .4em 1em; +} + +/* button icon element(s) */ +.ui-button-icon-only .ui-icon, +.ui-button-text-icon-primary .ui-icon, +.ui-button-text-icon-secondary .ui-icon, +.ui-button-text-icons .ui-icon, +.ui-button-icons-only .ui-icon { + position: absolute; + top: 50%; + margin-top: -8px; +} +.ui-button-icon-only .ui-icon { + left: 50%; + margin-left: -8px; +} +.ui-button-text-icon-primary .ui-button-icon-primary, +.ui-button-text-icons .ui-button-icon-primary, +.ui-button-icons-only .ui-button-icon-primary { + left: .5em; +} +.ui-button-text-icon-secondary .ui-button-icon-secondary, +.ui-button-text-icons .ui-button-icon-secondary, +.ui-button-icons-only .ui-button-icon-secondary { + right: .5em; +} + +/* button sets */ +.ui-buttonset { + margin-right: 7px; +} +.ui-buttonset .ui-button { + margin-left: 0; + margin-right: -.3em; +} + +/* workarounds */ +/* reset extra padding in Firefox, see h5bp.com/l */ +input.ui-button::-moz-focus-inner, +button.ui-button::-moz-focus-inner { + border: 0; + padding: 0; +} diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/core.css b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/core.css new file mode 100644 index 000000000..154f1f89f --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/core.css @@ -0,0 +1,93 @@ +/*! + * jQuery UI CSS Framework 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/category/theming/ + */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { + display: none; +} +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} +.ui-helper-reset { + margin: 0; + padding: 0; + border: 0; + outline: 0; + line-height: 1.3; + text-decoration: none; + font-size: 100%; + list-style: none; +} +.ui-helper-clearfix:before, +.ui-helper-clearfix:after { + content: ""; + display: table; + border-collapse: collapse; +} +.ui-helper-clearfix:after { + clear: both; +} +.ui-helper-clearfix { + min-height: 0; /* support: IE7 */ +} +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + opacity: 0; + filter:Alpha(Opacity=0); /* support: IE8 */ +} + +.ui-front { + z-index: 100; +} + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { + cursor: default !important; +} + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; +} + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; +} diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/datepicker.css b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/datepicker.css new file mode 100644 index 000000000..ea559d876 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/datepicker.css @@ -0,0 +1,175 @@ +/*! + * jQuery UI Datepicker 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/datepicker/#theming + */ +.ui-datepicker { + width: 17em; + padding: .2em .2em 0; + display: none; +} +.ui-datepicker .ui-datepicker-header { + position: relative; + padding: .2em 0; +} +.ui-datepicker .ui-datepicker-prev, +.ui-datepicker .ui-datepicker-next { + position: absolute; + top: 2px; + width: 1.8em; + height: 1.8em; +} +.ui-datepicker .ui-datepicker-prev-hover, +.ui-datepicker .ui-datepicker-next-hover { + top: 1px; +} +.ui-datepicker .ui-datepicker-prev { + left: 2px; +} +.ui-datepicker .ui-datepicker-next { + right: 2px; +} +.ui-datepicker .ui-datepicker-prev-hover { + left: 1px; +} +.ui-datepicker .ui-datepicker-next-hover { + right: 1px; +} +.ui-datepicker .ui-datepicker-prev span, +.ui-datepicker .ui-datepicker-next span { + display: block; + position: absolute; + left: 50%; + margin-left: -8px; + top: 50%; + margin-top: -8px; +} +.ui-datepicker .ui-datepicker-title { + margin: 0 2.3em; + line-height: 1.8em; + text-align: center; +} +.ui-datepicker .ui-datepicker-title select { + font-size: 1em; + margin: 1px 0; +} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { + width: 45%; +} +.ui-datepicker table { + width: 100%; + font-size: .9em; + border-collapse: collapse; + margin: 0 0 .4em; +} +.ui-datepicker th { + padding: .7em .3em; + text-align: center; + font-weight: bold; + border: 0; +} +.ui-datepicker td { + border: 0; + padding: 1px; +} +.ui-datepicker td span, +.ui-datepicker td a { + display: block; + padding: .2em; + text-align: right; + text-decoration: none; +} +.ui-datepicker .ui-datepicker-buttonpane { + background-image: none; + margin: .7em 0 0 0; + padding: 0 .2em; + border-left: 0; + border-right: 0; + border-bottom: 0; +} +.ui-datepicker .ui-datepicker-buttonpane button { + float: right; + margin: .5em .2em .4em; + cursor: pointer; + padding: .2em .6em .3em .6em; + width: auto; + overflow: visible; +} +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { + float: left; +} + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { + width: auto; +} +.ui-datepicker-multi .ui-datepicker-group { + float: left; +} +.ui-datepicker-multi .ui-datepicker-group table { + width: 95%; + margin: 0 auto .4em; +} +.ui-datepicker-multi-2 .ui-datepicker-group { + width: 50%; +} +.ui-datepicker-multi-3 .ui-datepicker-group { + width: 33.3%; +} +.ui-datepicker-multi-4 .ui-datepicker-group { + width: 25%; +} +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { + border-left-width: 0; +} +.ui-datepicker-multi .ui-datepicker-buttonpane { + clear: left; +} +.ui-datepicker-row-break { + clear: both; + width: 100%; + font-size: 0; +} + +/* RTL support */ +.ui-datepicker-rtl { + direction: rtl; +} +.ui-datepicker-rtl .ui-datepicker-prev { + right: 2px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next { + left: 2px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-prev:hover { + right: 1px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next:hover { + left: 1px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane { + clear: right; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button { + float: left; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, +.ui-datepicker-rtl .ui-datepicker-group { + float: right; +} +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px; +} diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/dialog.css b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/dialog.css new file mode 100644 index 000000000..66b90cc87 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/dialog.css @@ -0,0 +1,70 @@ +/*! + * jQuery UI Dialog 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/dialog/#theming + */ +.ui-dialog { + overflow: hidden; + position: absolute; + top: 0; + left: 0; + padding: .2em; + outline: 0; +} +.ui-dialog .ui-dialog-titlebar { + padding: .4em 1em; + position: relative; +} +.ui-dialog .ui-dialog-title { + float: left; + margin: .1em 0; + white-space: nowrap; + width: 90%; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + right: .3em; + top: 50%; + width: 20px; + margin: -10px 0 0 0; + padding: 1px; + height: 20px; +} +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: .5em 1em; + background: none; + overflow: auto; +} +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 1px 0 0 0; + background-image: none; + margin-top: .5em; + padding: .3em 1em .5em .4em; +} +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right; +} +.ui-dialog .ui-dialog-buttonpane button { + margin: .5em .4em .5em 0; + cursor: pointer; +} +.ui-dialog .ui-resizable-se { + width: 12px; + height: 12px; + right: -5px; + bottom: -5px; + background-position: 16px 16px; +} +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/draggable.css b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/draggable.css new file mode 100644 index 000000000..df01f29f3 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/draggable.css @@ -0,0 +1,12 @@ +/*! + * jQuery UI Draggable 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ +.ui-draggable-handle { + -ms-touch-action: none; + touch-action: none; +} diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png new file mode 100644 index 000000000..5b5dab2ab Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-bg_flat_75_ffffff_40x100.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-bg_flat_75_ffffff_40x100.png new file mode 100644 index 000000000..ac8b229af Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-bg_flat_75_ffffff_40x100.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.png new file mode 100644 index 000000000..ad3d6346e Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-bg_glass_65_ffffff_1x400.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-bg_glass_65_ffffff_1x400.png new file mode 100644 index 000000000..42ccba269 Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-bg_glass_65_ffffff_1x400.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-bg_glass_75_dadada_1x400.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-bg_glass_75_dadada_1x400.png new file mode 100644 index 000000000..5a46b47cb Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-bg_glass_75_dadada_1x400.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.png new file mode 100644 index 000000000..86c2baa65 Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-bg_glass_95_fef1ec_1x400.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-bg_glass_95_fef1ec_1x400.png new file mode 100644 index 000000000..4443fdc1a Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-bg_glass_95_fef1ec_1x400.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png new file mode 100644 index 000000000..7c9fa6c6e Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-icons_222222_256x240.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-icons_222222_256x240.png new file mode 100644 index 000000000..ee039dc09 Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-icons_222222_256x240.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-icons_2e83ff_256x240.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-icons_2e83ff_256x240.png new file mode 100644 index 000000000..45e8928e5 Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-icons_2e83ff_256x240.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-icons_444444_256x240.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-icons_444444_256x240.png new file mode 100644 index 000000000..348243b82 Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-icons_444444_256x240.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-icons_454545_256x240.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-icons_454545_256x240.png new file mode 100644 index 000000000..7ec70d11b Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-icons_454545_256x240.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-icons_555555_256x240.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-icons_555555_256x240.png new file mode 100644 index 000000000..949749b88 Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-icons_555555_256x240.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-icons_777620_256x240.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-icons_777620_256x240.png new file mode 100644 index 000000000..350c78345 Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-icons_777620_256x240.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-icons_777777_256x240.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-icons_777777_256x240.png new file mode 100644 index 000000000..f8b5cc4c2 Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-icons_777777_256x240.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-icons_888888_256x240.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-icons_888888_256x240.png new file mode 100644 index 000000000..5ba708c39 Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-icons_888888_256x240.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-icons_cc0000_256x240.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-icons_cc0000_256x240.png new file mode 100644 index 000000000..a046ee586 Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-icons_cc0000_256x240.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-icons_cd0a0a_256x240.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-icons_cd0a0a_256x240.png new file mode 100644 index 000000000..7930a5580 Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-icons_cd0a0a_256x240.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-icons_ffffff_256x240.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-icons_ffffff_256x240.png new file mode 100644 index 000000000..ea57ef0f6 Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/images/ui-icons_ffffff_256x240.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/jquery-ui.css b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/jquery-ui.css new file mode 100644 index 000000000..ffdcb2351 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/jquery-ui.css @@ -0,0 +1,1312 @@ +/*! jQuery UI - v1.12.0 - 2016-07-08 +* http://jqueryui.com +* Includes: core.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, draggable.css, resizable.css, progressbar.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css +* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Arial%2CHelvetica%2Csans-serif&fsDefault=1em&fwDefault=normal&cornerRadius=3px&bgColorHeader=e9e9e9&bgTextureHeader=flat&borderColorHeader=dddddd&fcHeader=333333&iconColorHeader=444444&bgColorContent=ffffff&bgTextureContent=flat&borderColorContent=dddddd&fcContent=333333&iconColorContent=444444&bgColorDefault=f6f6f6&bgTextureDefault=flat&borderColorDefault=c5c5c5&fcDefault=454545&iconColorDefault=777777&bgColorHover=ededed&bgTextureHover=flat&borderColorHover=cccccc&fcHover=2b2b2b&iconColorHover=555555&bgColorActive=007fff&bgTextureActive=flat&borderColorActive=003eff&fcActive=ffffff&iconColorActive=ffffff&bgColorHighlight=fffa90&bgTextureHighlight=flat&borderColorHighlight=dad55e&fcHighlight=777620&iconColorHighlight=777620&bgColorError=fddfdf&bgTextureError=flat&borderColorError=f1a899&fcError=5f3f3f&iconColorError=cc0000&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=666666&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=5px&offsetTopShadow=0px&offsetLeftShadow=0px&cornerRadiusShadow=8px +* Copyright jQuery Foundation and other contributors; Licensed MIT */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { + display: none; +} +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} +.ui-helper-reset { + margin: 0; + padding: 0; + border: 0; + outline: 0; + line-height: 1.3; + text-decoration: none; + font-size: 100%; + list-style: none; +} +.ui-helper-clearfix:before, +.ui-helper-clearfix:after { + content: ""; + display: table; + border-collapse: collapse; +} +.ui-helper-clearfix:after { + clear: both; +} +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + opacity: 0; + filter:Alpha(Opacity=0); /* support: IE8 */ +} + +.ui-front { + z-index: 100; +} + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { + cursor: default !important; + pointer-events: none; +} + + +/* Icons +----------------------------------*/ +.ui-icon { + display: inline-block; + vertical-align: middle; + margin-top: -.25em; + position: relative; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; +} + +.ui-widget-icon-block { + left: 50%; + margin-left: -8px; + display: block; +} + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.ui-accordion .ui-accordion-header { + display: block; + cursor: pointer; + position: relative; + margin: 2px 0 0 0; + padding: .5em .5em .5em .7em; + font-size: 100%; +} +.ui-accordion .ui-accordion-content { + padding: 1em 2.2em; + border-top: 0; + overflow: auto; +} +.ui-autocomplete { + position: absolute; + top: 0; + left: 0; + cursor: default; +} +.ui-menu { + list-style: none; + padding: 0; + margin: 0; + display: block; + outline: 0; +} +.ui-menu .ui-menu { + position: absolute; +} +.ui-menu .ui-menu-item { + margin: 0; + cursor: pointer; + /* support: IE10, see #8844 */ + list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); +} +.ui-menu .ui-menu-item-wrapper { + position: relative; + padding: 3px 1em 3px .4em; +} +.ui-menu .ui-menu-divider { + margin: 5px 0; + height: 0; + font-size: 0; + line-height: 0; + border-width: 1px 0 0 0; +} +.ui-menu .ui-state-focus, +.ui-menu .ui-state-active { + margin: -1px; +} + +/* icon support */ +.ui-menu-icons { + position: relative; +} +.ui-menu-icons .ui-menu-item-wrapper { + padding-left: 2em; +} + +/* left-aligned */ +.ui-menu .ui-icon { + position: absolute; + top: 0; + bottom: 0; + left: .2em; + margin: auto 0; +} + +/* right-aligned */ +.ui-menu .ui-menu-icon { + left: auto; + right: 0; +} +.ui-button { + padding: .4em 1em; + display: inline-block; + position: relative; + line-height: normal; + margin-right: .1em; + cursor: pointer; + vertical-align: middle; + text-align: center; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + + /* Support: IE <= 11 */ + overflow: visible; +} + +.ui-button, +.ui-button:link, +.ui-button:visited, +.ui-button:hover, +.ui-button:active { + text-decoration: none; +} + +/* to make room for the icon, a width needs to be set here */ +.ui-button-icon-only { + width: 2em; + box-sizing: border-box; + text-indent: -9999px; + white-space: nowrap; +} + +/* no icon support for input elements */ +input.ui-button.ui-button-icon-only { + text-indent: 0; +} + +/* button icon element(s) */ +.ui-button-icon-only .ui-icon { + position: absolute; + top: 50%; + left: 50%; + margin-top: -8px; + margin-left: -8px; +} + +.ui-button.ui-icon-notext .ui-icon { + padding: 0; + width: 2.1em; + height: 2.1em; + text-indent: -9999px; + white-space: nowrap; + +} + +input.ui-button.ui-icon-notext .ui-icon { + width: auto; + height: auto; + text-indent: 0; + white-space: normal; + padding: .4em 1em; +} + +/* workarounds */ +/* Support: Firefox 5 - 40 */ +input.ui-button::-moz-focus-inner, +button.ui-button::-moz-focus-inner { + border: 0; + padding: 0; +} +.ui-controlgroup { + vertical-align: middle; + display: inline-block; +} +.ui-controlgroup > .ui-controlgroup-item { + float: left; + margin-left: 0; + margin-right: 0; +} +.ui-controlgroup > .ui-controlgroup-item:focus, +.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus { + z-index: 9999; +} +.ui-controlgroup-vertical > .ui-controlgroup-item { + display: block; + float: none; + width: 100%; + margin-top: 0; + margin-bottom: 0; + text-align: left; +} +.ui-controlgroup-vertical .ui-controlgroup-item { + box-sizing: border-box; +} +.ui-controlgroup .ui-controlgroup-label { + padding: .4em 1em; +} +.ui-controlgroup .ui-controlgroup-label span { + font-size: 80%; +} +.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item { + border-left: none; +} +.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item { + border-top: none; +} +.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content { + border-right: none; +} +.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content { + border-bottom: none; +} + +/* Spinner specific style fixes */ +.ui-controlgroup-vertical .ui-spinner-input { + + /* Support: IE8 only, Android < 4.4 only */ + width: 75%; + width: calc( 100% - 2.4em ); +} +.ui-controlgroup-vertical .ui-spinner .ui-spinner-up { + border-top-style: solid; +} + +.ui-checkboxradio-label .ui-icon-background { + box-shadow: inset 1px 1px 1px #ccc; + border-radius: .12em; + border: none; +} +.ui-checkboxradio-radio-label .ui-icon-background { + width: 16px; + height: 16px; + border-radius: 1em; + overflow: visible; + border: none; +} +.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon, +.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon { + background-image: none; + width: 8px; + height: 8px; + border-width: 4px; + border-style: solid; +} +.ui-checkboxradio-disabled { + pointer-events: none; +} +.ui-datepicker { + width: 17em; + padding: .2em .2em 0; + display: none; +} +.ui-datepicker .ui-datepicker-header { + position: relative; + padding: .2em 0; +} +.ui-datepicker .ui-datepicker-prev, +.ui-datepicker .ui-datepicker-next { + position: absolute; + top: 2px; + width: 1.8em; + height: 1.8em; +} +.ui-datepicker .ui-datepicker-prev-hover, +.ui-datepicker .ui-datepicker-next-hover { + top: 1px; +} +.ui-datepicker .ui-datepicker-prev { + left: 2px; +} +.ui-datepicker .ui-datepicker-next { + right: 2px; +} +.ui-datepicker .ui-datepicker-prev-hover { + left: 1px; +} +.ui-datepicker .ui-datepicker-next-hover { + right: 1px; +} +.ui-datepicker .ui-datepicker-prev span, +.ui-datepicker .ui-datepicker-next span { + display: block; + position: absolute; + left: 50%; + margin-left: -8px; + top: 50%; + margin-top: -8px; +} +.ui-datepicker .ui-datepicker-title { + margin: 0 2.3em; + line-height: 1.8em; + text-align: center; +} +.ui-datepicker .ui-datepicker-title select { + font-size: 1em; + margin: 1px 0; +} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { + width: 45%; +} +.ui-datepicker table { + width: 100%; + font-size: .9em; + border-collapse: collapse; + margin: 0 0 .4em; +} +.ui-datepicker th { + padding: .7em .3em; + text-align: center; + font-weight: bold; + border: 0; +} +.ui-datepicker td { + border: 0; + padding: 1px; +} +.ui-datepicker td span, +.ui-datepicker td a { + display: block; + padding: .2em; + text-align: right; + text-decoration: none; +} +.ui-datepicker .ui-datepicker-buttonpane { + background-image: none; + margin: .7em 0 0 0; + padding: 0 .2em; + border-left: 0; + border-right: 0; + border-bottom: 0; +} +.ui-datepicker .ui-datepicker-buttonpane button { + float: right; + margin: .5em .2em .4em; + cursor: pointer; + padding: .2em .6em .3em .6em; + width: auto; + overflow: visible; +} +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { + float: left; +} + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { + width: auto; +} +.ui-datepicker-multi .ui-datepicker-group { + float: left; +} +.ui-datepicker-multi .ui-datepicker-group table { + width: 95%; + margin: 0 auto .4em; +} +.ui-datepicker-multi-2 .ui-datepicker-group { + width: 50%; +} +.ui-datepicker-multi-3 .ui-datepicker-group { + width: 33.3%; +} +.ui-datepicker-multi-4 .ui-datepicker-group { + width: 25%; +} +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { + border-left-width: 0; +} +.ui-datepicker-multi .ui-datepicker-buttonpane { + clear: left; +} +.ui-datepicker-row-break { + clear: both; + width: 100%; + font-size: 0; +} + +/* RTL support */ +.ui-datepicker-rtl { + direction: rtl; +} +.ui-datepicker-rtl .ui-datepicker-prev { + right: 2px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next { + left: 2px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-prev:hover { + right: 1px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next:hover { + left: 1px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane { + clear: right; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button { + float: left; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, +.ui-datepicker-rtl .ui-datepicker-group { + float: right; +} +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px; +} + +/* Icons */ +.ui-datepicker .ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; + left: .5em; + top: .3em; +} +.ui-dialog { + position: absolute; + top: 0; + left: 0; + padding: .2em; + outline: 0; +} +.ui-dialog .ui-dialog-titlebar { + padding: .4em 1em; + position: relative; +} +.ui-dialog .ui-dialog-title { + float: left; + margin: .1em 0; + white-space: nowrap; + width: 90%; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + right: .3em; + top: 50%; + width: 20px; + margin: -10px 0 0 0; + padding: 1px; + height: 20px; +} +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: .5em 1em; + background: none; + overflow: auto; +} +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 1px 0 0 0; + background-image: none; + margin-top: .5em; + padding: .3em 1em .5em .4em; +} +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right; +} +.ui-dialog .ui-dialog-buttonpane button { + margin: .5em .4em .5em 0; + cursor: pointer; +} +.ui-dialog .ui-resizable-n { + height: 2px; + top: 0; +} +.ui-dialog .ui-resizable-e { + width: 2px; + right: 0; +} +.ui-dialog .ui-resizable-s { + height: 2px; + bottom: 0; +} +.ui-dialog .ui-resizable-w { + width: 2px; + left: 0; +} +.ui-dialog .ui-resizable-se, +.ui-dialog .ui-resizable-sw, +.ui-dialog .ui-resizable-ne, +.ui-dialog .ui-resizable-nw { + width: 7px; + height: 7px; +} +.ui-dialog .ui-resizable-se { + right: 0; + bottom: 0; +} +.ui-dialog .ui-resizable-sw { + left: 0; + bottom: 0; +} +.ui-dialog .ui-resizable-ne { + right: 0; + top: 0; +} +.ui-dialog .ui-resizable-nw { + left: 0; + top: 0; +} +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} +.ui-draggable-handle { + -ms-touch-action: none; + touch-action: none; +} +.ui-resizable { + position: relative; +} +.ui-resizable-handle { + position: absolute; + font-size: 0.1px; + display: block; + -ms-touch-action: none; + touch-action: none; +} +.ui-resizable-disabled .ui-resizable-handle, +.ui-resizable-autohide .ui-resizable-handle { + display: none; +} +.ui-resizable-n { + cursor: n-resize; + height: 7px; + width: 100%; + top: -5px; + left: 0; +} +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + left: 0; +} +.ui-resizable-e { + cursor: e-resize; + width: 7px; + right: -5px; + top: 0; + height: 100%; +} +.ui-resizable-w { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100%; +} +.ui-resizable-se { + cursor: se-resize; + width: 12px; + height: 12px; + right: 1px; + bottom: 1px; +} +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px; +} +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px; +} +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px; +} +.ui-progressbar { + height: 2em; + text-align: left; + overflow: hidden; +} +.ui-progressbar .ui-progressbar-value { + margin: -1px; + height: 100%; +} +.ui-progressbar .ui-progressbar-overlay { + background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw=="); + height: 100%; + filter: alpha(opacity=25); /* support: IE8 */ + opacity: 0.25; +} +.ui-progressbar-indeterminate .ui-progressbar-value { + background-image: none; +} +.ui-selectable { + -ms-touch-action: none; + touch-action: none; +} +.ui-selectable-helper { + position: absolute; + z-index: 100; + border: 1px dotted black; +} +.ui-selectmenu-menu { + padding: 0; + margin: 0; + position: absolute; + top: 0; + left: 0; + display: none; +} +.ui-selectmenu-menu .ui-menu { + overflow: auto; + overflow-x: hidden; + padding-bottom: 1px; +} +.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup { + font-size: 1em; + font-weight: bold; + line-height: 1.5; + padding: 2px 0.4em; + margin: 0.5em 0 0 0; + height: auto; + border: 0; +} +.ui-selectmenu-open { + display: block; +} +.ui-selectmenu-text { + display: block; + margin-right: 20px; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-selectmenu-button.ui-button { + text-align: left; + white-space: nowrap; + width: 14em; +} +.ui-selectmenu-icon.ui-icon { + float: right; + margin-top: 0; +} +.ui-slider { + position: relative; + text-align: left; +} +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1.2em; + height: 1.2em; + cursor: default; + -ms-touch-action: none; + touch-action: none; +} +.ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + font-size: .7em; + display: block; + border: 0; + background-position: 0 0; +} + +/* support: IE8 - See #6727 */ +.ui-slider.ui-state-disabled .ui-slider-handle, +.ui-slider.ui-state-disabled .ui-slider-range { + filter: inherit; +} + +.ui-slider-horizontal { + height: .8em; +} +.ui-slider-horizontal .ui-slider-handle { + top: -.3em; + margin-left: -.6em; +} +.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; +} +.ui-slider-horizontal .ui-slider-range-min { + left: 0; +} +.ui-slider-horizontal .ui-slider-range-max { + right: 0; +} + +.ui-slider-vertical { + width: .8em; + height: 100px; +} +.ui-slider-vertical .ui-slider-handle { + left: -.3em; + margin-left: 0; + margin-bottom: -.6em; +} +.ui-slider-vertical .ui-slider-range { + left: 0; + width: 100%; +} +.ui-slider-vertical .ui-slider-range-min { + bottom: 0; +} +.ui-slider-vertical .ui-slider-range-max { + top: 0; +} +.ui-sortable-handle { + -ms-touch-action: none; + touch-action: none; +} +.ui-spinner { + position: relative; + display: inline-block; + overflow: hidden; + padding: 0; + vertical-align: middle; +} +.ui-spinner-input { + border: none; + background: none; + color: inherit; + padding: .222em 0; + margin: .2em 0; + vertical-align: middle; + margin-left: .4em; + margin-right: 2em; +} +.ui-spinner-button { + width: 1.6em; + height: 50%; + font-size: .5em; + padding: 0; + margin: 0; + text-align: center; + position: absolute; + cursor: default; + display: block; + overflow: hidden; + right: 0; +} +/* more specificity required here to override default borders */ +.ui-spinner a.ui-spinner-button { + border-top-style: none; + border-bottom-style: none; + border-right-style: none; +} +.ui-spinner-up { + top: 0; +} +.ui-spinner-down { + bottom: 0; +} +.ui-tabs { + position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ + padding: .2em; +} +.ui-tabs .ui-tabs-nav { + margin: 0; + padding: .2em .2em 0; +} +.ui-tabs .ui-tabs-nav li { + list-style: none; + float: left; + position: relative; + top: 0; + margin: 1px .2em 0 0; + border-bottom-width: 0; + padding: 0; + white-space: nowrap; +} +.ui-tabs .ui-tabs-nav .ui-tabs-anchor { + float: left; + padding: .5em 1em; + text-decoration: none; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active { + margin-bottom: -1px; + padding-bottom: 1px; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor { + cursor: text; +} +.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { + cursor: pointer; +} +.ui-tabs .ui-tabs-panel { + display: block; + border-width: 0; + padding: 1em 1.4em; + background: none; +} +.ui-tooltip { + padding: 8px; + position: absolute; + z-index: 9999; + max-width: 300px; +} +body .ui-tooltip { + border-width: 2px; +} +/* Component containers +----------------------------------*/ +.ui-widget { + font-family: Arial,Helvetica,sans-serif; + font-size: 1em; +} +.ui-widget .ui-widget { + font-size: 1em; +} +.ui-widget input, +.ui-widget select, +.ui-widget textarea, +.ui-widget button { + font-family: Arial,Helvetica,sans-serif; + font-size: 1em; +} +.ui-widget.ui-widget-content { + border: 1px solid #c5c5c5; +} +.ui-widget-content { + border: 1px solid #dddddd; + background: #ffffff; + color: #333333; +} +.ui-widget-content a { + color: #333333; +} +.ui-widget-header { + border: 1px solid #dddddd; + background: #e9e9e9; + color: #333333; + font-weight: bold; +} +.ui-widget-header a { + color: #333333; +} + +/* Interaction states +----------------------------------*/ +.ui-state-default, +.ui-widget-content .ui-state-default, +.ui-widget-header .ui-state-default, +.ui-button, + +/* We use html here because we need a greater specificity to make sure disabled +works properly when clicked or hovered */ +html .ui-button.ui-state-disabled:hover, +html .ui-button.ui-state-disabled:active { + border: 1px solid #c5c5c5; + background: #f6f6f6; + font-weight: normal; + color: #454545; +} +.ui-state-default a, +.ui-state-default a:link, +.ui-state-default a:visited, +a.ui-button, +a:link.ui-button, +a:visited.ui-button, +.ui-button { + color: #454545; + text-decoration: none; +} +.ui-state-hover, +.ui-widget-content .ui-state-hover, +.ui-widget-header .ui-state-hover, +.ui-state-focus, +.ui-widget-content .ui-state-focus, +.ui-widget-header .ui-state-focus, +.ui-button:hover, +.ui-button:focus { + border: 1px solid #cccccc; + background: #ededed; + font-weight: normal; + color: #2b2b2b; +} +.ui-state-hover a, +.ui-state-hover a:hover, +.ui-state-hover a:link, +.ui-state-hover a:visited, +.ui-state-focus a, +.ui-state-focus a:hover, +.ui-state-focus a:link, +.ui-state-focus a:visited, +a.ui-button:hover, +a.ui-button:focus { + color: #2b2b2b; + text-decoration: none; +} + +.ui-visual-focus { + box-shadow: 0 0 3px 1px rgb(94, 158, 214); +} +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active, +a.ui-button:active, +.ui-button:active, +.ui-button.ui-state-active:hover { + border: 1px solid #003eff; + background: #007fff; + font-weight: normal; + color: #ffffff; +} +.ui-icon-background, +.ui-state-active .ui-icon-background { + border: #003eff; + background-color: #ffffff; +} +.ui-state-active a, +.ui-state-active a:link, +.ui-state-active a:visited { + color: #ffffff; + text-decoration: none; +} + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, +.ui-widget-content .ui-state-highlight, +.ui-widget-header .ui-state-highlight { + border: 1px solid #dad55e; + background: #fffa90; + color: #777620; +} +.ui-state-checked { + border: 1px solid #dad55e; + background: #fffa90; +} +.ui-state-highlight a, +.ui-widget-content .ui-state-highlight a, +.ui-widget-header .ui-state-highlight a { + color: #777620; +} +.ui-state-error, +.ui-widget-content .ui-state-error, +.ui-widget-header .ui-state-error { + border: 1px solid #f1a899; + background: #fddfdf; + color: #5f3f3f; +} +.ui-state-error a, +.ui-widget-content .ui-state-error a, +.ui-widget-header .ui-state-error a { + color: #5f3f3f; +} +.ui-state-error-text, +.ui-widget-content .ui-state-error-text, +.ui-widget-header .ui-state-error-text { + color: #5f3f3f; +} +.ui-priority-primary, +.ui-widget-content .ui-priority-primary, +.ui-widget-header .ui-priority-primary { + font-weight: bold; +} +.ui-priority-secondary, +.ui-widget-content .ui-priority-secondary, +.ui-widget-header .ui-priority-secondary { + opacity: .7; + filter:Alpha(Opacity=70); /* support: IE8 */ + font-weight: normal; +} +.ui-state-disabled, +.ui-widget-content .ui-state-disabled, +.ui-widget-header .ui-state-disabled { + opacity: .35; + filter:Alpha(Opacity=35); /* support: IE8 */ + background-image: none; +} +.ui-state-disabled .ui-icon { + filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */ +} + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + width: 16px; + height: 16px; +} +.ui-icon, +.ui-widget-content .ui-icon { + background-image: url("images/ui-icons_444444_256x240.png"); +} +.ui-widget-header .ui-icon { + background-image: url("images/ui-icons_444444_256x240.png"); +} +.ui-button .ui-icon { + background-image: url("images/ui-icons_777777_256x240.png"); +} +.ui-state-hover .ui-icon, +.ui-state-focus .ui-icon, +.ui-button:hover .ui-icon, +.ui-button:focus .ui-icon, +.ui-state-default .ui-icon { + background-image: url("images/ui-icons_555555_256x240.png"); +} +.ui-state-active .ui-icon, +.ui-button:active .ui-icon { + background-image: url("images/ui-icons_ffffff_256x240.png"); +} +.ui-state-highlight .ui-icon, +.ui-button .ui-state-highlight.ui-icon { + background-image: url("images/ui-icons_777620_256x240.png"); +} +.ui-state-error .ui-icon, +.ui-state-error-text .ui-icon { + background-image: url("images/ui-icons_cc0000_256x240.png"); +} + +/* positioning */ +.ui-icon-blank { background-position: 16px 16px; } +.ui-icon-caret-1-n { background-position: 0 0; } +.ui-icon-caret-1-ne { background-position: -16px 0; } +.ui-icon-caret-1-e { background-position: -32px 0; } +.ui-icon-caret-1-se { background-position: -48px 0; } +.ui-icon-caret-1-s { background-position: -65px 0; } +.ui-icon-caret-1-sw { background-position: -80px 0; } +.ui-icon-caret-1-w { background-position: -96px 0; } +.ui-icon-caret-1-nw { background-position: -112px 0; } +.ui-icon-caret-2-n-s { background-position: -128px 0; } +.ui-icon-caret-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -65px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -65px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 1px -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-on { background-position: -96px -144px; } +.ui-icon-radio-off { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all, +.ui-corner-top, +.ui-corner-left, +.ui-corner-tl { + border-top-left-radius: 3px; +} +.ui-corner-all, +.ui-corner-top, +.ui-corner-right, +.ui-corner-tr { + border-top-right-radius: 3px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-left, +.ui-corner-bl { + border-bottom-left-radius: 3px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-right, +.ui-corner-br { + border-bottom-right-radius: 3px; +} + +/* Overlays */ +.ui-widget-overlay { + background: #aaaaaa; + opacity: .3; + filter: Alpha(Opacity=30); /* support: IE8 */ +} +.ui-widget-shadow { + -webkit-box-shadow: 0px 0px 5px #666666; + box-shadow: 0px 0px 5px #666666; +} diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/jquery-ui.min.css b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/jquery-ui.min.css new file mode 100644 index 000000000..1f473470d --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/jquery-ui.min.css @@ -0,0 +1,7 @@ +/*! jQuery UI - v1.12.0 - 2016-07-08 +* http://jqueryui.com +* Includes: core.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, draggable.css, resizable.css, progressbar.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css +* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Arial%2CHelvetica%2Csans-serif&fsDefault=1em&fwDefault=normal&cornerRadius=3px&bgColorHeader=e9e9e9&bgTextureHeader=flat&borderColorHeader=dddddd&fcHeader=333333&iconColorHeader=444444&bgColorContent=ffffff&bgTextureContent=flat&borderColorContent=dddddd&fcContent=333333&iconColorContent=444444&bgColorDefault=f6f6f6&bgTextureDefault=flat&borderColorDefault=c5c5c5&fcDefault=454545&iconColorDefault=777777&bgColorHover=ededed&bgTextureHover=flat&borderColorHover=cccccc&fcHover=2b2b2b&iconColorHover=555555&bgColorActive=007fff&bgTextureActive=flat&borderColorActive=003eff&fcActive=ffffff&iconColorActive=ffffff&bgColorHighlight=fffa90&bgTextureHighlight=flat&borderColorHighlight=dad55e&fcHighlight=777620&iconColorHighlight=777620&bgColorError=fddfdf&bgTextureError=flat&borderColorError=f1a899&fcError=5f3f3f&iconColorError=cc0000&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=666666&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=5px&offsetTopShadow=0px&offsetLeftShadow=0px&cornerRadiusShadow=8px +* Copyright jQuery Foundation and other contributors; Licensed MIT */ + +.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;font-size:100%}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:0}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{margin:0;cursor:pointer;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-item-wrapper{position:relative;padding:3px 1em 3px .4em}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item-wrapper{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-button{padding:.4em 1em;display:inline-block;position:relative;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2em;box-sizing:border-box;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-button-icon-only{text-indent:0}.ui-button-icon-only .ui-icon{position:absolute;top:50%;left:50%;margin-top:-8px;margin-left:-8px}.ui-button.ui-icon-notext .ui-icon{padding:0;width:2.1em;height:2.1em;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-icon-notext .ui-icon{width:auto;height:auto;text-indent:0;white-space:normal;padding:.4em 1em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-controlgroup{vertical-align:middle;display:inline-block}.ui-controlgroup > .ui-controlgroup-item{float:left;margin-left:0;margin-right:0}.ui-controlgroup > .ui-controlgroup-item:focus,.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus{z-index:9999}.ui-controlgroup-vertical > .ui-controlgroup-item{display:block;float:none;width:100%;margin-top:0;margin-bottom:0;text-align:left}.ui-controlgroup-vertical .ui-controlgroup-item{box-sizing:border-box}.ui-controlgroup .ui-controlgroup-label{padding:.4em 1em}.ui-controlgroup .ui-controlgroup-label span{font-size:80%}.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item{border-left:none}.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item{border-top:none}.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content{border-right:none}.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content{border-bottom:none}.ui-controlgroup-vertical .ui-spinner-input{width:75%;width:calc( 100% - 2.4em )}.ui-controlgroup-vertical .ui-spinner .ui-spinner-up{border-top-style:solid}.ui-checkboxradio-label .ui-icon-background{box-shadow:inset 1px 1px 1px #ccc;border-radius:.12em;border:none}.ui-checkboxradio-radio-label .ui-icon-background{width:16px;height:16px;border-radius:1em;overflow:visible;border:none}.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon{background-image:none;width:8px;height:8px;border-width:4px;border-style:solid}.ui-checkboxradio-disabled{pointer-events:none}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker .ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;left:.5em;top:.3em}.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-n{height:2px;top:0}.ui-dialog .ui-resizable-e{width:2px;right:0}.ui-dialog .ui-resizable-s{height:2px;bottom:0}.ui-dialog .ui-resizable-w{width:2px;left:0}.ui-dialog .ui-resizable-se,.ui-dialog .ui-resizable-sw,.ui-dialog .ui-resizable-ne,.ui-dialog .ui-resizable-nw{width:7px;height:7px}.ui-dialog .ui-resizable-se{right:0;bottom:0}.ui-dialog .ui-resizable-sw{left:0;bottom:0}.ui-dialog .ui-resizable-ne{right:0;top:0}.ui-dialog .ui-resizable-nw{left:0;top:0}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:bold;line-height:1.5;padding:2px 0.4em;margin:0.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-text{display:block;margin-right:20px;overflow:hidden;text-overflow:ellipsis}.ui-selectmenu-button.ui-button{text-align:left;white-space:nowrap;width:14em}.ui-selectmenu-icon.ui-icon{float:right;margin-top:0}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:.222em 0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:2em}.ui-spinner-button{width:1.6em;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top-style:none;border-bottom-style:none;border-right-style:none}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Arial,Helvetica,sans-serif;font-size:1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Arial,Helvetica,sans-serif;font-size:1em}.ui-widget.ui-widget-content{border:1px solid #c5c5c5}.ui-widget-content{border:1px solid #ddd;background:#fff;color:#333}.ui-widget-content a{color:#333}.ui-widget-header{border:1px solid #ddd;background:#e9e9e9;color:#333;font-weight:bold}.ui-widget-header a{color:#333}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default,.ui-button,html .ui-button.ui-state-disabled:hover,html .ui-button.ui-state-disabled:active{border:1px solid #c5c5c5;background:#f6f6f6;font-weight:normal;color:#454545}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited,a.ui-button,a:link.ui-button,a:visited.ui-button,.ui-button{color:#454545;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus,.ui-button:hover,.ui-button:focus{border:1px solid #ccc;background:#ededed;font-weight:normal;color:#2b2b2b}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited,a.ui-button:hover,a.ui-button:focus{color:#2b2b2b;text-decoration:none}.ui-visual-focus{box-shadow:0 0 3px 1px rgb(94,158,214)}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active,a.ui-button:active,.ui-button:active,.ui-button.ui-state-active:hover{border:1px solid #003eff;background:#007fff;font-weight:normal;color:#fff}.ui-icon-background,.ui-state-active .ui-icon-background{border:#003eff;background-color:#fff}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#fff;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #dad55e;background:#fffa90;color:#777620}.ui-state-checked{border:1px solid #dad55e;background:#fffa90}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#777620}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #f1a899;background:#fddfdf;color:#5f3f3f}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#5f3f3f}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#5f3f3f}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_444444_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_444444_256x240.png")}.ui-button .ui-icon{background-image:url("images/ui-icons_777777_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon,.ui-button:hover .ui-icon,.ui-button:focus .ui-icon,.ui-state-default .ui-icon{background-image:url("images/ui-icons_555555_256x240.png")}.ui-state-active .ui-icon,.ui-button:active .ui-icon{background-image:url("images/ui-icons_ffffff_256x240.png")}.ui-state-highlight .ui-icon,.ui-button .ui-state-highlight.ui-icon{background-image:url("images/ui-icons_777620_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_cc0000_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-caret-1-n{background-position:0 0}.ui-icon-caret-1-ne{background-position:-16px 0}.ui-icon-caret-1-e{background-position:-32px 0}.ui-icon-caret-1-se{background-position:-48px 0}.ui-icon-caret-1-s{background-position:-65px 0}.ui-icon-caret-1-sw{background-position:-80px 0}.ui-icon-caret-1-w{background-position:-96px 0}.ui-icon-caret-1-nw{background-position:-112px 0}.ui-icon-caret-2-n-s{background-position:-128px 0}.ui-icon-caret-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-65px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-65px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:1px -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:3px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:3px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:3px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:3px}.ui-widget-overlay{background:#aaa;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{-webkit-box-shadow:0 0 5px #666;box-shadow:0 0 5px #666} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/menu.css b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/menu.css new file mode 100644 index 000000000..221fc5176 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/menu.css @@ -0,0 +1,63 @@ +/*! + * jQuery UI Menu 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/menu/#theming + */ +.ui-menu { + list-style: none; + padding: 0; + margin: 0; + display: block; + outline: none; +} +.ui-menu .ui-menu { + position: absolute; +} +.ui-menu .ui-menu-item { + position: relative; + margin: 0; + padding: 3px 1em 3px .4em; + cursor: pointer; + min-height: 0; /* support: IE7 */ + /* support: IE10, see #8844 */ + list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); +} +.ui-menu .ui-menu-divider { + margin: 5px 0; + height: 0; + font-size: 0; + line-height: 0; + border-width: 1px 0 0 0; +} +.ui-menu .ui-state-focus, +.ui-menu .ui-state-active { + margin: -1px; +} + +/* icon support */ +.ui-menu-icons { + position: relative; +} +.ui-menu-icons .ui-menu-item { + padding-left: 2em; +} + +/* left-aligned */ +.ui-menu .ui-icon { + position: absolute; + top: 0; + bottom: 0; + left: .2em; + margin: auto 0; +} + +/* right-aligned */ +.ui-menu .ui-menu-icon { + left: auto; + right: 0; +} diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/progressbar.css b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/progressbar.css new file mode 100644 index 000000000..5e43600b7 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/progressbar.css @@ -0,0 +1,28 @@ +/*! + * jQuery UI Progressbar 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/progressbar/#theming + */ +.ui-progressbar { + height: 2em; + text-align: left; + overflow: hidden; +} +.ui-progressbar .ui-progressbar-value { + margin: -1px; + height: 100%; +} +.ui-progressbar .ui-progressbar-overlay { + background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw=="); + height: 100%; + filter: alpha(opacity=25); /* support: IE8 */ + opacity: 0.25; +} +.ui-progressbar-indeterminate .ui-progressbar-value { + background-image: none; +} diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/resizable.css b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/resizable.css new file mode 100644 index 000000000..23d9a076a --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/resizable.css @@ -0,0 +1,78 @@ +/*! + * jQuery UI Resizable 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ +.ui-resizable { + position: relative; +} +.ui-resizable-handle { + position: absolute; + font-size: 0.1px; + display: block; + -ms-touch-action: none; + touch-action: none; +} +.ui-resizable-disabled .ui-resizable-handle, +.ui-resizable-autohide .ui-resizable-handle { + display: none; +} +.ui-resizable-n { + cursor: n-resize; + height: 7px; + width: 100%; + top: -5px; + left: 0; +} +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + left: 0; +} +.ui-resizable-e { + cursor: e-resize; + width: 7px; + right: -5px; + top: 0; + height: 100%; +} +.ui-resizable-w { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100%; +} +.ui-resizable-se { + cursor: se-resize; + width: 12px; + height: 12px; + right: 1px; + bottom: 1px; +} +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px; +} +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px; +} +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px; +} diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/selectable.css b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/selectable.css new file mode 100644 index 000000000..482597cec --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/selectable.css @@ -0,0 +1,17 @@ +/*! + * jQuery UI Selectable 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ +.ui-selectable { + -ms-touch-action: none; + touch-action: none; +} +.ui-selectable-helper { + position: absolute; + z-index: 100; + border: 1px dotted black; +} diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/selectmenu.css b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/selectmenu.css new file mode 100644 index 000000000..2417b6b40 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/selectmenu.css @@ -0,0 +1,59 @@ +/*! + * jQuery UI Selectmenu 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/selectmenu/#theming + */ +.ui-selectmenu-menu { + padding: 0; + margin: 0; + position: absolute; + top: 0; + left: 0; + display: none; +} +.ui-selectmenu-menu .ui-menu { + overflow: auto; + /* Support: IE7 */ + overflow-x: hidden; + padding-bottom: 1px; +} +.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup { + font-size: 1em; + font-weight: bold; + line-height: 1.5; + padding: 2px 0.4em; + margin: 0.5em 0 0 0; + height: auto; + border: 0; +} +.ui-selectmenu-open { + display: block; +} +.ui-selectmenu-button { + display: inline-block; + overflow: hidden; + position: relative; + text-decoration: none; + cursor: pointer; +} +.ui-selectmenu-button span.ui-icon { + right: 0.5em; + left: auto; + margin-top: -8px; + position: absolute; + top: 50%; +} +.ui-selectmenu-button span.ui-selectmenu-text { + text-align: left; + padding: 0.4em 2.1em 0.4em 1em; + display: block; + line-height: 1.4; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/slider.css b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/slider.css new file mode 100644 index 000000000..7c4f01ad8 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/slider.css @@ -0,0 +1,75 @@ +/*! + * jQuery UI Slider 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/slider/#theming + */ +.ui-slider { + position: relative; + text-align: left; +} +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1.2em; + height: 1.2em; + cursor: default; + -ms-touch-action: none; + touch-action: none; +} +.ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + font-size: .7em; + display: block; + border: 0; + background-position: 0 0; +} + +/* support: IE8 - See #6727 */ +.ui-slider.ui-state-disabled .ui-slider-handle, +.ui-slider.ui-state-disabled .ui-slider-range { + filter: inherit; +} + +.ui-slider-horizontal { + height: .8em; +} +.ui-slider-horizontal .ui-slider-handle { + top: -.3em; + margin-left: -.6em; +} +.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; +} +.ui-slider-horizontal .ui-slider-range-min { + left: 0; +} +.ui-slider-horizontal .ui-slider-range-max { + right: 0; +} + +.ui-slider-vertical { + width: .8em; + height: 100px; +} +.ui-slider-vertical .ui-slider-handle { + left: -.3em; + margin-left: 0; + margin-bottom: -.6em; +} +.ui-slider-vertical .ui-slider-range { + left: 0; + width: 100%; +} +.ui-slider-vertical .ui-slider-range-min { + bottom: 0; +} +.ui-slider-vertical .ui-slider-range-max { + top: 0; +} diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/sortable.css b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/sortable.css new file mode 100644 index 000000000..1c27badb4 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/sortable.css @@ -0,0 +1,12 @@ +/*! + * jQuery UI Sortable 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ +.ui-sortable-handle { + -ms-touch-action: none; + touch-action: none; +} diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/spinner.css b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/spinner.css new file mode 100644 index 000000000..9a9b78b4f --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/spinner.css @@ -0,0 +1,65 @@ +/*! + * jQuery UI Spinner 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/spinner/#theming + */ +.ui-spinner { + position: relative; + display: inline-block; + overflow: hidden; + padding: 0; + vertical-align: middle; +} +.ui-spinner-input { + border: none; + background: none; + color: inherit; + padding: 0; + margin: .2em 0; + vertical-align: middle; + margin-left: .4em; + margin-right: 22px; +} +.ui-spinner-button { + width: 16px; + height: 50%; + font-size: .5em; + padding: 0; + margin: 0; + text-align: center; + position: absolute; + cursor: default; + display: block; + overflow: hidden; + right: 0; +} +/* more specificity required here to override default borders */ +.ui-spinner a.ui-spinner-button { + border-top: none; + border-bottom: none; + border-right: none; +} +/* vertically center icon */ +.ui-spinner .ui-icon { + position: absolute; + margin-top: -8px; + top: 50%; + left: 0; +} +.ui-spinner-up { + top: 0; +} +.ui-spinner-down { + bottom: 0; +} + +/* TR overrides */ +.ui-spinner .ui-icon-triangle-1-s { + /* need to fix icons sprite */ + background-position: -65px -16px; +} diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/tabs.css b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/tabs.css new file mode 100644 index 000000000..c92a1b874 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/tabs.css @@ -0,0 +1,51 @@ +/*! + * jQuery UI Tabs 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/tabs/#theming + */ +.ui-tabs { + position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ + padding: .2em; +} +.ui-tabs .ui-tabs-nav { + margin: 0; + padding: .2em .2em 0; +} +.ui-tabs .ui-tabs-nav li { + list-style: none; + float: left; + position: relative; + top: 0; + margin: 1px .2em 0 0; + border-bottom-width: 0; + padding: 0; + white-space: nowrap; +} +.ui-tabs .ui-tabs-nav .ui-tabs-anchor { + float: left; + padding: .5em 1em; + text-decoration: none; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active { + margin-bottom: -1px; + padding-bottom: 1px; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor { + cursor: text; +} +.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { + cursor: pointer; +} +.ui-tabs .ui-tabs-panel { + display: block; + border-width: 0; + padding: 1em 1.4em; + background: none; +} diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/theme.css b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/theme.css new file mode 100644 index 000000000..da972f562 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/theme.css @@ -0,0 +1,444 @@ +/*! + * jQuery UI CSS Framework 1.12.0 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/category/theming/ + * + * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Arial%2CHelvetica%2Csans-serif&fsDefault=1em&fwDefault=normal&cornerRadius=3px&bgColorHeader=e9e9e9&bgTextureHeader=flat&borderColorHeader=dddddd&fcHeader=333333&iconColorHeader=444444&bgColorContent=ffffff&bgTextureContent=flat&borderColorContent=dddddd&fcContent=333333&iconColorContent=444444&bgColorDefault=f6f6f6&bgTextureDefault=flat&borderColorDefault=c5c5c5&fcDefault=454545&iconColorDefault=777777&bgColorHover=ededed&bgTextureHover=flat&borderColorHover=cccccc&fcHover=2b2b2b&iconColorHover=555555&bgColorActive=007fff&bgTextureActive=flat&borderColorActive=003eff&fcActive=ffffff&iconColorActive=ffffff&bgColorHighlight=fffa90&bgTextureHighlight=flat&borderColorHighlight=dad55e&fcHighlight=777620&iconColorHighlight=777620&bgColorError=fddfdf&bgTextureError=flat&borderColorError=f1a899&fcError=5f3f3f&iconColorError=cc0000&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=666666&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=5px&offsetTopShadow=0px&offsetLeftShadow=0px&cornerRadiusShadow=8px + */ + + +/* Component containers +----------------------------------*/ +.ui-widget { + font-family: Arial,Helvetica,sans-serif; + font-size: 1em; +} +.ui-widget .ui-widget { + font-size: 1em; +} +.ui-widget input, +.ui-widget select, +.ui-widget textarea, +.ui-widget button { + font-family: Arial,Helvetica,sans-serif; + font-size: 1em; +} +.ui-widget.ui-widget-content { + border: 1px solid #c5c5c5; +} +.ui-widget-content { + border: 1px solid #dddddd; + background: #ffffff; + color: #333333; +} +.ui-widget-content a { + color: #333333; +} +.ui-widget-header { + border: 1px solid #dddddd; + background: #e9e9e9; + color: #333333; + font-weight: bold; +} +.ui-widget-header a { + color: #333333; +} + +/* Interaction states +----------------------------------*/ +.ui-state-default, +.ui-widget-content .ui-state-default, +.ui-widget-header .ui-state-default, +.ui-button, + +/* We use html here because we need a greater specificity to make sure disabled +works properly when clicked or hovered */ +html .ui-button.ui-state-disabled:hover, +html .ui-button.ui-state-disabled:active { + border: 1px solid #c5c5c5; + background: #f6f6f6; + font-weight: normal; + color: #454545; +} +.ui-state-default a, +.ui-state-default a:link, +.ui-state-default a:visited, +a.ui-button, +a:link.ui-button, +a:visited.ui-button, +.ui-button { + color: #454545; + text-decoration: none; +} +.ui-state-hover, +.ui-widget-content .ui-state-hover, +.ui-widget-header .ui-state-hover, +.ui-state-focus, +.ui-widget-content .ui-state-focus, +.ui-widget-header .ui-state-focus, +.ui-button:hover, +.ui-button:focus { + border: 1px solid #cccccc; + background: #ededed; + font-weight: normal; + color: #2b2b2b; +} +.ui-state-hover a, +.ui-state-hover a:hover, +.ui-state-hover a:link, +.ui-state-hover a:visited, +.ui-state-focus a, +.ui-state-focus a:hover, +.ui-state-focus a:link, +.ui-state-focus a:visited, +a.ui-button:hover, +a.ui-button:focus { + color: #2b2b2b; + text-decoration: none; +} + +.ui-visual-focus { + box-shadow: 0 0 3px 1px rgb(94, 158, 214); +} +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active, +a.ui-button:active, +.ui-button:active, +.ui-button.ui-state-active:hover { + border: 1px solid #003eff; + background: #007fff; + font-weight: normal; + color: #ffffff; +} +.ui-icon-background, +.ui-state-active .ui-icon-background { + border: #003eff; + background-color: #ffffff; +} +.ui-state-active a, +.ui-state-active a:link, +.ui-state-active a:visited { + color: #ffffff; + text-decoration: none; +} + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, +.ui-widget-content .ui-state-highlight, +.ui-widget-header .ui-state-highlight { + border: 1px solid #dad55e; + background: #fffa90; + color: #777620; +} +.ui-state-checked { + border: 1px solid #dad55e; + background: #fffa90; +} +.ui-state-highlight a, +.ui-widget-content .ui-state-highlight a, +.ui-widget-header .ui-state-highlight a { + color: #777620; +} +.ui-state-error, +.ui-widget-content .ui-state-error, +.ui-widget-header .ui-state-error { + border: 1px solid #f1a899; + background: #fddfdf; + color: #5f3f3f; +} +.ui-state-error a, +.ui-widget-content .ui-state-error a, +.ui-widget-header .ui-state-error a { + color: #5f3f3f; +} +.ui-state-error-text, +.ui-widget-content .ui-state-error-text, +.ui-widget-header .ui-state-error-text { + color: #5f3f3f; +} +.ui-priority-primary, +.ui-widget-content .ui-priority-primary, +.ui-widget-header .ui-priority-primary { + font-weight: bold; +} +.ui-priority-secondary, +.ui-widget-content .ui-priority-secondary, +.ui-widget-header .ui-priority-secondary { + opacity: .7; + filter:Alpha(Opacity=70); /* support: IE8 */ + font-weight: normal; +} +.ui-state-disabled, +.ui-widget-content .ui-state-disabled, +.ui-widget-header .ui-state-disabled { + opacity: .35; + filter:Alpha(Opacity=35); /* support: IE8 */ + background-image: none; +} +.ui-state-disabled .ui-icon { + filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */ +} + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + width: 16px; + height: 16px; +} +.ui-icon, +.ui-widget-content .ui-icon { + background-image: url("images/ui-icons_444444_256x240.png"); +} +.ui-widget-header .ui-icon { + background-image: url("images/ui-icons_444444_256x240.png"); +} +.ui-button .ui-icon { + background-image: url("images/ui-icons_777777_256x240.png"); +} +.ui-state-hover .ui-icon, +.ui-state-focus .ui-icon, +.ui-button:hover .ui-icon, +.ui-button:focus .ui-icon, +.ui-state-default .ui-icon { + background-image: url("images/ui-icons_555555_256x240.png"); +} +.ui-state-active .ui-icon, +.ui-button:active .ui-icon { + background-image: url("images/ui-icons_ffffff_256x240.png"); +} +.ui-state-highlight .ui-icon, +.ui-button .ui-state-highlight.ui-icon { + background-image: url("images/ui-icons_777620_256x240.png"); +} +.ui-state-error .ui-icon, +.ui-state-error-text .ui-icon { + background-image: url("images/ui-icons_cc0000_256x240.png"); +} + +/* positioning */ +.ui-icon-blank { background-position: 16px 16px; } +.ui-icon-caret-1-n { background-position: 0 0; } +.ui-icon-caret-1-ne { background-position: -16px 0; } +.ui-icon-caret-1-e { background-position: -32px 0; } +.ui-icon-caret-1-se { background-position: -48px 0; } +.ui-icon-caret-1-s { background-position: -65px 0; } +.ui-icon-caret-1-sw { background-position: -80px 0; } +.ui-icon-caret-1-w { background-position: -96px 0; } +.ui-icon-caret-1-nw { background-position: -112px 0; } +.ui-icon-caret-2-n-s { background-position: -128px 0; } +.ui-icon-caret-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -65px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -65px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 1px -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-on { background-position: -96px -144px; } +.ui-icon-radio-off { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all, +.ui-corner-top, +.ui-corner-left, +.ui-corner-tl { + border-top-left-radius: 3px; +} +.ui-corner-all, +.ui-corner-top, +.ui-corner-right, +.ui-corner-tr { + border-top-right-radius: 3px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-left, +.ui-corner-bl { + border-bottom-left-radius: 3px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-right, +.ui-corner-br { + border-bottom-right-radius: 3px; +} + +/* Overlays */ +.ui-widget-overlay { + background: #aaaaaa; + opacity: .3; + filter: Alpha(Opacity=30); /* support: IE8 */ +} +.ui-widget-shadow { + -webkit-box-shadow: 0px 0px 5px #666666; + box-shadow: 0px 0px 5px #666666; +} diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/tooltip.css b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/tooltip.css new file mode 100644 index 000000000..6eb8b915d --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/base/tooltip.css @@ -0,0 +1,21 @@ +/*! + * jQuery UI Tooltip 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/tooltip/#theming + */ +.ui-tooltip { + padding: 8px; + position: absolute; + z-index: 9999; + max-width: 300px; + -webkit-box-shadow: 0 0 5px #aaa; + box-shadow: 0 0 5px #aaa; +} +body .ui-tooltip { + border-width: 2px; +} diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png new file mode 100644 index 000000000..7fb2b932b Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-bg_flat_15_cd0a0a_40x100.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-bg_flat_15_cd0a0a_40x100.png new file mode 100644 index 000000000..7916b0a98 Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-bg_flat_15_cd0a0a_40x100.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-bg_glass_100_e4f1fb_1x400.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-bg_glass_100_e4f1fb_1x400.png new file mode 100644 index 000000000..72c5f47f4 Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-bg_glass_100_e4f1fb_1x400.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-bg_glass_50_3baae3_1x400.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-bg_glass_50_3baae3_1x400.png new file mode 100644 index 000000000..f39e41955 Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-bg_glass_50_3baae3_1x400.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-bg_glass_80_d7ebf9_1x400.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-bg_glass_80_d7ebf9_1x400.png new file mode 100644 index 000000000..7b50c7013 Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-bg_glass_80_d7ebf9_1x400.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-bg_highlight-hard_100_f2f5f7_1x100.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-bg_highlight-hard_100_f2f5f7_1x100.png new file mode 100644 index 000000000..eaccbd176 Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-bg_highlight-hard_100_f2f5f7_1x100.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-bg_highlight-hard_70_000000_1x100.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-bg_highlight-hard_70_000000_1x100.png new file mode 100644 index 000000000..4daf51189 Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-bg_highlight-hard_70_000000_1x100.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-bg_highlight-soft_100_deedf7_1x100.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-bg_highlight-soft_100_deedf7_1x100.png new file mode 100644 index 000000000..765d7ca48 Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-bg_highlight-soft_100_deedf7_1x100.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-bg_highlight-soft_25_ffef8f_1x100.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-bg_highlight-soft_25_ffef8f_1x100.png new file mode 100644 index 000000000..237580040 Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-bg_highlight-soft_25_ffef8f_1x100.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-icons_2694e8_256x240.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-icons_2694e8_256x240.png new file mode 100644 index 000000000..252bf0f5d Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-icons_2694e8_256x240.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-icons_2e83ff_256x240.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-icons_2e83ff_256x240.png new file mode 100644 index 000000000..84b601bf0 Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-icons_2e83ff_256x240.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-icons_3d80b3_256x240.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-icons_3d80b3_256x240.png new file mode 100644 index 000000000..ff1c26ff0 Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-icons_3d80b3_256x240.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-icons_72a7cf_256x240.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-icons_72a7cf_256x240.png new file mode 100644 index 000000000..9d0791497 Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-icons_72a7cf_256x240.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-icons_ffffff_256x240.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-icons_ffffff_256x240.png new file mode 100644 index 000000000..4f624bb2b Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/images/ui-icons_ffffff_256x240.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/jquery-ui.cupertino.css b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/jquery-ui.cupertino.css new file mode 100644 index 000000000..583dafb9e --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/jquery-ui.cupertino.css @@ -0,0 +1,410 @@ +/*! + * jQuery UI CSS Framework 1.11.1 + * http://jqueryui.com + * + * Copyright 2014 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/category/theming/ + * + * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Lucida%20Grande%2CLucida%20Sans%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=deedf7&bgTextureHeader=highlight_soft&bgImgOpacityHeader=100&borderColorHeader=aed0ea&fcHeader=222222&iconColorHeader=72a7cf&bgColorContent=f2f5f7&bgTextureContent=highlight_hard&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=362b36&iconColorContent=72a7cf&bgColorDefault=d7ebf9&bgTextureDefault=glass&bgImgOpacityDefault=80&borderColorDefault=aed0ea&fcDefault=2779aa&iconColorDefault=3d80b3&bgColorHover=e4f1fb&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=74b2e2&fcHover=0070a3&iconColorHover=2694e8&bgColorActive=3baae3&bgTextureActive=glass&bgImgOpacityActive=50&borderColorActive=2694e8&fcActive=ffffff&iconColorActive=ffffff&bgColorHighlight=ffef8f&bgTextureHighlight=highlight_soft&bgImgOpacityHighlight=25&borderColorHighlight=f9dd34&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=cd0a0a&bgTextureError=flat&bgImgOpacityError=15&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffffff&bgColorOverlay=eeeeee&bgTextureOverlay=diagonals_thick&bgImgOpacityOverlay=90&opacityOverlay=80&bgColorShadow=000000&bgTextureShadow=highlight_hard&bgImgOpacityShadow=70&opacityShadow=30&thicknessShadow=7px&offsetTopShadow=-7px&offsetLeftShadow=-7px&cornerRadiusShadow=8px + */ + + +/* Component containers +----------------------------------*/ +.ui-widget { + font-family: Lucida Grande,Lucida Sans,Arial,sans-serif; + font-size: 1.1em; +} +.ui-widget .ui-widget { + font-size: 1em; +} +.ui-widget input, +.ui-widget select, +.ui-widget textarea, +.ui-widget button { + font-family: Lucida Grande,Lucida Sans,Arial,sans-serif; + font-size: 1em; +} +.ui-widget-content { + border: 1px solid #dddddd; + background: #f2f5f7 url("images/ui-bg_highlight-hard_100_f2f5f7_1x100.png") 50% top repeat-x; + color: #362b36; +} +.ui-widget-content a { + color: #362b36; +} +.ui-widget-header { + border: 1px solid #aed0ea; + background: #deedf7 url("images/ui-bg_highlight-soft_100_deedf7_1x100.png") 50% 50% repeat-x; + color: #222222; + font-weight: bold; +} +.ui-widget-header a { + color: #222222; +} + +/* Interaction states +----------------------------------*/ +.ui-state-default, +.ui-widget-content .ui-state-default, +.ui-widget-header .ui-state-default { + border: 1px solid #aed0ea; + background: #d7ebf9 url("images/ui-bg_glass_80_d7ebf9_1x400.png") 50% 50% repeat-x; + font-weight: bold; + color: #2779aa; +} +.ui-state-default a, +.ui-state-default a:link, +.ui-state-default a:visited { + color: #2779aa; + text-decoration: none; +} +.ui-state-hover, +.ui-widget-content .ui-state-hover, +.ui-widget-header .ui-state-hover, +.ui-state-focus, +.ui-widget-content .ui-state-focus, +.ui-widget-header .ui-state-focus { + border: 1px solid #74b2e2; + background: #e4f1fb url("images/ui-bg_glass_100_e4f1fb_1x400.png") 50% 50% repeat-x; + font-weight: bold; + color: #0070a3; +} +.ui-state-hover a, +.ui-state-hover a:hover, +.ui-state-hover a:link, +.ui-state-hover a:visited, +.ui-state-focus a, +.ui-state-focus a:hover, +.ui-state-focus a:link, +.ui-state-focus a:visited { + color: #0070a3; + text-decoration: none; +} +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active { + border: 1px solid #2694e8; + background: #3baae3 url("images/ui-bg_glass_50_3baae3_1x400.png") 50% 50% repeat-x; + font-weight: bold; + color: #ffffff; +} +.ui-state-active a, +.ui-state-active a:link, +.ui-state-active a:visited { + color: #ffffff; + text-decoration: none; +} + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, +.ui-widget-content .ui-state-highlight, +.ui-widget-header .ui-state-highlight { + border: 1px solid #f9dd34; + background: #ffef8f url("images/ui-bg_highlight-soft_25_ffef8f_1x100.png") 50% top repeat-x; + color: #363636; +} +.ui-state-highlight a, +.ui-widget-content .ui-state-highlight a, +.ui-widget-header .ui-state-highlight a { + color: #363636; +} +.ui-state-error, +.ui-widget-content .ui-state-error, +.ui-widget-header .ui-state-error { + border: 1px solid #cd0a0a; + background: #cd0a0a url("images/ui-bg_flat_15_cd0a0a_40x100.png") 50% 50% repeat-x; + color: #ffffff; +} +.ui-state-error a, +.ui-widget-content .ui-state-error a, +.ui-widget-header .ui-state-error a { + color: #ffffff; +} +.ui-state-error-text, +.ui-widget-content .ui-state-error-text, +.ui-widget-header .ui-state-error-text { + color: #ffffff; +} +.ui-priority-primary, +.ui-widget-content .ui-priority-primary, +.ui-widget-header .ui-priority-primary { + font-weight: bold; +} +.ui-priority-secondary, +.ui-widget-content .ui-priority-secondary, +.ui-widget-header .ui-priority-secondary { + opacity: .7; + filter:Alpha(Opacity=70); /* support: IE8 */ + font-weight: normal; +} +.ui-state-disabled, +.ui-widget-content .ui-state-disabled, +.ui-widget-header .ui-state-disabled { + opacity: .35; + filter:Alpha(Opacity=35); /* support: IE8 */ + background-image: none; +} +.ui-state-disabled .ui-icon { + filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */ +} + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + width: 16px; + height: 16px; +} +.ui-icon, +.ui-widget-content .ui-icon { + background-image: url("images/ui-icons_72a7cf_256x240.png"); +} +.ui-widget-header .ui-icon { + background-image: url("images/ui-icons_72a7cf_256x240.png"); +} +.ui-state-default .ui-icon { + background-image: url("images/ui-icons_3d80b3_256x240.png"); +} +.ui-state-hover .ui-icon, +.ui-state-focus .ui-icon { + background-image: url("images/ui-icons_2694e8_256x240.png"); +} +.ui-state-active .ui-icon { + background-image: url("images/ui-icons_ffffff_256x240.png"); +} +.ui-state-highlight .ui-icon { + background-image: url("images/ui-icons_2e83ff_256x240.png"); +} +.ui-state-error .ui-icon, +.ui-state-error-text .ui-icon { + background-image: url("images/ui-icons_ffffff_256x240.png"); +} + +/* positioning */ +.ui-icon-blank { background-position: 16px 16px; } +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-on { background-position: -96px -144px; } +.ui-icon-radio-off { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all, +.ui-corner-top, +.ui-corner-left, +.ui-corner-tl { + border-top-left-radius: 6px; +} +.ui-corner-all, +.ui-corner-top, +.ui-corner-right, +.ui-corner-tr { + border-top-right-radius: 6px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-left, +.ui-corner-bl { + border-bottom-left-radius: 6px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-right, +.ui-corner-br { + border-bottom-right-radius: 6px; +} + +/* Overlays */ +.ui-widget-overlay { + background: #eeeeee url("images/ui-bg_diagonals-thick_90_eeeeee_40x40.png") 50% 50% repeat; + opacity: .8; + filter: Alpha(Opacity=80); /* support: IE8 */ +} +.ui-widget-shadow { + margin: -7px 0 0 -7px; + padding: 7px; + background: #000000 url("images/ui-bg_highlight-hard_70_000000_1x100.png") 50% top repeat-x; + opacity: .3; + filter: Alpha(Opacity=30); /* support: IE8 */ + border-radius: 8px; +} diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/jquery-ui.cupertino.min.css b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/jquery-ui.cupertino.min.css new file mode 100644 index 000000000..212153ff1 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Content/themes/cupertino/jquery-ui.cupertino.min.css @@ -0,0 +1,5 @@ +/*! jQuery UI - v1.11.1 - 2014-08-30 +* http://jqueryui.com +* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ + +.ui-widget{font-family:Lucida Grande,Lucida Sans,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Lucida Grande,Lucida Sans,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #ddd;background:#f2f5f7 url("images/ui-bg_highlight-hard_100_f2f5f7_1x100.png") 50% top repeat-x;color:#362b36}.ui-widget-content a{color:#362b36}.ui-widget-header{border:1px solid #aed0ea;background:#deedf7 url("images/ui-bg_highlight-soft_100_deedf7_1x100.png") 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #aed0ea;background:#d7ebf9 url("images/ui-bg_glass_80_d7ebf9_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#2779aa}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#2779aa;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #74b2e2;background:#e4f1fb url("images/ui-bg_glass_100_e4f1fb_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#0070a3}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited{color:#0070a3;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #2694e8;background:#3baae3 url("images/ui-bg_glass_50_3baae3_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#fff}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#fff;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #f9dd34;background:#ffef8f url("images/ui-bg_highlight-soft_25_ffef8f_1x100.png") 50% top repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#cd0a0a url("images/ui-bg_flat_15_cd0a0a_40x100.png") 50% 50% repeat-x;color:#fff}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#fff}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#fff}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_72a7cf_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_72a7cf_256x240.png")}.ui-state-default .ui-icon{background-image:url("images/ui-icons_3d80b3_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url("images/ui-icons_2694e8_256x240.png")}.ui-state-active .ui-icon{background-image:url("images/ui-icons_ffffff_256x240.png")}.ui-state-highlight .ui-icon{background-image:url("images/ui-icons_2e83ff_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_ffffff_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:6px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:6px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:6px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:6px}.ui-widget-overlay{background:#eee url("images/ui-bg_diagonals-thick_90_eeeeee_40x40.png") 50% 50% repeat;opacity:.8;filter:Alpha(Opacity=80)}.ui-widget-shadow{margin:-7px 0 0 -7px;padding:7px;background:#000 url("images/ui-bg_highlight-hard_70_000000_1x100.png") 50% top repeat-x;opacity:.3;filter:Alpha(Opacity=30);border-radius:8px} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/AccountController.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/AccountController.cs new file mode 100644 index 000000000..0225a2ba5 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/AccountController.cs @@ -0,0 +1,235 @@ +namespace Suteki.TardisBank.Web.Mvc.Controllers +{ + using System; + using System.Web.Mvc; + using MediatR; + using SharpArch.Web.Mvc; + using Suteki.TardisBank.Domain; + using Suteki.TardisBank.Tasks; + using Suteki.TardisBank.Web.Mvc.Controllers.ViewModels; + using Suteki.TardisBank.Web.Mvc.Utilities; + + public class AccountController : Controller + { + readonly IMediator mediator; + readonly IUserService userService; + + public AccountController(IUserService userService, IMediator mediator) + { + this.userService = userService; + this.mediator = mediator; + } + + [HttpGet, Transaction] + public ActionResult MakePayment(int id) + { + // id is the child's user name + if (id == 0) + { + throw new ArgumentNullException("id"); + } + + var parent = userService.CurrentUser as Parent; + var child = userService.GetUser(id) as Child; + + if (userService.AreNullOrNotRelated(parent, child)) + { + return StatusCode.NotFound; + } + + return View("MakePayment", new MakePaymentViewModel + { + ChildId = child.Id, + ChildName = child.Name, + Description = "", + Amount = 0M + }); + } + + [HttpPost, Transaction] + public ActionResult MakePayment(MakePaymentViewModel makePaymentViewModel) + { + if (!ModelState.IsValid) + { + return View("MakePayment", makePaymentViewModel); + } + if (makePaymentViewModel == null) + { + throw new ArgumentNullException("makePaymentViewModel"); + } + + if (makePaymentViewModel.Amount == 0M) + { + ModelState.AddModelError("Amount", "A payment of zero? That's not nice."); + return View("MakePayment", makePaymentViewModel); + } + + var parent = userService.CurrentUser as Parent; + var child = userService.GetUser(makePaymentViewModel.ChildId) as Child; + + if (userService.AreNullOrNotRelated(parent, child)) + { + return StatusCode.NotFound; + } + + parent.MakePaymentTo(child, makePaymentViewModel.Amount, makePaymentViewModel.Description); + + return View("PaymentConfirmation", makePaymentViewModel); + } + + + [HttpGet, Transaction] + public ActionResult ParentView(int id) + { + var parent = userService.CurrentUser as Parent; + var child = userService.GetUser(id) as Child; + + if (userService.AreNullOrNotRelated(parent, child)) + { + return StatusCode.NotFound; + } + + return View("Summary", new AccountSummaryViewModel + { + Parent = parent, + Child = child + }); + } + + [HttpGet, Transaction] + public ActionResult ChildView() + { + var child = userService.CurrentUser as Child; + if (child == null) + { + return StatusCode.NotFound; + } + return View("Summary", new AccountSummaryViewModel + { + Child = child + }); + } + + [HttpGet, Transaction] + public ActionResult WithdrawCash() + { + var child = userService.CurrentUser as Child; + if (child == null) + { + return StatusCode.NotFound; + } + + return View("WithdrawCash", new WithdrawCashViewModel + { + Amount = 0M, + Description = "" + }); + } + + [HttpPost, Transaction] + public ActionResult WithdrawCash(WithdrawCashViewModel withdrawCashViewModel) + { + if (!ModelState.IsValid) + { + return View("WithdrawCash", withdrawCashViewModel); + } + if (withdrawCashViewModel == null) + { + throw new ArgumentNullException("withdrawCashViewModel"); + } + + if (withdrawCashViewModel.Amount == 0M) + { + ModelState.AddModelError("Amount", "There's no point in asking for zero cash."); + return View("WithdrawCash", withdrawCashViewModel); + } + + var child = userService.CurrentUser as Child; + if (child == null) + { + return StatusCode.NotFound; + } + var parent = userService.GetUser(child.ParentId) as Parent; + if (parent == null) + { + throw new TardisBankException("Parent with id '{0}' not found", child.ParentId); + } + + try + { + child.WithdrawCashFromParent( + parent, + withdrawCashViewModel.Amount, + withdrawCashViewModel.Description, mediator); + } + catch (CashWithdrawException cashWithdrawException) + { + ModelState.AddModelError("Amount", cashWithdrawException.Message); + return View("WithdrawCash", withdrawCashViewModel); + } + + return View("WithdrawCashConfirm", withdrawCashViewModel); + } + + [HttpGet, Transaction] + public ActionResult WithdrawCashForChild(int id) + { + var parent = userService.CurrentUser as Parent; + var child = userService.GetUser(id) as Child; + + if (userService.AreNullOrNotRelated(parent, child)) + { + return StatusCode.NotFound; + } + + return View(new WithdrawCashForChildViewModel + { + ChildId = child.Id, + ChildName = child.Name, + Description = "", + Amount = 0M + }); + } + + [HttpPost, Transaction] + public ActionResult WithdrawCashForChild(WithdrawCashForChildViewModel withdrawCashForChildViewModel) + { + if (!ModelState.IsValid) + { + return View(withdrawCashForChildViewModel); + } + if (withdrawCashForChildViewModel == null) + { + throw new ArgumentNullException("withdrawCashForChildViewModel"); + } + + if (withdrawCashForChildViewModel.Amount == 0M) + { + ModelState.AddModelError("Amount", "0.00 is not a valid amount."); + return View(withdrawCashForChildViewModel); + } + + var child = userService.GetUser(withdrawCashForChildViewModel.ChildId) as Child; + var parent = userService.CurrentUser as Parent; + if (userService.AreNullOrNotRelated(parent, child)) + { + return StatusCode.NotFound; + } + + try + { + child.AcceptCashFromParent( + parent, + withdrawCashForChildViewModel.Amount, + withdrawCashForChildViewModel.Description); + } + catch (CashWithdrawException cashWithdrawException) + { + ModelState.AddModelError("Amount", cashWithdrawException.Message); + return View(withdrawCashForChildViewModel); + } + + return View("WithdrawCashForChildConfirm", withdrawCashForChildViewModel); + } + } +} diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/AdminController.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/AdminController.cs new file mode 100644 index 000000000..1b1350440 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/AdminController.cs @@ -0,0 +1,89 @@ +namespace Suteki.TardisBank.Web.Mvc.Controllers +{ + using System.Web.Mvc; + + using Suteki.TardisBank.Domain; + using Suteki.TardisBank.Tasks; + using Suteki.TardisBank.Web.Mvc.Controllers.ViewModels; + using Suteki.TardisBank.Web.Mvc.Utilities; + + public class AdminController : Controller + { + readonly IUserService userService; + readonly IFormsAuthenticationService formsAuthenticationService; + + public AdminController(IUserService userService, IFormsAuthenticationService formsAuthenticationService) + { + this.userService = userService; + this.formsAuthenticationService = formsAuthenticationService; + } + + [HttpGet] + public ActionResult Index() + { + return this.View(); + } + + [HttpGet] + public ActionResult DeleteParentConfirm() + { + return this.View(); + } + + [HttpGet, SharpArch.Web.Mvc.Transaction] + public ActionResult DeleteParent() + { + var parent = this.userService.CurrentUser as Parent; + if (parent == null) + { + return StatusCode.NotFound; + } + + foreach (var childProxy in parent.Children) + { + this.userService.DeleteUser(childProxy.Id); + } + this.userService.DeleteUser(parent.Id); + + return this.RedirectToAction("Logout", "User"); + } + + [HttpGet] + public ActionResult ChangePassword() + { + return this.View(); + } + + [HttpPost, SharpArch.Web.Mvc.Transaction] + public ActionResult ChangePassword(ChangePasswordViewModel model) + { + + var oldHashedPassword = this.GetHashedPassword(model.OldPassword); + bool passwordIsOk = false; + if (oldHashedPassword == this.userService.CurrentUser.Password) + { + passwordIsOk = true; + } + else + { + this.ModelState.AddModelError("OldPassword", "The password you provided is invalid"); + } + if (this.ModelState.IsValid && passwordIsOk) + { + var newHashedPassword = this.GetHashedPassword(model.NewPassword); + this.userService.CurrentUser.ResetPassword(newHashedPassword); + // TODO: we should have also a flash message saying it's been successful + return this.RedirectToAction("Index"); + } + return this.View(); + } + + private string GetHashedPassword(string password) + { + return this.formsAuthenticationService.HashAndSalt( + this.userService.CurrentUser.UserName, + password); + } + + } +} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/AnalyticsController.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/AnalyticsController.cs new file mode 100644 index 000000000..f8fa3b657 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/AnalyticsController.cs @@ -0,0 +1,22 @@ +namespace Suteki.TardisBank.Web.Mvc.Controllers +{ + using System.Web.Mvc; + + using Suteki.TardisBank.Tasks; + + public class AnalyticsController : Controller + { + readonly TardisConfiguration configuration; + + public AnalyticsController(TardisConfiguration configuration) + { + this.configuration = configuration; + } + + [ChildActionOnly] + public PartialViewResult Index() + { + return this.PartialView(this.configuration); + } + } +} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/AnnouncementsController.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/AnnouncementsController.cs new file mode 100644 index 000000000..fc4b3ac40 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/AnnouncementsController.cs @@ -0,0 +1,101 @@ +namespace Suteki.TardisBank.Web.Mvc.Controllers +{ + using System.Collections.Generic; + using System.Diagnostics; + using System.Linq; + using System.Web.Http; + using AutoMapper; + using AutoMapper.QueryableExtensions; + using NHibernate.Linq; + using SharpArch.Domain.PersistenceSupport; + using SharpArch.Web.Http; + using Suteki.TardisBank.Domain; + using Suteki.TardisBank.Web.Mvc.Models; + using Suteki.TardisBank.Web.Mvc.WebApi; + + /// + /// Provides WebApi access to announcements. + /// + [Transaction] + [RoutePrefix("api/announcements")] + public class AnnouncementsController : ApiController + { + private readonly ILinqRepository announcementRepository; + + /// + /// Creates AnnouncementController. + /// + /// Announcements repository. + public AnnouncementsController(ILinqRepository announcementRepository) + { + this.announcementRepository = announcementRepository; + Debug.WriteLine("Created Announcements controller {0:x}", GetHashCode()); + } + + /// + /// Retrieves announcements. + /// + /// Announcement sorted by date (desc). + public IEnumerable Get() + { + return announcementRepository.FindAll().Cacheable() + .OrderByDescending(a => a.Date) + .ProjectTo(); + } + + /// + /// Retrieves announcement by Id. + /// + /// Id. + /// + /// Announcement data. + /// + public AnnouncementModel Get(int id) + { + var announcement = announcementRepository.Get(id); + return announcement != null ? Mapper.Map(announcement) : null; + } + + [Authorize(Roles = UserRoles.Parent)] + [ValidateModel] + public IHttpActionResult PostAnnouncement(AnnouncementModel model) + { + var announcement = Mapper.Map(model); + announcementRepository.Save(announcement); + var location = Url.Link("DefaultApi", new { controller = "Announcements", id = announcement.Id }); + return Created(location, announcement); + } + + /// + /// Removes announcement. + /// + /// Announcement Id. + /// OK + [Authorize(Roles = UserRoles.Parent)] + public IHttpActionResult Delete(int id) + { + announcementRepository.Delete(id); + return Ok(new { result = "OK" }); + } + + /// + /// Retrieves last 10 announcements. + /// + /// Announcement, newest first. + [Route("latest")] + [HttpGet] + public IEnumerable Latest() + { + return announcementRepository.FindAll().Cacheable() + .OrderByDescending(a => a.Date) + .Take(10) + .ProjectTo(); + } + + protected override void Dispose(bool disposing) + { + Debug.WriteLine("Disposing AnnouncementController {0:x}", GetHashCode()); + base.Dispose(disposing); + } + } +} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ChildController.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ChildController.cs new file mode 100644 index 000000000..03ca53432 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ChildController.cs @@ -0,0 +1,62 @@ +namespace Suteki.TardisBank.Web.Mvc.Controllers +{ + using System.Web.Mvc; + + using Suteki.TardisBank.Domain; + using Suteki.TardisBank.Tasks; + using Suteki.TardisBank.Web.Mvc.Controllers.ViewModels; + using Suteki.TardisBank.Web.Mvc.Utilities; + + [SharpArch.Web.Mvc.Transaction] + public class ChildController : Controller + { + readonly IUserService userService; + + public ChildController(IUserService userService) + { + this.userService = userService; + } + + [HttpGet] + public ActionResult Index() + { + var parent = this.userService.CurrentUser as Parent; + if (parent == null) + { + return StatusCode.NotFound; + } + + return this.View(parent); + } + + [HttpGet] + public ActionResult DeleteChild(int id) + { + // id is the child's user name + var child = this.userService.GetUser(id) as Child; + if (child == null) + { + return StatusCode.NotFound; + } + + return this.View(new DeleteChildConfirmViewModel + { + ChildId = child.Id, + ChildName = child.Name + }); + } + + [HttpPost] + public ActionResult DeleteChild(DeleteChildConfirmViewModel deleteChildConfirmViewModel) + { + var parent = this.userService.CurrentUser as Parent; + if (parent == null || !parent.HasChild(deleteChildConfirmViewModel.ChildId)) + { + return StatusCode.NotFound; + } + parent.RemoveChild(deleteChildConfirmViewModel.ChildId); + this.userService.DeleteUser(deleteChildConfirmViewModel.ChildId); + return this.RedirectToAction("Index"); + } + } +} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/HomeController.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/HomeController.cs new file mode 100644 index 000000000..aff8e7eb4 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/HomeController.cs @@ -0,0 +1,35 @@ +namespace Suteki.TardisBank.Web.Mvc.Controllers +{ + using System.Web.Mvc; + + using Suteki.TardisBank.Domain; + + public class HomeController : Controller + { + public ViewResult Index() + { + return this.View("Index"); + } + + public ViewResult Error() + { + // throw an error for testing + throw new TardisBankException("Something really bad happened!"); + } + + public ActionResult NotFound() + { + return new HttpStatusCodeResult(404); + } + + public ViewResult About() + { + return this.View(); + } + + public ViewResult Legal() + { + return this.View(); + } + } +} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/MenuController.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/MenuController.cs new file mode 100644 index 000000000..4c441edbc --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/MenuController.cs @@ -0,0 +1,29 @@ +namespace Suteki.TardisBank.Web.Mvc.Controllers +{ + using System.Web.Mvc; + + using Suteki.TardisBank.Domain; + using Suteki.TardisBank.Tasks; + + public class MenuController : Controller + { + readonly IUserService userService; + + public MenuController(IUserService userService) + { + this.userService = userService; + } + + [ChildActionOnly] + public PartialViewResult Index() + { + var user = this.userService.CurrentUser; + + if (user == null) return this.PartialView("GuestMenu"); + if (user is Parent) return this.PartialView("ParentMenu", user as Parent); + if (user is Child) return this.PartialView("ChildMenu", user as Child); + + throw new TardisBankException("Unknown User type"); + } + } +} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/NewsController.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/NewsController.cs new file mode 100644 index 000000000..e623144a1 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/NewsController.cs @@ -0,0 +1,42 @@ +namespace Suteki.TardisBank.Web.Mvc.Controllers +{ + using System; + using System.Web.Mvc; + using Suteki.TardisBank.Domain; + using Suteki.TardisBank.Tasks; + using Suteki.TardisBank.Web.Mvc.Models.News; + + public class NewsController : Controller + { + readonly IHttpContextService context; + + + /// + /// Initializes a new instance of the class. + /// + /// is . + public NewsController(IHttpContextService context) + { + if (context == null) throw new ArgumentNullException("context"); + this.context = context; + } + + + // GET: News + public ActionResult Index() + { + var vm = new NewsListModel + { + IsParent = context.UserIsInRole(UserRoles.Parent), + }; + + return View(vm); + } + + [Authorize(Roles = UserRoles.Parent)] + public ActionResult Edit() + { + return View(); + } + } +} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/PasswordController.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/PasswordController.cs new file mode 100644 index 000000000..ae4be0121 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/PasswordController.cs @@ -0,0 +1,98 @@ +namespace Suteki.TardisBank.Web.Mvc.Controllers +{ + using System; + using System.Web.Mvc; + + using Suteki.TardisBank.Domain; + using Suteki.TardisBank.Tasks; + using Suteki.TardisBank.Web.Mvc.Controllers.ViewModels; + using Suteki.TardisBank.Web.Mvc.Utilities; + + public class PasswordController : Controller + { + readonly IUserService userService; + readonly IEmailService emailService; + readonly IFormsAuthenticationService formsAuthenticationService; + + public PasswordController(IUserService userService, IEmailService emailService, IFormsAuthenticationService formsAuthenticationService) + { + this.userService = userService; + this.formsAuthenticationService = formsAuthenticationService; + this.emailService = emailService; + } + + [HttpGet, SharpArch.Web.Mvc.Transaction] + public ActionResult Forgot() + { + return this.View("Forgot", new ForgottenPasswordViewModel + { + UserName = "", + }); + } + + [HttpPost, SharpArch.Web.Mvc.Transaction] + public ActionResult Forgot(ForgottenPasswordViewModel forgottenPasswordViewModel) + { + if (!this.ModelState.IsValid) return this.View("Forgot", forgottenPasswordViewModel); + if (forgottenPasswordViewModel == null) + { + throw new ArgumentNullException("forgottenPasswordViewModel"); + } + + var user = this.userService.GetUserByUserName(forgottenPasswordViewModel.UserName); + if (user == null) + { + this.ModelState.AddModelError("UserName", "We don't have a record of that email or user name."); + return this.View("Forgot", forgottenPasswordViewModel); + } + + if (user is Child) + { + var parent = this.userService.GetUser(((Child)user).ParentId); + if (parent == null) + { + throw new TardisBankException("Missing parent: {0}", ((Child)user).ParentId); + } + + this.SendPasswordResetEmail(user, toAddress: parent.UserName); + return this.RedirectToAction("ChildConfirm"); + } + + if (user is Parent) + { + this.SendPasswordResetEmail(user, toAddress: user.UserName); + return this.RedirectToAction("ParentConfirm"); + } + + throw new TardisBankException("unknown User subtype"); + } + + string GetNewPasswordFor(User user) + { + var newPassword = Guid.NewGuid().ToString().Substring(0, 5); + var hashedPassword = this.formsAuthenticationService.HashAndSalt(user.UserName, newPassword); + user.ResetPassword(hashedPassword); + return newPassword; + } + + void SendPasswordResetEmail(User user, string toAddress) + { + var isChildString = user is Child ? user.Name + "'s" : "Your"; + var subject = string.Format("Tardis Bank: {0} reset password", isChildString); + var body = string.Format("Here is {0} new password: {1}", isChildString, this.GetNewPasswordFor(user)); + this.emailService.SendEmail(toAddress, subject, body); + } + + [HttpGet] + public ViewResult ChildConfirm() + { + return this.View(); + } + + [HttpGet] + public ViewResult ParentConfirm() + { + return this.View(); + } + } +} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ScheduleController.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ScheduleController.cs new file mode 100644 index 000000000..4de06c4c1 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ScheduleController.cs @@ -0,0 +1,76 @@ +namespace Suteki.TardisBank.Web.Mvc.Controllers +{ + using System; + using System.Web.Mvc; + + using Domain; + using Tasks; + using ViewModels; + using Utilities; + + public class ScheduleController : Controller + { + readonly IUserService userService; + + public ScheduleController(IUserService userService) + { + this.userService = userService; + } + + [HttpGet, SharpArch.Web.Mvc.Transaction] + public ActionResult AddSchedule(int id) + { + // id is the child's username + var child = this.userService.GetUser(id) as Child; + if (this.userService.IsNotChildOfCurrentUser(child)) return StatusCode.NotFound; + + // give the user some defaults + var addScheduleViewModel = new AddScheduleViewModel + { + ChildId = child.Id, + Amount = 1.0M, + Description = "Pocket Money", + Interval = Interval.Week, + StartDate = DateTime.Now + }; + + return this.View("AddSchedule", addScheduleViewModel); + } + + [HttpPost, SharpArch.Web.Mvc.Transaction] + public ActionResult AddSchedule(AddScheduleViewModel addScheduleViewModel) + { + if (!this.ModelState.IsValid) return this.View("AddSchedule", addScheduleViewModel); + + if (addScheduleViewModel.StartDate < DateTime.Now.Date) + { + this.ModelState.AddModelError("StartDate", "The start date can not be in the past."); + return this.View("AddSchedule", addScheduleViewModel); + } + + var child = this.userService.GetUser(addScheduleViewModel.ChildId) as Child; + if (this.userService.IsNotChildOfCurrentUser(child)) return StatusCode.NotFound; + + child.Account.AddPaymentSchedule( + addScheduleViewModel.StartDate, + addScheduleViewModel.Interval, + addScheduleViewModel.Amount, + addScheduleViewModel.Description + ); + + return this.View("AddScheduleConfirm", addScheduleViewModel); + } + + [HttpGet, SharpArch.Web.Mvc.Transaction] + public ActionResult RemoveSchedule(int id, int scheduleId) + { + // id is the child user name + var child = this.userService.GetUser(id) as Child; + if (this.userService.IsNotChildOfCurrentUser(child)) return StatusCode.NotFound; + + child.Account.RemovePaymentSchedule(scheduleId); + + return this.Redirect(this.Request.UrlReferrer.OriginalString); + } + } +} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ScheduleRunnerController.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ScheduleRunnerController.cs new file mode 100644 index 000000000..71221b793 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ScheduleRunnerController.cs @@ -0,0 +1,29 @@ +namespace Suteki.TardisBank.Web.Mvc.Controllers +{ + using System; + using System.Web.Mvc; + + using Suteki.TardisBank.Tasks; + using Suteki.TardisBank.Web.Mvc.Utilities; + + public class ScheduleRunnerController : Controller + { + readonly ISchedulerService schedulerService; + readonly TardisConfiguration configuration; + + public ScheduleRunnerController(ISchedulerService schedulerService, TardisConfiguration configuration) + { + this.schedulerService = schedulerService; + this.configuration = configuration; + } + + [HttpGet, SharpArch.Web.Mvc.Transaction] + public ActionResult Execute(string id) + { + if (id == null || this.configuration.ScheduleKey != id) return StatusCode.NotFound; + + this.schedulerService.ExecuteUpdates(DateTime.Now); + return StatusCode.Ok; + } + } +} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/UserController.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/UserController.cs new file mode 100644 index 000000000..db01d8e18 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/UserController.cs @@ -0,0 +1,254 @@ +namespace Suteki.TardisBank.Web.Mvc.Controllers +{ + using System; + using System.Web.Mvc; + using MediatR; + using SharpArch.Web.Mvc; + using Suteki.TardisBank.Domain; + using Suteki.TardisBank.Tasks; + using Suteki.TardisBank.Web.Mvc.Controllers.ViewModels; + using Suteki.TardisBank.Web.Mvc.Utilities; + + public class UserController : Controller + { + readonly TardisConfiguration configuration; + readonly IFormsAuthenticationService formsAuthenticationService; + readonly IMediator mediator; + readonly IUserService userService; + + public UserController(IUserService userService, IFormsAuthenticationService formsAuthenticationService, + TardisConfiguration configuration, IMediator mediator) + { + this.userService = userService; + this.formsAuthenticationService = formsAuthenticationService; + this.configuration = configuration; + this.mediator = mediator; + } + + [ChildActionOnly] + public ActionResult DisplayGreeting() + { + var user = userService.CurrentUser; + var userName = user == null ? "Hello Stranger!" : user.UserName; + return this.PartialView("DisplayGreeting", new UserViewModel { UserName = userName, IsLoggedIn = user != null }); + } + + [HttpGet] + public ActionResult Register() + { + return View("Register", GetRegistrationViewModel()); + } + + static RegistrationViewModel GetRegistrationViewModel() + { + return new RegistrationViewModel + { + Email = "", + Name = "", + Password = "" + }; + } + + [HttpPost, Transaction] + public ActionResult Register(RegistrationViewModel registrationViewModel) + { + return RegisterInternal(registrationViewModel, "Sorry, that email address has already been registered.", + pwd => + new Parent(registrationViewModel.Name, registrationViewModel.Email, pwd).Initialise(mediator), + () => RedirectToAction("Confirm"), () => View("Register", registrationViewModel) + ); + } + + ActionResult RegisterInternal( + RegistrationViewModel registrationViewModel, + string usernameTakenMessage, + Func createUser, + Func confirmAction, + Func invalidModelStateAction, + Action afterUserCreated = null) + { + if (registrationViewModel == null) + { + throw new ArgumentNullException("registrationViewModel"); + } + if (createUser == null) + { + throw new ArgumentNullException("createUser"); + } + if (confirmAction == null) + { + throw new ArgumentNullException("confirmAction"); + } + if (invalidModelStateAction == null) + { + throw new ArgumentNullException("invalidModelStateAction"); + } + + if (ModelState.IsValid) + { + var conflictedUser = userService.GetUserByUserName(registrationViewModel.Email); + if (conflictedUser != null) + { + ModelState.AddModelError("Email", usernameTakenMessage); + return invalidModelStateAction(); + } + + var hashedPassword = formsAuthenticationService.HashAndSalt( + registrationViewModel.Email, + registrationViewModel.Password); + + var user = createUser(hashedPassword); + + if (string.IsNullOrWhiteSpace(configuration.EmailSmtpServer)) + { + // if no smtp server configured, just activate user as no email is sent out. + user.Activate(); + } + + userService.SaveUser(user); + + if (afterUserCreated != null) + { + afterUserCreated(user); + } + return confirmAction(); + } + + return invalidModelStateAction(); + } + + [HttpGet] + public ActionResult Confirm() + { + return View("Confirm"); + } + + [HttpGet, Transaction] + public ActionResult Activate(string id) + { + // id is the activation key + var user = userService.GetUserByActivationKey(id); + if (user == null) + { + return View("ActivationFailed"); + } + user.Activate(); + return View("ActivateConfirm"); + } + + [HttpGet] + public ActionResult Login() + { + var loginViewModel = new LoginViewModel + { + Name = "", + Password = "" + }; + return View("Login", loginViewModel); + } + + [HttpPost, Transaction] + public ActionResult Login(LoginViewModel loginViewModel) + { + if (ModelState.IsValid) + { + var user = userService.GetUserByUserName(loginViewModel.Name); + if (user != null) + { + if (!user.IsActive) + { + ModelState.AddModelError( + "Name", "Please activate your account first by clicking on the link in your " + + "activation email."); + return View("Login", loginViewModel); + } + + var hashedPassword = formsAuthenticationService.HashAndSalt( + loginViewModel.Name, + loginViewModel.Password); + + if (hashedPassword == user.Password) + { + formsAuthenticationService.SetAuthCookie(user.UserName, GetRoles(user), false); + if (user is Child) + { + return RedirectToAction("ChildView", "Account"); + } + return RedirectToAction("Index", "Child"); + } + ModelState.AddModelError("Password", "Invalid Password"); + } + else + { + ModelState.AddModelError("Name", "Invalid Name"); + } + } + + return View("Login", loginViewModel); + } + + string[] GetRoles(User user) + { + return user.GetRoles(); + } + + [HttpGet] + public ActionResult Logout() + { + formsAuthenticationService.SignOut(); + return RedirectToAction("Index", "Home"); + } + + [HttpGet, Transaction] + public ActionResult AddChild() + { + var parent = userService.CurrentUser as Parent; + if (parent == null) + { + //throw new TardisBankException("You must be a parent in order to register a Child"); + return StatusCode.NotFound; + } + + return View("AddChild", GetRegistrationViewModel()); + } + + [HttpPost, Transaction] + public ActionResult AddChild(RegistrationViewModel registrationViewModel) + { + var parent = userService.CurrentUser as Parent; + if (parent == null) + { + //throw new TardisBankException("You must be a parent in order to register a Child"); + return StatusCode.NotFound; + } + + return RegisterInternal(registrationViewModel, "Sorry, that user name has already been taken", + pwd => parent.CreateChild(registrationViewModel.Name, registrationViewModel.Email, pwd), + () => RedirectToAction("Index", "Child"), () => View("AddChild", registrationViewModel) + ); + } + + [HttpGet, Transaction] + public ActionResult Messages() + { + var user = userService.CurrentUser; + if (user == null) + { + return StatusCode.NotFound; + } + return View("Messages", user); + } + + [HttpGet, Transaction] + public ActionResult ReadMessage(int id) + { + var user = userService.CurrentUser; + if (user == null) + { + return StatusCode.NotFound; + } + user.ReadMessage(id); + return RedirectToAction("Messages"); + } + } +} diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ViewModels/AccountSummaryViewModel.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ViewModels/AccountSummaryViewModel.cs new file mode 100644 index 000000000..5d347d8f4 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ViewModels/AccountSummaryViewModel.cs @@ -0,0 +1,15 @@ +namespace Suteki.TardisBank.Web.Mvc.Controllers.ViewModels +{ + using Suteki.TardisBank.Domain; + + public class AccountSummaryViewModel + { + public Child Child { get; set; } + public Parent Parent { get; set; } + + public bool IsParentView + { + get { return this.Parent != null; } + } + } +} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ViewModels/AddScheduleViewModel.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ViewModels/AddScheduleViewModel.cs new file mode 100644 index 000000000..91d031b20 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ViewModels/AddScheduleViewModel.cs @@ -0,0 +1,27 @@ +namespace Suteki.TardisBank.Web.Mvc.Controllers.ViewModels +{ + using System; + using System.ComponentModel.DataAnnotations; + + using Suteki.TardisBank.Domain; + + public class AddScheduleViewModel + { + [Required] + public int ChildId{ get; set; } + + [Required] + [Range(-1000000, 1000000)] + public decimal Amount { get; set; } + + [Required] + [StringLength(140, ErrorMessage = "Sorry maximum of 140 chars, just like Twitter :)")] + public string Description { get; set; } + + [Required] + public Interval Interval { get; set; } + + [Required] + public DateTime StartDate { get; set; } + } +} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ViewModels/ChangePasswordViewModel.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ViewModels/ChangePasswordViewModel.cs new file mode 100644 index 000000000..36c94718c --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ViewModels/ChangePasswordViewModel.cs @@ -0,0 +1,23 @@ +namespace Suteki.TardisBank.Web.Mvc.Controllers.ViewModels +{ + using System.ComponentModel.DataAnnotations; + + public class ChangePasswordViewModel + { + [DataType(DataType.Password)] + [Required(ErrorMessage = "You must enter your old password")] + [StringLength(140, ErrorMessage = "Sorry maximum of 140 chars, just like Twitter :)")] + public string OldPassword { get; set; } + + [DataType(DataType.Password)] + [Required(ErrorMessage = "You must enter your new password")] + [StringLength(140, ErrorMessage = "Sorry maximum of 140 chars, just like Twitter :)")] + public string NewPassword { get; set; } + + [DataType(DataType.Password)] + [Compare("NewPassword", ErrorMessage = "The password is different than in the other field. They must be identical")] + [Required(ErrorMessage = "You must re-enter your password to make sure you didn't mistype it the first time")] + [StringLength(140, ErrorMessage = "Sorry maximum of 140 chars, just like Twitter :)")] + public string NewPasswordRepeat { get; set; } + } +} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ViewModels/DeleteChildConfirmViewModel.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ViewModels/DeleteChildConfirmViewModel.cs new file mode 100644 index 000000000..55a15abb5 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ViewModels/DeleteChildConfirmViewModel.cs @@ -0,0 +1,8 @@ +namespace Suteki.TardisBank.Web.Mvc.Controllers.ViewModels +{ + public class DeleteChildConfirmViewModel + { + public int ChildId { get; set; } + public string ChildName { get; set; } + } +} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ViewModels/ForgottenPasswordViewModel.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ViewModels/ForgottenPasswordViewModel.cs new file mode 100644 index 000000000..46a089d3e --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ViewModels/ForgottenPasswordViewModel.cs @@ -0,0 +1,10 @@ +namespace Suteki.TardisBank.Web.Mvc.Controllers.ViewModels +{ + using System.ComponentModel.DataAnnotations; + + public class ForgottenPasswordViewModel + { + [Required(ErrorMessage = "You must enter a User Name or Password")] + public string UserName { get; set; } + } +} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ViewModels/LoginViewModel.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ViewModels/LoginViewModel.cs new file mode 100644 index 000000000..65f041d62 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ViewModels/LoginViewModel.cs @@ -0,0 +1,15 @@ +namespace Suteki.TardisBank.Web.Mvc.Controllers.ViewModels +{ + using System.ComponentModel.DataAnnotations; + + public class LoginViewModel + { + [Required(ErrorMessage = "You must enter your user name")] + [StringLength(140, ErrorMessage = "Sorry maximum of 140 chars, just like Twitter :)")] + public string Name { get; set; } + + [Required(ErrorMessage = "You must enter your password")] + [StringLength(140, ErrorMessage = "Sorry maximum of 140 chars, just like Twitter :)")] + public string Password { get; set; } + } +} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ViewModels/MakePaymentViewModel.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ViewModels/MakePaymentViewModel.cs new file mode 100644 index 000000000..a91ab8f36 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ViewModels/MakePaymentViewModel.cs @@ -0,0 +1,21 @@ +namespace Suteki.TardisBank.Web.Mvc.Controllers.ViewModels +{ + using System.ComponentModel.DataAnnotations; + + public class MakePaymentViewModel + { + [Required] + public int ChildId{ get; set; } + + [Required] + public string ChildName { get; set; } + + [Required] + [StringLength(140, ErrorMessage = "Sorry maximum of 140 chars, just like Twitter :)")] + public string Description { get; set; } + + [Required] + [Range(0, 1000000)] + public decimal Amount { get; set; } + } +} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ViewModels/RegistrationViewModel.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ViewModels/RegistrationViewModel.cs new file mode 100644 index 000000000..c08372fd8 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ViewModels/RegistrationViewModel.cs @@ -0,0 +1,18 @@ +namespace Suteki.TardisBank.Web.Mvc.Controllers.ViewModels +{ + using System.ComponentModel.DataAnnotations; + + public class RegistrationViewModel + { + [Required(ErrorMessage = "You must supply an email address")] + [StringLength(140, ErrorMessage = "Sorry maximum of 140 chars, just like Twitter :)")] + public string Email { get; set; } + + [Required(ErrorMessage = "You must supply a name")] + [StringLength(140, ErrorMessage = "Sorry maximum of 140 chars, just like Twitter :)")] + public string Name { get; set; } + + [Required(ErrorMessage = "You must supply a password")] + public string Password { get; set; } + } +} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ViewModels/UserViewModel.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ViewModels/UserViewModel.cs new file mode 100644 index 000000000..9dbd6a176 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ViewModels/UserViewModel.cs @@ -0,0 +1,8 @@ +namespace Suteki.TardisBank.Web.Mvc.Controllers.ViewModels +{ + public class UserViewModel + { + public string UserName { get; set; } + public bool IsLoggedIn { get; set; } + } +} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ViewModels/WithdrawCashForChildViewModel.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ViewModels/WithdrawCashForChildViewModel.cs new file mode 100644 index 000000000..ef11d676a --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ViewModels/WithdrawCashForChildViewModel.cs @@ -0,0 +1,17 @@ +namespace Suteki.TardisBank.Web.Mvc.Controllers.ViewModels +{ + using System.ComponentModel.DataAnnotations; + + public class WithdrawCashForChildViewModel + { + public int ChildId{ get; set; } + public string ChildName { get; set; } + + [Required] + public string Description { get; set; } + + [Required] + [Range(0, 1000000)] + public decimal Amount { get; set; } + } +} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ViewModels/WithdrawCashViewModel.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ViewModels/WithdrawCashViewModel.cs new file mode 100644 index 000000000..8cca10129 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Controllers/ViewModels/WithdrawCashViewModel.cs @@ -0,0 +1,15 @@ +namespace Suteki.TardisBank.Web.Mvc.Controllers.ViewModels +{ + using System.ComponentModel.DataAnnotations; + + public class WithdrawCashViewModel + { + [Required] + [StringLength(140, ErrorMessage = "Sorry maximum of 140 chars, just like Twitter :)")] + public string Description { get; set; } + + [Required] + [Range(0, 1000000)] + public decimal Amount { get; set; } + } +} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/GenericError.htm b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/GenericError.htm new file mode 100644 index 000000000..c0e623e7e --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/GenericError.htm @@ -0,0 +1,61 @@ + + + + + + Tardis Bank + + + + + + + + + + +
          + +
          +
          + +
          + +
          + + +

          OMG!

          +

          Tardis bank has messed up big time! But don't worry, we're going to fix it.

          +

          It might be worth trying again.

          + + +
          +
          +
          +
          + + +
          + + + + + + \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Global.asax b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Global.asax new file mode 100644 index 000000000..9add44d10 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Global.asax @@ -0,0 +1 @@ +<%@ Application Codebehind="Global.asax.cs" Inherits="Suteki.TardisBank.Web.Mvc.MvcApplication" Language="C#" %> diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Global.asax.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Global.asax.cs new file mode 100644 index 000000000..dcbbfedf8 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Global.asax.cs @@ -0,0 +1,112 @@ +namespace Suteki.TardisBank.Web.Mvc +{ + using System; + using System.Reflection; + using System.Security.Principal; + using System.Web; + using System.Web.Http; + using System.Web.Mvc; + using System.Web.Optimization; + using System.Web.Routing; + using System.Web.Security; + using Castle.Windsor; + using Castle.Windsor.Installer; + using log4net.Config; + using SharpArch.Domain.Reflection; + using SharpArch.Web.Mvc.Castle; + using SharpArch.Web.Mvc.ModelBinder; + + + /// + /// Represents the MVC Application + /// + /// + /// For instructions on enabling IIS6 or IIS7 classic mode, + /// visit http://go.microsoft.com/?LinkId=9394801 + /// + public class MvcApplication : HttpApplication + { + private TypePropertyDescriptorCache injectablePropertiesCache; + private IWindsorContainer container; + private static readonly char Separator = ','; + + protected void Application_Error(object sender, EventArgs e) + { + // Useful for debugging + var ex = Server.GetLastError(); + var reflectionTypeLoadException = ex as ReflectionTypeLoadException; + } + + /// + /// Application startup. + /// + protected void Application_Start() + { + XmlConfigurator.Configure(); + + AutoMapper.Mapper.Initialize(c => + { + c.AddProfile(); + }); + + + // Container + injectablePropertiesCache = new TypePropertyDescriptorCache(); + container = InitializeContainer(); + + // MVC + ViewEngines.Engines.Clear(); + ViewEngines.Engines.Add(new RazorViewEngine()); + + ModelBinders.Binders.DefaultBinder = new SharpModelBinder(); + FilterProviders.Providers.InstallMvcFilterProvider(container, injectablePropertiesCache); + ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory(container)); + + AreaRegistration.RegisterAllAreas(); + + // WebAPI + GlobalConfiguration.Configure(cfg => WebApiConfig.Register(cfg, container, injectablePropertiesCache)); + + FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); + RouteConfig.RegisterRoutes(RouteTable.Routes); + BundleConfig.RegisterBundles(BundleTable.Bundles); + + } + + /// + /// Instantiate the container and add all Controllers that derive from + /// WindsorController to the container. Also associate the Controller + /// with the WindsorContainer ControllerFactory. + /// + protected IWindsorContainer InitializeContainer() + { + IWindsorContainer c = new WindsorContainer(); + c.Install(FromAssembly.This()); + return c; + + } + + + /// + /// Loads user roles from authentication ticket. + /// + /// + /// + protected void Application_AuthenticateRequest(object sender, EventArgs e) + { + if (HttpContext.Current.User == null) return; + if (!HttpContext.Current.User.Identity.IsAuthenticated) return; + + FormsIdentity id = HttpContext.Current.User.Identity as FormsIdentity; + if (id != null) + { + var ticket = id.Ticket; + + // Get the stored user-data, in this case, our roles + string userData = ticket.UserData; + string[] roles = userData.Split(Separator); + HttpContext.Current.User = new GenericPrincipal(id, roles); + } + } + } +} diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Icon.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Icon.png new file mode 100644 index 000000000..f0afb2ad0 Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Icon.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Models/AnnouncementModel.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Models/AnnouncementModel.cs new file mode 100644 index 000000000..118076abc --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Models/AnnouncementModel.cs @@ -0,0 +1,33 @@ +namespace Suteki.TardisBank.Web.Mvc.Models +{ + using System; + using System.ComponentModel.DataAnnotations; + using Newtonsoft.Json; + + /// + /// Announcement summary model. + /// + public class AnnouncementSummary + { + [JsonProperty("id")] + public int Id { get; set; } + + [JsonProperty("date")] + [DataType(DataType.Date)] + public DateTime Date { get; set; } + + [Required] + [JsonProperty("title")] + public string Title { get; set; } + } + + /// + /// Full announcement details. + /// + public class AnnouncementModel : AnnouncementSummary + { + [JsonProperty("content")] + [Required] + public string Content { get; set; } + } +} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Models/News/NewsListModel.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Models/News/NewsListModel.cs new file mode 100644 index 000000000..26644c570 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Models/News/NewsListModel.cs @@ -0,0 +1,7 @@ +namespace Suteki.TardisBank.Web.Mvc.Models.News +{ + public class NewsListModel + { + public bool IsParent { get; set; } + } +} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/NHibernate.config b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/NHibernate.config new file mode 100644 index 000000000..4bb155036 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/NHibernate.config @@ -0,0 +1,21 @@ + + + + Data Source=.;Initial Catalog=TardisBank;Integrated Security=True;Application Name=Suteki.TardisBank; + NHibernate.Dialect.MsSql2008Dialect + NHibernate.Connection.DriverConnectionProvider + NHibernate.Driver.SqlClientDriver + true + auto + 500 + + + update + + + + + diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Properties/AssemblyInfo.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..8e9d0709b --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Properties/AssemblyInfo.cs @@ -0,0 +1,8 @@ +using System.Reflection; + +// 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("Suteki.TardisBank.Web")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/README.txt b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/README.txt new file mode 100644 index 000000000..8f55db23e --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/README.txt @@ -0,0 +1,60 @@ +-------------------------------------------- +-- 2.0 Release Candidate +-------------------------------------------- + +This is a release candidate, use at your own risk. Please switch to the 1.9.6.0 for production releases: + +$ git checkout 1.9.6.0 + +-------------------------------------------- +-- Templify +-------------------------------------------- + +We no longer support the use of the Visual Studio templates for installation of S#arp Architecture. With version 2.0, we have dropped support for Visual Studio 2008 altogether. To learn how to get a S#arp Architecture solution up and running, please go to http://blog.sharparchitecture.net/post/Using-Templify-to-create-a-new-Sarp-Architecture-solution.aspx + +-------------------------------------------- +-- Downloads +-------------------------------------------- + +Downloads can always be found here: https://github.com/sharparchitecture/Sharp-Architecture/downloads + +-------------------------------------------- +-- Building S#arp Architecture +-------------------------------------------- + +Perform the following command in GitBash: + +$ git clone git@github.com:sharparchitecture/Sharp-Architecture.git +$ git submodule init +$ git submodule update + +Now you should have the latest development branch of SA 2.0 and submodules. + +Now go to /Build and run the Build.cmd or BuildAndPackage.cmd files to build S#arp Architecture + +-------------------------------------------- +-- Documentation and Assemblies +-------------------------------------------- + +* /Artefacts/Documentation/: Contains a link to comprehensive, online documentation at http://wiki.sharparchitecture.net/, and a diagram of what a S#arp Architecture project looks like. + +* /Drops//: Holds released SharpArch assemblies - it does not include the third party library's that are needed by S#arp Architecture. You must run the BuildAndPackage.cmd file first. + +-------------------------------------------- +-- How's this release organized? +-------------------------------------------- + +* /Artefacts/: Contains various artefacts for the project + +* /Build/: Contains the .cmd files needed to build the solution + +* /ReferencedAssemblies/: Contains all of the required 3rd party assemblies. + +* /RequiredPackages/: Contains the required tools needed to build S#arp Architecture. + +* /License.txt: I'll let you guess what this is. + +* /Solutions/: This contains all of the source code in their various projects. + +* /VersionHistory.txt: Details version numbers of dependencies, changes since previous releases, upgrade details, and a roadmap of what's coming. + diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Scripts/_references.js b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Scripts/_references.js new file mode 100644 index 000000000..368a544e6 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Scripts/_references.js @@ -0,0 +1,14 @@ +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Scripts/app/common.js b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Scripts/app/common.js new file mode 100644 index 000000000..fa65b71a2 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Scripts/app/common.js @@ -0,0 +1,35 @@ +var app = function(me, $) { + me.common = function(commonModule) { + + var rootUrl; + + commonModule.toLocalDate = function(aDate) { + var date = new Date(aDate); + return date.toLocaleDateString(); + }; + + // navigation + commonModule.nav = { + setRootUrl : function(url) { + rootUrl = url; + }, + getFullUrl : function(path) { + return rootUrl + path; + }, + toLoginPage: function() { + location.replace(app.common.nav.getFullUrl("User/Login")); + } + }; + + + // redirect unauthorized user requests to login page + $(document).ajaxError(function(event, jqxhr, settings, thrownError) { + if (jqxhr.status == 401) { + app.common.nav.toLoginPage(); + } + }); + + return commonModule; + }(me.common || {}); + return me; +}(app || {}, jQuery); \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Scripts/app/news.edit.js b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Scripts/app/news.edit.js new file mode 100644 index 000000000..982c0d05f --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Scripts/app/news.edit.js @@ -0,0 +1,93 @@ +"use strict"; + +var app = (function (me, $) { + me.news = (function(newsModule, $) { + var announcementsUrl; + var content; + var title; + var status; + var template; + var publishedAnnouncements; + + + var deleteAnnouncement = function () { + var id = $(this).attr("data-recId"); + if (id == "") return false; + var row = $(this).parent("li"); + + status.text(""); + $.ajax(announcementsUrl + id, { + method: "DELETE", + dataType: "json" + }).done(function() { + status.text("Announcement deleted"); + + row.remove(); + }).fail(function () { + status.text("Delete failed"); + }); + return false; + }; + + // load announcements + var displayAnnouncements = function (data) { + publishedAnnouncements.html(""); + $.each(data, function (key, item) { + var header = template.render(item, { asLocalDate: app.common.toLocalDate }); + $(header).appendTo(publishedAnnouncements); + }); + $("#publishedAnnouncements a.delete-link").click(deleteAnnouncement); + }; + + var loadAnnouncements = function () { + $.getJSON(announcementsUrl + "latest") + .done(displayAnnouncements) + .fail(function () { + status.text("Cannot load announcements"); + }); + }; + + + // new announcement + var addNewAnnouncement = function() { + if (title.get(0).checkValidity() && content.get(0).checkValidity()) { + + $.post(announcementsUrl, { Title: title.val(), "Date": new Date().toISOString(), Content: content.val() }, "json") + .done(function(data) { + status.text("Announcement posted"); + title.val(""); + content.val(""); + loadAnnouncements(); + + }) + .fail(function() { + status.text("Error saving announcement"); + }); + } + } + + + + var newsEditor = { + init: function() { + announcementsUrl = app.common.nav.getFullUrl("api/announcements/"); + + title = $("#announcementTitle"); + content = $("#announcementContent"); + status = $("#status"); + template = $.templates("#announcementLinkTemplate"); + publishedAnnouncements = $("#publishedAnnouncements"); + + $("#addAnnouncement").click(addNewAnnouncement); + $("#deleteAnnouncement").click(deleteAnnouncement); + }, + + loadAnnouncements : loadAnnouncements + }; + + newsModule.edit = newsEditor; + return newsModule; + }(me.news || {}, $)); + + return me; +}(app || {}, jQuery)); diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Scripts/app/news.view.js b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Scripts/app/news.view.js new file mode 100644 index 000000000..610b1f111 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Scripts/app/news.view.js @@ -0,0 +1,59 @@ +"use strict"; + +var app = (function(me, $) { + + me.news = (function(newsModule, $) { + + var announcementDetails; + var getAnnouncementUrlPart; + var loadAnnouncementsUrl; + var articleTemplate; + var articleLinkTemplate; + + var displayAnnouncement = function() { + var id = $(this).attr("data-recId"); + var url = getAnnouncementUrlPart + id; + announcementDetails.html("Loading..."); + // todo: Add error handling + $.getJSON(url).done(function(data) { + var formattedArticle = articleTemplate.render(data, { + asLocalDate: app.common.toLocalDate + } + ); + announcementDetails.html(formattedArticle); + }); + return false; + }; + + // public methods + var newsViewer = { + init: function(root) { + getAnnouncementUrlPart = root + "api/announcements/"; + loadAnnouncementsUrl = root + "api/announcements/latest"; + + announcementDetails = $("#announcementDetails"); + articleTemplate = $.templates("#announcementContentTemplate"); + articleLinkTemplate = $.templates("#announcementLinkTemplate"); + }, + + loadAnnouncements: function() { + // todo: Add error handling + $.getJSON(loadAnnouncementsUrl).done(function(data) { + var newsList = $("#news"); + $.each(data, function(key, item) { + var header = articleLinkTemplate.render(item, { asLocalDate: app.common.toLocalDate}); + $(header).appendTo(newsList); + }); + $("#news a").click(displayAnnouncement); + }); + } + }; + + + newsModule.view = newsViewer; + return newsModule; + }(me.news || {}, $)); + + return me; + +}(app || {}, jQuery)); \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Scripts/bootstrap.js b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Scripts/bootstrap.js new file mode 100644 index 000000000..8a2e99a53 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Scripts/bootstrap.js @@ -0,0 +1,2377 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under the MIT license + */ + +if (typeof jQuery === 'undefined') { + throw new Error('Bootstrap\'s JavaScript requires jQuery') +} + ++function ($) { + 'use strict'; + var version = $.fn.jquery.split(' ')[0].split('.') + if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) { + throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4') + } +}(jQuery); + +/* ======================================================================== + * Bootstrap: transition.js v3.3.7 + * http://getbootstrap.com/javascript/#transitions + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) + // ============================================================ + + function transitionEnd() { + var el = document.createElement('bootstrap') + + var transEndEventNames = { + WebkitTransition : 'webkitTransitionEnd', + MozTransition : 'transitionend', + OTransition : 'oTransitionEnd otransitionend', + transition : 'transitionend' + } + + for (var name in transEndEventNames) { + if (el.style[name] !== undefined) { + return { end: transEndEventNames[name] } + } + } + + return false // explicit for ie8 ( ._.) + } + + // http://blog.alexmaccaw.com/css-transitions + $.fn.emulateTransitionEnd = function (duration) { + var called = false + var $el = this + $(this).one('bsTransitionEnd', function () { called = true }) + var callback = function () { if (!called) $($el).trigger($.support.transition.end) } + setTimeout(callback, duration) + return this + } + + $(function () { + $.support.transition = transitionEnd() + + if (!$.support.transition) return + + $.event.special.bsTransitionEnd = { + bindType: $.support.transition.end, + delegateType: $.support.transition.end, + handle: function (e) { + if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments) + } + } + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: alert.js v3.3.7 + * http://getbootstrap.com/javascript/#alerts + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // ALERT CLASS DEFINITION + // ====================== + + var dismiss = '[data-dismiss="alert"]' + var Alert = function (el) { + $(el).on('click', dismiss, this.close) + } + + Alert.VERSION = '3.3.7' + + Alert.TRANSITION_DURATION = 150 + + Alert.prototype.close = function (e) { + var $this = $(this) + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + var $parent = $(selector === '#' ? [] : selector) + + if (e) e.preventDefault() + + if (!$parent.length) { + $parent = $this.closest('.alert') + } + + $parent.trigger(e = $.Event('close.bs.alert')) + + if (e.isDefaultPrevented()) return + + $parent.removeClass('in') + + function removeElement() { + // detach from parent, fire event then clean up data + $parent.detach().trigger('closed.bs.alert').remove() + } + + $.support.transition && $parent.hasClass('fade') ? + $parent + .one('bsTransitionEnd', removeElement) + .emulateTransitionEnd(Alert.TRANSITION_DURATION) : + removeElement() + } + + + // ALERT PLUGIN DEFINITION + // ======================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.alert') + + if (!data) $this.data('bs.alert', (data = new Alert(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + var old = $.fn.alert + + $.fn.alert = Plugin + $.fn.alert.Constructor = Alert + + + // ALERT NO CONFLICT + // ================= + + $.fn.alert.noConflict = function () { + $.fn.alert = old + return this + } + + + // ALERT DATA-API + // ============== + + $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: button.js v3.3.7 + * http://getbootstrap.com/javascript/#buttons + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // BUTTON PUBLIC CLASS DEFINITION + // ============================== + + var Button = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Button.DEFAULTS, options) + this.isLoading = false + } + + Button.VERSION = '3.3.7' + + Button.DEFAULTS = { + loadingText: 'loading...' + } + + Button.prototype.setState = function (state) { + var d = 'disabled' + var $el = this.$element + var val = $el.is('input') ? 'val' : 'html' + var data = $el.data() + + state += 'Text' + + if (data.resetText == null) $el.data('resetText', $el[val]()) + + // push to event loop to allow forms to submit + setTimeout($.proxy(function () { + $el[val](data[state] == null ? this.options[state] : data[state]) + + if (state == 'loadingText') { + this.isLoading = true + $el.addClass(d).attr(d, d).prop(d, true) + } else if (this.isLoading) { + this.isLoading = false + $el.removeClass(d).removeAttr(d).prop(d, false) + } + }, this), 0) + } + + Button.prototype.toggle = function () { + var changed = true + var $parent = this.$element.closest('[data-toggle="buttons"]') + + if ($parent.length) { + var $input = this.$element.find('input') + if ($input.prop('type') == 'radio') { + if ($input.prop('checked')) changed = false + $parent.find('.active').removeClass('active') + this.$element.addClass('active') + } else if ($input.prop('type') == 'checkbox') { + if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false + this.$element.toggleClass('active') + } + $input.prop('checked', this.$element.hasClass('active')) + if (changed) $input.trigger('change') + } else { + this.$element.attr('aria-pressed', !this.$element.hasClass('active')) + this.$element.toggleClass('active') + } + } + + + // BUTTON PLUGIN DEFINITION + // ======================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.button') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.button', (data = new Button(this, options))) + + if (option == 'toggle') data.toggle() + else if (option) data.setState(option) + }) + } + + var old = $.fn.button + + $.fn.button = Plugin + $.fn.button.Constructor = Button + + + // BUTTON NO CONFLICT + // ================== + + $.fn.button.noConflict = function () { + $.fn.button = old + return this + } + + + // BUTTON DATA-API + // =============== + + $(document) + .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) { + var $btn = $(e.target).closest('.btn') + Plugin.call($btn, 'toggle') + if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) { + // Prevent double click on radios, and the double selections (so cancellation) on checkboxes + e.preventDefault() + // The target component still receive the focus + if ($btn.is('input,button')) $btn.trigger('focus') + else $btn.find('input:visible,button:visible').first().trigger('focus') + } + }) + .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) { + $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type)) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: carousel.js v3.3.7 + * http://getbootstrap.com/javascript/#carousel + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // CAROUSEL CLASS DEFINITION + // ========================= + + var Carousel = function (element, options) { + this.$element = $(element) + this.$indicators = this.$element.find('.carousel-indicators') + this.options = options + this.paused = null + this.sliding = null + this.interval = null + this.$active = null + this.$items = null + + this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this)) + + this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element + .on('mouseenter.bs.carousel', $.proxy(this.pause, this)) + .on('mouseleave.bs.carousel', $.proxy(this.cycle, this)) + } + + Carousel.VERSION = '3.3.7' + + Carousel.TRANSITION_DURATION = 600 + + Carousel.DEFAULTS = { + interval: 5000, + pause: 'hover', + wrap: true, + keyboard: true + } + + Carousel.prototype.keydown = function (e) { + if (/input|textarea/i.test(e.target.tagName)) return + switch (e.which) { + case 37: this.prev(); break + case 39: this.next(); break + default: return + } + + e.preventDefault() + } + + Carousel.prototype.cycle = function (e) { + e || (this.paused = false) + + this.interval && clearInterval(this.interval) + + this.options.interval + && !this.paused + && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) + + return this + } + + Carousel.prototype.getItemIndex = function (item) { + this.$items = item.parent().children('.item') + return this.$items.index(item || this.$active) + } + + Carousel.prototype.getItemForDirection = function (direction, active) { + var activeIndex = this.getItemIndex(active) + var willWrap = (direction == 'prev' && activeIndex === 0) + || (direction == 'next' && activeIndex == (this.$items.length - 1)) + if (willWrap && !this.options.wrap) return active + var delta = direction == 'prev' ? -1 : 1 + var itemIndex = (activeIndex + delta) % this.$items.length + return this.$items.eq(itemIndex) + } + + Carousel.prototype.to = function (pos) { + var that = this + var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active')) + + if (pos > (this.$items.length - 1) || pos < 0) return + + if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid" + if (activeIndex == pos) return this.pause().cycle() + + return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos)) + } + + Carousel.prototype.pause = function (e) { + e || (this.paused = true) + + if (this.$element.find('.next, .prev').length && $.support.transition) { + this.$element.trigger($.support.transition.end) + this.cycle(true) + } + + this.interval = clearInterval(this.interval) + + return this + } + + Carousel.prototype.next = function () { + if (this.sliding) return + return this.slide('next') + } + + Carousel.prototype.prev = function () { + if (this.sliding) return + return this.slide('prev') + } + + Carousel.prototype.slide = function (type, next) { + var $active = this.$element.find('.item.active') + var $next = next || this.getItemForDirection(type, $active) + var isCycling = this.interval + var direction = type == 'next' ? 'left' : 'right' + var that = this + + if ($next.hasClass('active')) return (this.sliding = false) + + var relatedTarget = $next[0] + var slideEvent = $.Event('slide.bs.carousel', { + relatedTarget: relatedTarget, + direction: direction + }) + this.$element.trigger(slideEvent) + if (slideEvent.isDefaultPrevented()) return + + this.sliding = true + + isCycling && this.pause() + + if (this.$indicators.length) { + this.$indicators.find('.active').removeClass('active') + var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)]) + $nextIndicator && $nextIndicator.addClass('active') + } + + var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid" + if ($.support.transition && this.$element.hasClass('slide')) { + $next.addClass(type) + $next[0].offsetWidth // force reflow + $active.addClass(direction) + $next.addClass(direction) + $active + .one('bsTransitionEnd', function () { + $next.removeClass([type, direction].join(' ')).addClass('active') + $active.removeClass(['active', direction].join(' ')) + that.sliding = false + setTimeout(function () { + that.$element.trigger(slidEvent) + }, 0) + }) + .emulateTransitionEnd(Carousel.TRANSITION_DURATION) + } else { + $active.removeClass('active') + $next.addClass('active') + this.sliding = false + this.$element.trigger(slidEvent) + } + + isCycling && this.cycle() + + return this + } + + + // CAROUSEL PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.carousel') + var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) + var action = typeof option == 'string' ? option : options.slide + + if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) + if (typeof option == 'number') data.to(option) + else if (action) data[action]() + else if (options.interval) data.pause().cycle() + }) + } + + var old = $.fn.carousel + + $.fn.carousel = Plugin + $.fn.carousel.Constructor = Carousel + + + // CAROUSEL NO CONFLICT + // ==================== + + $.fn.carousel.noConflict = function () { + $.fn.carousel = old + return this + } + + + // CAROUSEL DATA-API + // ================= + + var clickHandler = function (e) { + var href + var $this = $(this) + var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7 + if (!$target.hasClass('carousel')) return + var options = $.extend({}, $target.data(), $this.data()) + var slideIndex = $this.attr('data-slide-to') + if (slideIndex) options.interval = false + + Plugin.call($target, options) + + if (slideIndex) { + $target.data('bs.carousel').to(slideIndex) + } + + e.preventDefault() + } + + $(document) + .on('click.bs.carousel.data-api', '[data-slide]', clickHandler) + .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler) + + $(window).on('load', function () { + $('[data-ride="carousel"]').each(function () { + var $carousel = $(this) + Plugin.call($carousel, $carousel.data()) + }) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: collapse.js v3.3.7 + * http://getbootstrap.com/javascript/#collapse + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + +/* jshint latedef: false */ + ++function ($) { + 'use strict'; + + // COLLAPSE PUBLIC CLASS DEFINITION + // ================================ + + var Collapse = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Collapse.DEFAULTS, options) + this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' + + '[data-toggle="collapse"][data-target="#' + element.id + '"]') + this.transitioning = null + + if (this.options.parent) { + this.$parent = this.getParent() + } else { + this.addAriaAndCollapsedClass(this.$element, this.$trigger) + } + + if (this.options.toggle) this.toggle() + } + + Collapse.VERSION = '3.3.7' + + Collapse.TRANSITION_DURATION = 350 + + Collapse.DEFAULTS = { + toggle: true + } + + Collapse.prototype.dimension = function () { + var hasWidth = this.$element.hasClass('width') + return hasWidth ? 'width' : 'height' + } + + Collapse.prototype.show = function () { + if (this.transitioning || this.$element.hasClass('in')) return + + var activesData + var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing') + + if (actives && actives.length) { + activesData = actives.data('bs.collapse') + if (activesData && activesData.transitioning) return + } + + var startEvent = $.Event('show.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + if (actives && actives.length) { + Plugin.call(actives, 'hide') + activesData || actives.data('bs.collapse', null) + } + + var dimension = this.dimension() + + this.$element + .removeClass('collapse') + .addClass('collapsing')[dimension](0) + .attr('aria-expanded', true) + + this.$trigger + .removeClass('collapsed') + .attr('aria-expanded', true) + + this.transitioning = 1 + + var complete = function () { + this.$element + .removeClass('collapsing') + .addClass('collapse in')[dimension]('') + this.transitioning = 0 + this.$element + .trigger('shown.bs.collapse') + } + + if (!$.support.transition) return complete.call(this) + + var scrollSize = $.camelCase(['scroll', dimension].join('-')) + + this.$element + .one('bsTransitionEnd', $.proxy(complete, this)) + .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize]) + } + + Collapse.prototype.hide = function () { + if (this.transitioning || !this.$element.hasClass('in')) return + + var startEvent = $.Event('hide.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + var dimension = this.dimension() + + this.$element[dimension](this.$element[dimension]())[0].offsetHeight + + this.$element + .addClass('collapsing') + .removeClass('collapse in') + .attr('aria-expanded', false) + + this.$trigger + .addClass('collapsed') + .attr('aria-expanded', false) + + this.transitioning = 1 + + var complete = function () { + this.transitioning = 0 + this.$element + .removeClass('collapsing') + .addClass('collapse') + .trigger('hidden.bs.collapse') + } + + if (!$.support.transition) return complete.call(this) + + this.$element + [dimension](0) + .one('bsTransitionEnd', $.proxy(complete, this)) + .emulateTransitionEnd(Collapse.TRANSITION_DURATION) + } + + Collapse.prototype.toggle = function () { + this[this.$element.hasClass('in') ? 'hide' : 'show']() + } + + Collapse.prototype.getParent = function () { + return $(this.options.parent) + .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]') + .each($.proxy(function (i, element) { + var $element = $(element) + this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element) + }, this)) + .end() + } + + Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) { + var isOpen = $element.hasClass('in') + + $element.attr('aria-expanded', isOpen) + $trigger + .toggleClass('collapsed', !isOpen) + .attr('aria-expanded', isOpen) + } + + function getTargetFromTrigger($trigger) { + var href + var target = $trigger.attr('data-target') + || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7 + + return $(target) + } + + + // COLLAPSE PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.collapse') + var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) + + if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false + if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.collapse + + $.fn.collapse = Plugin + $.fn.collapse.Constructor = Collapse + + + // COLLAPSE NO CONFLICT + // ==================== + + $.fn.collapse.noConflict = function () { + $.fn.collapse = old + return this + } + + + // COLLAPSE DATA-API + // ================= + + $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) { + var $this = $(this) + + if (!$this.attr('data-target')) e.preventDefault() + + var $target = getTargetFromTrigger($this) + var data = $target.data('bs.collapse') + var option = data ? 'toggle' : $this.data() + + Plugin.call($target, option) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: dropdown.js v3.3.7 + * http://getbootstrap.com/javascript/#dropdowns + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // DROPDOWN CLASS DEFINITION + // ========================= + + var backdrop = '.dropdown-backdrop' + var toggle = '[data-toggle="dropdown"]' + var Dropdown = function (element) { + $(element).on('click.bs.dropdown', this.toggle) + } + + Dropdown.VERSION = '3.3.7' + + function getParent($this) { + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + var $parent = selector && $(selector) + + return $parent && $parent.length ? $parent : $this.parent() + } + + function clearMenus(e) { + if (e && e.which === 3) return + $(backdrop).remove() + $(toggle).each(function () { + var $this = $(this) + var $parent = getParent($this) + var relatedTarget = { relatedTarget: this } + + if (!$parent.hasClass('open')) return + + if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return + + $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget)) + + if (e.isDefaultPrevented()) return + + $this.attr('aria-expanded', 'false') + $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget)) + }) + } + + Dropdown.prototype.toggle = function (e) { + var $this = $(this) + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + clearMenus() + + if (!isActive) { + if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { + // if mobile we use a backdrop because click events don't delegate + $(document.createElement('div')) + .addClass('dropdown-backdrop') + .insertAfter($(this)) + .on('click', clearMenus) + } + + var relatedTarget = { relatedTarget: this } + $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget)) + + if (e.isDefaultPrevented()) return + + $this + .trigger('focus') + .attr('aria-expanded', 'true') + + $parent + .toggleClass('open') + .trigger($.Event('shown.bs.dropdown', relatedTarget)) + } + + return false + } + + Dropdown.prototype.keydown = function (e) { + if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return + + var $this = $(this) + + e.preventDefault() + e.stopPropagation() + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + if (!isActive && e.which != 27 || isActive && e.which == 27) { + if (e.which == 27) $parent.find(toggle).trigger('focus') + return $this.trigger('click') + } + + var desc = ' li:not(.disabled):visible a' + var $items = $parent.find('.dropdown-menu' + desc) + + if (!$items.length) return + + var index = $items.index(e.target) + + if (e.which == 38 && index > 0) index-- // up + if (e.which == 40 && index < $items.length - 1) index++ // down + if (!~index) index = 0 + + $items.eq(index).trigger('focus') + } + + + // DROPDOWN PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.dropdown') + + if (!data) $this.data('bs.dropdown', (data = new Dropdown(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + var old = $.fn.dropdown + + $.fn.dropdown = Plugin + $.fn.dropdown.Constructor = Dropdown + + + // DROPDOWN NO CONFLICT + // ==================== + + $.fn.dropdown.noConflict = function () { + $.fn.dropdown = old + return this + } + + + // APPLY TO STANDARD DROPDOWN ELEMENTS + // =================================== + + $(document) + .on('click.bs.dropdown.data-api', clearMenus) + .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) + .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle) + .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown) + .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: modal.js v3.3.7 + * http://getbootstrap.com/javascript/#modals + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // MODAL CLASS DEFINITION + // ====================== + + var Modal = function (element, options) { + this.options = options + this.$body = $(document.body) + this.$element = $(element) + this.$dialog = this.$element.find('.modal-dialog') + this.$backdrop = null + this.isShown = null + this.originalBodyPad = null + this.scrollbarWidth = 0 + this.ignoreBackdropClick = false + + if (this.options.remote) { + this.$element + .find('.modal-content') + .load(this.options.remote, $.proxy(function () { + this.$element.trigger('loaded.bs.modal') + }, this)) + } + } + + Modal.VERSION = '3.3.7' + + Modal.TRANSITION_DURATION = 300 + Modal.BACKDROP_TRANSITION_DURATION = 150 + + Modal.DEFAULTS = { + backdrop: true, + keyboard: true, + show: true + } + + Modal.prototype.toggle = function (_relatedTarget) { + return this.isShown ? this.hide() : this.show(_relatedTarget) + } + + Modal.prototype.show = function (_relatedTarget) { + var that = this + var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget }) + + this.$element.trigger(e) + + if (this.isShown || e.isDefaultPrevented()) return + + this.isShown = true + + this.checkScrollbar() + this.setScrollbar() + this.$body.addClass('modal-open') + + this.escape() + this.resize() + + this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this)) + + this.$dialog.on('mousedown.dismiss.bs.modal', function () { + that.$element.one('mouseup.dismiss.bs.modal', function (e) { + if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true + }) + }) + + this.backdrop(function () { + var transition = $.support.transition && that.$element.hasClass('fade') + + if (!that.$element.parent().length) { + that.$element.appendTo(that.$body) // don't move modals dom position + } + + that.$element + .show() + .scrollTop(0) + + that.adjustDialog() + + if (transition) { + that.$element[0].offsetWidth // force reflow + } + + that.$element.addClass('in') + + that.enforceFocus() + + var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget }) + + transition ? + that.$dialog // wait for modal to slide in + .one('bsTransitionEnd', function () { + that.$element.trigger('focus').trigger(e) + }) + .emulateTransitionEnd(Modal.TRANSITION_DURATION) : + that.$element.trigger('focus').trigger(e) + }) + } + + Modal.prototype.hide = function (e) { + if (e) e.preventDefault() + + e = $.Event('hide.bs.modal') + + this.$element.trigger(e) + + if (!this.isShown || e.isDefaultPrevented()) return + + this.isShown = false + + this.escape() + this.resize() + + $(document).off('focusin.bs.modal') + + this.$element + .removeClass('in') + .off('click.dismiss.bs.modal') + .off('mouseup.dismiss.bs.modal') + + this.$dialog.off('mousedown.dismiss.bs.modal') + + $.support.transition && this.$element.hasClass('fade') ? + this.$element + .one('bsTransitionEnd', $.proxy(this.hideModal, this)) + .emulateTransitionEnd(Modal.TRANSITION_DURATION) : + this.hideModal() + } + + Modal.prototype.enforceFocus = function () { + $(document) + .off('focusin.bs.modal') // guard against infinite focus loop + .on('focusin.bs.modal', $.proxy(function (e) { + if (document !== e.target && + this.$element[0] !== e.target && + !this.$element.has(e.target).length) { + this.$element.trigger('focus') + } + }, this)) + } + + Modal.prototype.escape = function () { + if (this.isShown && this.options.keyboard) { + this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) { + e.which == 27 && this.hide() + }, this)) + } else if (!this.isShown) { + this.$element.off('keydown.dismiss.bs.modal') + } + } + + Modal.prototype.resize = function () { + if (this.isShown) { + $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this)) + } else { + $(window).off('resize.bs.modal') + } + } + + Modal.prototype.hideModal = function () { + var that = this + this.$element.hide() + this.backdrop(function () { + that.$body.removeClass('modal-open') + that.resetAdjustments() + that.resetScrollbar() + that.$element.trigger('hidden.bs.modal') + }) + } + + Modal.prototype.removeBackdrop = function () { + this.$backdrop && this.$backdrop.remove() + this.$backdrop = null + } + + Modal.prototype.backdrop = function (callback) { + var that = this + var animate = this.$element.hasClass('fade') ? 'fade' : '' + + if (this.isShown && this.options.backdrop) { + var doAnimate = $.support.transition && animate + + this.$backdrop = $(document.createElement('div')) + .addClass('modal-backdrop ' + animate) + .appendTo(this.$body) + + this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) { + if (this.ignoreBackdropClick) { + this.ignoreBackdropClick = false + return + } + if (e.target !== e.currentTarget) return + this.options.backdrop == 'static' + ? this.$element[0].focus() + : this.hide() + }, this)) + + if (doAnimate) this.$backdrop[0].offsetWidth // force reflow + + this.$backdrop.addClass('in') + + if (!callback) return + + doAnimate ? + this.$backdrop + .one('bsTransitionEnd', callback) + .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : + callback() + + } else if (!this.isShown && this.$backdrop) { + this.$backdrop.removeClass('in') + + var callbackRemove = function () { + that.removeBackdrop() + callback && callback() + } + $.support.transition && this.$element.hasClass('fade') ? + this.$backdrop + .one('bsTransitionEnd', callbackRemove) + .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : + callbackRemove() + + } else if (callback) { + callback() + } + } + + // these following methods are used to handle overflowing modals + + Modal.prototype.handleUpdate = function () { + this.adjustDialog() + } + + Modal.prototype.adjustDialog = function () { + var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight + + this.$element.css({ + paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '', + paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : '' + }) + } + + Modal.prototype.resetAdjustments = function () { + this.$element.css({ + paddingLeft: '', + paddingRight: '' + }) + } + + Modal.prototype.checkScrollbar = function () { + var fullWindowWidth = window.innerWidth + if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8 + var documentElementRect = document.documentElement.getBoundingClientRect() + fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left) + } + this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth + this.scrollbarWidth = this.measureScrollbar() + } + + Modal.prototype.setScrollbar = function () { + var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10) + this.originalBodyPad = document.body.style.paddingRight || '' + if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth) + } + + Modal.prototype.resetScrollbar = function () { + this.$body.css('padding-right', this.originalBodyPad) + } + + Modal.prototype.measureScrollbar = function () { // thx walsh + var scrollDiv = document.createElement('div') + scrollDiv.className = 'modal-scrollbar-measure' + this.$body.append(scrollDiv) + var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth + this.$body[0].removeChild(scrollDiv) + return scrollbarWidth + } + + + // MODAL PLUGIN DEFINITION + // ======================= + + function Plugin(option, _relatedTarget) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.modal') + var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option) + + if (!data) $this.data('bs.modal', (data = new Modal(this, options))) + if (typeof option == 'string') data[option](_relatedTarget) + else if (options.show) data.show(_relatedTarget) + }) + } + + var old = $.fn.modal + + $.fn.modal = Plugin + $.fn.modal.Constructor = Modal + + + // MODAL NO CONFLICT + // ================= + + $.fn.modal.noConflict = function () { + $.fn.modal = old + return this + } + + + // MODAL DATA-API + // ============== + + $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) { + var $this = $(this) + var href = $this.attr('href') + var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7 + var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data()) + + if ($this.is('a')) e.preventDefault() + + $target.one('show.bs.modal', function (showEvent) { + if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown + $target.one('hidden.bs.modal', function () { + $this.is(':visible') && $this.trigger('focus') + }) + }) + Plugin.call($target, option, this) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: tooltip.js v3.3.7 + * http://getbootstrap.com/javascript/#tooltip + * Inspired by the original jQuery.tipsy by Jason Frame + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // TOOLTIP PUBLIC CLASS DEFINITION + // =============================== + + var Tooltip = function (element, options) { + this.type = null + this.options = null + this.enabled = null + this.timeout = null + this.hoverState = null + this.$element = null + this.inState = null + + this.init('tooltip', element, options) + } + + Tooltip.VERSION = '3.3.7' + + Tooltip.TRANSITION_DURATION = 150 + + Tooltip.DEFAULTS = { + animation: true, + placement: 'top', + selector: false, + template: '', + trigger: 'hover focus', + title: '', + delay: 0, + html: false, + container: false, + viewport: { + selector: 'body', + padding: 0 + } + } + + Tooltip.prototype.init = function (type, element, options) { + this.enabled = true + this.type = type + this.$element = $(element) + this.options = this.getOptions(options) + this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport)) + this.inState = { click: false, hover: false, focus: false } + + if (this.$element[0] instanceof document.constructor && !this.options.selector) { + throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!') + } + + var triggers = this.options.trigger.split(' ') + + for (var i = triggers.length; i--;) { + var trigger = triggers[i] + + if (trigger == 'click') { + this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) + } else if (trigger != 'manual') { + var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin' + var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout' + + this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this)) + this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this)) + } + } + + this.options.selector ? + (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : + this.fixTitle() + } + + Tooltip.prototype.getDefaults = function () { + return Tooltip.DEFAULTS + } + + Tooltip.prototype.getOptions = function (options) { + options = $.extend({}, this.getDefaults(), this.$element.data(), options) + + if (options.delay && typeof options.delay == 'number') { + options.delay = { + show: options.delay, + hide: options.delay + } + } + + return options + } + + Tooltip.prototype.getDelegateOptions = function () { + var options = {} + var defaults = this.getDefaults() + + this._options && $.each(this._options, function (key, value) { + if (defaults[key] != value) options[key] = value + }) + + return options + } + + Tooltip.prototype.enter = function (obj) { + var self = obj instanceof this.constructor ? + obj : $(obj.currentTarget).data('bs.' + this.type) + + if (!self) { + self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) + $(obj.currentTarget).data('bs.' + this.type, self) + } + + if (obj instanceof $.Event) { + self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true + } + + if (self.tip().hasClass('in') || self.hoverState == 'in') { + self.hoverState = 'in' + return + } + + clearTimeout(self.timeout) + + self.hoverState = 'in' + + if (!self.options.delay || !self.options.delay.show) return self.show() + + self.timeout = setTimeout(function () { + if (self.hoverState == 'in') self.show() + }, self.options.delay.show) + } + + Tooltip.prototype.isInStateTrue = function () { + for (var key in this.inState) { + if (this.inState[key]) return true + } + + return false + } + + Tooltip.prototype.leave = function (obj) { + var self = obj instanceof this.constructor ? + obj : $(obj.currentTarget).data('bs.' + this.type) + + if (!self) { + self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) + $(obj.currentTarget).data('bs.' + this.type, self) + } + + if (obj instanceof $.Event) { + self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false + } + + if (self.isInStateTrue()) return + + clearTimeout(self.timeout) + + self.hoverState = 'out' + + if (!self.options.delay || !self.options.delay.hide) return self.hide() + + self.timeout = setTimeout(function () { + if (self.hoverState == 'out') self.hide() + }, self.options.delay.hide) + } + + Tooltip.prototype.show = function () { + var e = $.Event('show.bs.' + this.type) + + if (this.hasContent() && this.enabled) { + this.$element.trigger(e) + + var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0]) + if (e.isDefaultPrevented() || !inDom) return + var that = this + + var $tip = this.tip() + + var tipId = this.getUID(this.type) + + this.setContent() + $tip.attr('id', tipId) + this.$element.attr('aria-describedby', tipId) + + if (this.options.animation) $tip.addClass('fade') + + var placement = typeof this.options.placement == 'function' ? + this.options.placement.call(this, $tip[0], this.$element[0]) : + this.options.placement + + var autoToken = /\s?auto?\s?/i + var autoPlace = autoToken.test(placement) + if (autoPlace) placement = placement.replace(autoToken, '') || 'top' + + $tip + .detach() + .css({ top: 0, left: 0, display: 'block' }) + .addClass(placement) + .data('bs.' + this.type, this) + + this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) + this.$element.trigger('inserted.bs.' + this.type) + + var pos = this.getPosition() + var actualWidth = $tip[0].offsetWidth + var actualHeight = $tip[0].offsetHeight + + if (autoPlace) { + var orgPlacement = placement + var viewportDim = this.getPosition(this.$viewport) + + placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' : + placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' : + placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' : + placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' : + placement + + $tip + .removeClass(orgPlacement) + .addClass(placement) + } + + var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight) + + this.applyPlacement(calculatedOffset, placement) + + var complete = function () { + var prevHoverState = that.hoverState + that.$element.trigger('shown.bs.' + that.type) + that.hoverState = null + + if (prevHoverState == 'out') that.leave(that) + } + + $.support.transition && this.$tip.hasClass('fade') ? + $tip + .one('bsTransitionEnd', complete) + .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : + complete() + } + } + + Tooltip.prototype.applyPlacement = function (offset, placement) { + var $tip = this.tip() + var width = $tip[0].offsetWidth + var height = $tip[0].offsetHeight + + // manually read margins because getBoundingClientRect includes difference + var marginTop = parseInt($tip.css('margin-top'), 10) + var marginLeft = parseInt($tip.css('margin-left'), 10) + + // we must check for NaN for ie 8/9 + if (isNaN(marginTop)) marginTop = 0 + if (isNaN(marginLeft)) marginLeft = 0 + + offset.top += marginTop + offset.left += marginLeft + + // $.fn.offset doesn't round pixel values + // so we use setOffset directly with our own function B-0 + $.offset.setOffset($tip[0], $.extend({ + using: function (props) { + $tip.css({ + top: Math.round(props.top), + left: Math.round(props.left) + }) + } + }, offset), 0) + + $tip.addClass('in') + + // check to see if placing tip in new offset caused the tip to resize itself + var actualWidth = $tip[0].offsetWidth + var actualHeight = $tip[0].offsetHeight + + if (placement == 'top' && actualHeight != height) { + offset.top = offset.top + height - actualHeight + } + + var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight) + + if (delta.left) offset.left += delta.left + else offset.top += delta.top + + var isVertical = /top|bottom/.test(placement) + var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight + var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight' + + $tip.offset(offset) + this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical) + } + + Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) { + this.arrow() + .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%') + .css(isVertical ? 'top' : 'left', '') + } + + Tooltip.prototype.setContent = function () { + var $tip = this.tip() + var title = this.getTitle() + + $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) + $tip.removeClass('fade in top bottom left right') + } + + Tooltip.prototype.hide = function (callback) { + var that = this + var $tip = $(this.$tip) + var e = $.Event('hide.bs.' + this.type) + + function complete() { + if (that.hoverState != 'in') $tip.detach() + if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary. + that.$element + .removeAttr('aria-describedby') + .trigger('hidden.bs.' + that.type) + } + callback && callback() + } + + this.$element.trigger(e) + + if (e.isDefaultPrevented()) return + + $tip.removeClass('in') + + $.support.transition && $tip.hasClass('fade') ? + $tip + .one('bsTransitionEnd', complete) + .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : + complete() + + this.hoverState = null + + return this + } + + Tooltip.prototype.fixTitle = function () { + var $e = this.$element + if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') { + $e.attr('data-original-title', $e.attr('title') || '').attr('title', '') + } + } + + Tooltip.prototype.hasContent = function () { + return this.getTitle() + } + + Tooltip.prototype.getPosition = function ($element) { + $element = $element || this.$element + + var el = $element[0] + var isBody = el.tagName == 'BODY' + + var elRect = el.getBoundingClientRect() + if (elRect.width == null) { + // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093 + elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top }) + } + var isSvg = window.SVGElement && el instanceof window.SVGElement + // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3. + // See https://github.com/twbs/bootstrap/issues/20280 + var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset()) + var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() } + var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null + + return $.extend({}, elRect, scroll, outerDims, elOffset) + } + + Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) { + return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } : + placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } : + placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } : + /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width } + + } + + Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) { + var delta = { top: 0, left: 0 } + if (!this.$viewport) return delta + + var viewportPadding = this.options.viewport && this.options.viewport.padding || 0 + var viewportDimensions = this.getPosition(this.$viewport) + + if (/right|left/.test(placement)) { + var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll + var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight + if (topEdgeOffset < viewportDimensions.top) { // top overflow + delta.top = viewportDimensions.top - topEdgeOffset + } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow + delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset + } + } else { + var leftEdgeOffset = pos.left - viewportPadding + var rightEdgeOffset = pos.left + viewportPadding + actualWidth + if (leftEdgeOffset < viewportDimensions.left) { // left overflow + delta.left = viewportDimensions.left - leftEdgeOffset + } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow + delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset + } + } + + return delta + } + + Tooltip.prototype.getTitle = function () { + var title + var $e = this.$element + var o = this.options + + title = $e.attr('data-original-title') + || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) + + return title + } + + Tooltip.prototype.getUID = function (prefix) { + do prefix += ~~(Math.random() * 1000000) + while (document.getElementById(prefix)) + return prefix + } + + Tooltip.prototype.tip = function () { + if (!this.$tip) { + this.$tip = $(this.options.template) + if (this.$tip.length != 1) { + throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!') + } + } + return this.$tip + } + + Tooltip.prototype.arrow = function () { + return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')) + } + + Tooltip.prototype.enable = function () { + this.enabled = true + } + + Tooltip.prototype.disable = function () { + this.enabled = false + } + + Tooltip.prototype.toggleEnabled = function () { + this.enabled = !this.enabled + } + + Tooltip.prototype.toggle = function (e) { + var self = this + if (e) { + self = $(e.currentTarget).data('bs.' + this.type) + if (!self) { + self = new this.constructor(e.currentTarget, this.getDelegateOptions()) + $(e.currentTarget).data('bs.' + this.type, self) + } + } + + if (e) { + self.inState.click = !self.inState.click + if (self.isInStateTrue()) self.enter(self) + else self.leave(self) + } else { + self.tip().hasClass('in') ? self.leave(self) : self.enter(self) + } + } + + Tooltip.prototype.destroy = function () { + var that = this + clearTimeout(this.timeout) + this.hide(function () { + that.$element.off('.' + that.type).removeData('bs.' + that.type) + if (that.$tip) { + that.$tip.detach() + } + that.$tip = null + that.$arrow = null + that.$viewport = null + that.$element = null + }) + } + + + // TOOLTIP PLUGIN DEFINITION + // ========================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.tooltip') + var options = typeof option == 'object' && option + + if (!data && /destroy|hide/.test(option)) return + if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.tooltip + + $.fn.tooltip = Plugin + $.fn.tooltip.Constructor = Tooltip + + + // TOOLTIP NO CONFLICT + // =================== + + $.fn.tooltip.noConflict = function () { + $.fn.tooltip = old + return this + } + +}(jQuery); + +/* ======================================================================== + * Bootstrap: popover.js v3.3.7 + * http://getbootstrap.com/javascript/#popovers + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // POPOVER PUBLIC CLASS DEFINITION + // =============================== + + var Popover = function (element, options) { + this.init('popover', element, options) + } + + if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js') + + Popover.VERSION = '3.3.7' + + Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, { + placement: 'right', + trigger: 'click', + content: '', + template: '' + }) + + + // NOTE: POPOVER EXTENDS tooltip.js + // ================================ + + Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype) + + Popover.prototype.constructor = Popover + + Popover.prototype.getDefaults = function () { + return Popover.DEFAULTS + } + + Popover.prototype.setContent = function () { + var $tip = this.tip() + var title = this.getTitle() + var content = this.getContent() + + $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) + $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events + this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text' + ](content) + + $tip.removeClass('fade top bottom left right in') + + // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do + // this manually by checking the contents. + if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide() + } + + Popover.prototype.hasContent = function () { + return this.getTitle() || this.getContent() + } + + Popover.prototype.getContent = function () { + var $e = this.$element + var o = this.options + + return $e.attr('data-content') + || (typeof o.content == 'function' ? + o.content.call($e[0]) : + o.content) + } + + Popover.prototype.arrow = function () { + return (this.$arrow = this.$arrow || this.tip().find('.arrow')) + } + + + // POPOVER PLUGIN DEFINITION + // ========================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.popover') + var options = typeof option == 'object' && option + + if (!data && /destroy|hide/.test(option)) return + if (!data) $this.data('bs.popover', (data = new Popover(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.popover + + $.fn.popover = Plugin + $.fn.popover.Constructor = Popover + + + // POPOVER NO CONFLICT + // =================== + + $.fn.popover.noConflict = function () { + $.fn.popover = old + return this + } + +}(jQuery); + +/* ======================================================================== + * Bootstrap: scrollspy.js v3.3.7 + * http://getbootstrap.com/javascript/#scrollspy + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // SCROLLSPY CLASS DEFINITION + // ========================== + + function ScrollSpy(element, options) { + this.$body = $(document.body) + this.$scrollElement = $(element).is(document.body) ? $(window) : $(element) + this.options = $.extend({}, ScrollSpy.DEFAULTS, options) + this.selector = (this.options.target || '') + ' .nav li > a' + this.offsets = [] + this.targets = [] + this.activeTarget = null + this.scrollHeight = 0 + + this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this)) + this.refresh() + this.process() + } + + ScrollSpy.VERSION = '3.3.7' + + ScrollSpy.DEFAULTS = { + offset: 10 + } + + ScrollSpy.prototype.getScrollHeight = function () { + return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight) + } + + ScrollSpy.prototype.refresh = function () { + var that = this + var offsetMethod = 'offset' + var offsetBase = 0 + + this.offsets = [] + this.targets = [] + this.scrollHeight = this.getScrollHeight() + + if (!$.isWindow(this.$scrollElement[0])) { + offsetMethod = 'position' + offsetBase = this.$scrollElement.scrollTop() + } + + this.$body + .find(this.selector) + .map(function () { + var $el = $(this) + var href = $el.data('target') || $el.attr('href') + var $href = /^#./.test(href) && $(href) + + return ($href + && $href.length + && $href.is(':visible') + && [[$href[offsetMethod]().top + offsetBase, href]]) || null + }) + .sort(function (a, b) { return a[0] - b[0] }) + .each(function () { + that.offsets.push(this[0]) + that.targets.push(this[1]) + }) + } + + ScrollSpy.prototype.process = function () { + var scrollTop = this.$scrollElement.scrollTop() + this.options.offset + var scrollHeight = this.getScrollHeight() + var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height() + var offsets = this.offsets + var targets = this.targets + var activeTarget = this.activeTarget + var i + + if (this.scrollHeight != scrollHeight) { + this.refresh() + } + + if (scrollTop >= maxScroll) { + return activeTarget != (i = targets[targets.length - 1]) && this.activate(i) + } + + if (activeTarget && scrollTop < offsets[0]) { + this.activeTarget = null + return this.clear() + } + + for (i = offsets.length; i--;) { + activeTarget != targets[i] + && scrollTop >= offsets[i] + && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1]) + && this.activate(targets[i]) + } + } + + ScrollSpy.prototype.activate = function (target) { + this.activeTarget = target + + this.clear() + + var selector = this.selector + + '[data-target="' + target + '"],' + + this.selector + '[href="' + target + '"]' + + var active = $(selector) + .parents('li') + .addClass('active') + + if (active.parent('.dropdown-menu').length) { + active = active + .closest('li.dropdown') + .addClass('active') + } + + active.trigger('activate.bs.scrollspy') + } + + ScrollSpy.prototype.clear = function () { + $(this.selector) + .parentsUntil(this.options.target, '.active') + .removeClass('active') + } + + + // SCROLLSPY PLUGIN DEFINITION + // =========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.scrollspy') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.scrollspy + + $.fn.scrollspy = Plugin + $.fn.scrollspy.Constructor = ScrollSpy + + + // SCROLLSPY NO CONFLICT + // ===================== + + $.fn.scrollspy.noConflict = function () { + $.fn.scrollspy = old + return this + } + + + // SCROLLSPY DATA-API + // ================== + + $(window).on('load.bs.scrollspy.data-api', function () { + $('[data-spy="scroll"]').each(function () { + var $spy = $(this) + Plugin.call($spy, $spy.data()) + }) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: tab.js v3.3.7 + * http://getbootstrap.com/javascript/#tabs + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // TAB CLASS DEFINITION + // ==================== + + var Tab = function (element) { + // jscs:disable requireDollarBeforejQueryAssignment + this.element = $(element) + // jscs:enable requireDollarBeforejQueryAssignment + } + + Tab.VERSION = '3.3.7' + + Tab.TRANSITION_DURATION = 150 + + Tab.prototype.show = function () { + var $this = this.element + var $ul = $this.closest('ul:not(.dropdown-menu)') + var selector = $this.data('target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + if ($this.parent('li').hasClass('active')) return + + var $previous = $ul.find('.active:last a') + var hideEvent = $.Event('hide.bs.tab', { + relatedTarget: $this[0] + }) + var showEvent = $.Event('show.bs.tab', { + relatedTarget: $previous[0] + }) + + $previous.trigger(hideEvent) + $this.trigger(showEvent) + + if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return + + var $target = $(selector) + + this.activate($this.closest('li'), $ul) + this.activate($target, $target.parent(), function () { + $previous.trigger({ + type: 'hidden.bs.tab', + relatedTarget: $this[0] + }) + $this.trigger({ + type: 'shown.bs.tab', + relatedTarget: $previous[0] + }) + }) + } + + Tab.prototype.activate = function (element, container, callback) { + var $active = container.find('> .active') + var transition = callback + && $.support.transition + && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length) + + function next() { + $active + .removeClass('active') + .find('> .dropdown-menu > .active') + .removeClass('active') + .end() + .find('[data-toggle="tab"]') + .attr('aria-expanded', false) + + element + .addClass('active') + .find('[data-toggle="tab"]') + .attr('aria-expanded', true) + + if (transition) { + element[0].offsetWidth // reflow for transition + element.addClass('in') + } else { + element.removeClass('fade') + } + + if (element.parent('.dropdown-menu').length) { + element + .closest('li.dropdown') + .addClass('active') + .end() + .find('[data-toggle="tab"]') + .attr('aria-expanded', true) + } + + callback && callback() + } + + $active.length && transition ? + $active + .one('bsTransitionEnd', next) + .emulateTransitionEnd(Tab.TRANSITION_DURATION) : + next() + + $active.removeClass('in') + } + + + // TAB PLUGIN DEFINITION + // ===================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.tab') + + if (!data) $this.data('bs.tab', (data = new Tab(this))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.tab + + $.fn.tab = Plugin + $.fn.tab.Constructor = Tab + + + // TAB NO CONFLICT + // =============== + + $.fn.tab.noConflict = function () { + $.fn.tab = old + return this + } + + + // TAB DATA-API + // ============ + + var clickHandler = function (e) { + e.preventDefault() + Plugin.call($(this), 'show') + } + + $(document) + .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler) + .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: affix.js v3.3.7 + * http://getbootstrap.com/javascript/#affix + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // AFFIX CLASS DEFINITION + // ====================== + + var Affix = function (element, options) { + this.options = $.extend({}, Affix.DEFAULTS, options) + + this.$target = $(this.options.target) + .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this)) + .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this)) + + this.$element = $(element) + this.affixed = null + this.unpin = null + this.pinnedOffset = null + + this.checkPosition() + } + + Affix.VERSION = '3.3.7' + + Affix.RESET = 'affix affix-top affix-bottom' + + Affix.DEFAULTS = { + offset: 0, + target: window + } + + Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) { + var scrollTop = this.$target.scrollTop() + var position = this.$element.offset() + var targetHeight = this.$target.height() + + if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false + + if (this.affixed == 'bottom') { + if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom' + return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom' + } + + var initializing = this.affixed == null + var colliderTop = initializing ? scrollTop : position.top + var colliderHeight = initializing ? targetHeight : height + + if (offsetTop != null && scrollTop <= offsetTop) return 'top' + if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom' + + return false + } + + Affix.prototype.getPinnedOffset = function () { + if (this.pinnedOffset) return this.pinnedOffset + this.$element.removeClass(Affix.RESET).addClass('affix') + var scrollTop = this.$target.scrollTop() + var position = this.$element.offset() + return (this.pinnedOffset = position.top - scrollTop) + } + + Affix.prototype.checkPositionWithEventLoop = function () { + setTimeout($.proxy(this.checkPosition, this), 1) + } + + Affix.prototype.checkPosition = function () { + if (!this.$element.is(':visible')) return + + var height = this.$element.height() + var offset = this.options.offset + var offsetTop = offset.top + var offsetBottom = offset.bottom + var scrollHeight = Math.max($(document).height(), $(document.body).height()) + + if (typeof offset != 'object') offsetBottom = offsetTop = offset + if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element) + if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element) + + var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom) + + if (this.affixed != affix) { + if (this.unpin != null) this.$element.css('top', '') + + var affixType = 'affix' + (affix ? '-' + affix : '') + var e = $.Event(affixType + '.bs.affix') + + this.$element.trigger(e) + + if (e.isDefaultPrevented()) return + + this.affixed = affix + this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null + + this.$element + .removeClass(Affix.RESET) + .addClass(affixType) + .trigger(affixType.replace('affix', 'affixed') + '.bs.affix') + } + + if (affix == 'bottom') { + this.$element.offset({ + top: scrollHeight - height - offsetBottom + }) + } + } + + + // AFFIX PLUGIN DEFINITION + // ======================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.affix') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.affix', (data = new Affix(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.affix + + $.fn.affix = Plugin + $.fn.affix.Constructor = Affix + + + // AFFIX NO CONFLICT + // ================= + + $.fn.affix.noConflict = function () { + $.fn.affix = old + return this + } + + + // AFFIX DATA-API + // ============== + + $(window).on('load', function () { + $('[data-spy="affix"]').each(function () { + var $spy = $(this) + var data = $spy.data() + + data.offset = data.offset || {} + + if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom + if (data.offsetTop != null) data.offset.top = data.offsetTop + + Plugin.call($spy, data) + }) + }) + +}(jQuery); diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Scripts/bootstrap.min.js b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Scripts/bootstrap.min.js new file mode 100644 index 000000000..9bcd2fcca --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Scripts/bootstrap.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under the MIT license + */ +if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){if(a(b.target).is(this))return b.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.7",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a("#"===f?[]:f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.7",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c).prop(c,!0)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c).prop(c,!1))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target).closest(".btn");b.call(d,"toggle"),a(c.target).is('input[type="radio"], input[type="checkbox"]')||(c.preventDefault(),d.is("input,button")?d.trigger("focus"):d.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(a>this.$items.length-1||a<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide("next")},c.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.7",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.7",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&jdocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth
          ',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);if(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),!c.isInStateTrue())return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-mo.width?"left":"left"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null,a.$element=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.7",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.7",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b=e[a]&&(void 0===e[a+1]||b .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.7",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return e=a-d&&"bottom"},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Scripts/jquery-3.1.1.intellisense.js b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Scripts/jquery-3.1.1.intellisense.js new file mode 100644 index 000000000..a88b6c6e3 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Scripts/jquery-3.1.1.intellisense.js @@ -0,0 +1,2670 @@ +intellisense.annotate(jQuery, { + 'ajax': function() { + /// + /// Perform an asynchronous HTTP (Ajax) request. + /// A string containing the URL to which the request is sent. + /// A set of key/value pairs that configure the Ajax request. All settings are optional. A default can be set for any option with $.ajaxSetup(). See jQuery.ajax( settings ) below for a complete list of all settings. + /// + /// + /// + /// Perform an asynchronous HTTP (Ajax) request. + /// A set of key/value pairs that configure the Ajax request. All settings are optional. A default can be set for any option with $.ajaxSetup(). + /// + /// + }, + 'ajaxPrefilter': function() { + /// + /// Handle custom Ajax options or modify existing options before each request is sent and before they are processed by $.ajax(). + /// An optional string containing one or more space-separated dataTypes + /// A handler to set default values for future Ajax requests. + /// + }, + 'ajaxSetup': function() { + /// + /// Set default values for future Ajax requests. Its use is not recommended. + /// A set of key/value pairs that configure the default Ajax request. All options are optional. + /// + }, + 'ajaxTransport': function() { + /// + /// Creates an object that handles the actual transmission of Ajax data. + /// A string identifying the data type to use + /// A handler to return the new transport object to use with the data type provided in the first argument. + /// + }, + 'boxModel': function() { + /// Deprecated in jQuery 1.3 (see jQuery.support). States if the current page, in the user's browser, is being rendered using the W3C CSS Box Model. + /// + }, + 'browser': function() { + /// Contains flags for the useragent, read from navigator.userAgent. This property was removed in jQuery 1.9 and is available only through the jQuery.migrate plugin. Please try to use feature detection instead. + /// + }, + 'browser.version': function() { + /// The version number of the rendering engine for the user's browser. This property was removed in jQuery 1.9 and is available only through the jQuery.migrate plugin. + /// + }, + 'Callbacks': function() { + /// + /// A multi-purpose callbacks list object that provides a powerful way to manage callback lists. + /// An optional list of space-separated flags that change how the callback list behaves. + /// + /// + }, + 'contains': function() { + /// + /// Check to see if a DOM element is a descendant of another DOM element. + /// The DOM element that may contain the other element. + /// The DOM element that may be contained by (a descendant of) the other element. + /// + /// + }, + 'cssHooks': function() { + /// Hook directly into jQuery to override how particular CSS properties are retrieved or set, normalize CSS property naming, or create custom properties. + /// + }, + 'data': function() { + /// + /// Returns value at named data store for the element, as set by jQuery.data(element, name, value), or the full data store for the element. + /// The DOM element to query for the data. + /// Name of the data stored. + /// + /// + /// + /// Returns value at named data store for the element, as set by jQuery.data(element, name, value), or the full data store for the element. + /// The DOM element to query for the data. + /// + /// + }, + 'Deferred': function() { + /// + /// A constructor function that returns a chainable utility object with methods to register multiple callbacks into callback queues, invoke callback queues, and relay the success or failure state of any synchronous or asynchronous function. + /// A function that is called just before the constructor returns. + /// + /// + }, + 'dequeue': function() { + /// + /// Execute the next function on the queue for the matched element. + /// A DOM element from which to remove and execute a queued function. + /// A string containing the name of the queue. Defaults to fx, the standard effects queue. + /// + }, + 'each': function() { + /// + /// A generic iterator function, which can be used to seamlessly iterate over both objects and arrays. Arrays and array-like objects with a length property (such as a function's arguments object) are iterated by numeric index, from 0 to length-1. Other objects are iterated via their named properties. + /// The object or array to iterate over. + /// The function that will be executed on every object. + /// + /// + }, + 'error': function() { + /// + /// Takes a string and throws an exception containing it. + /// The message to send out. + /// + }, + 'extend': function() { + /// + /// Merge the contents of two or more objects together into the first object. + /// An object that will receive the new properties if additional objects are passed in or that will extend the jQuery namespace if it is the sole argument. + /// An object containing additional properties to merge in. + /// Additional objects containing properties to merge in. + /// + /// + /// + /// Merge the contents of two or more objects together into the first object. + /// If true, the merge becomes recursive (aka. deep copy). + /// The object to extend. It will receive the new properties. + /// An object containing additional properties to merge in. + /// Additional objects containing properties to merge in. + /// + /// + }, + 'fn.extend': function() { + /// + /// Merge the contents of an object onto the jQuery prototype to provide new jQuery instance methods. + /// An object to merge onto the jQuery prototype. + /// + /// + }, + 'get': function() { + /// + /// Load data from the server using a HTTP GET request. + /// A string containing the URL to which the request is sent. + /// A plain object or string that is sent to the server with the request. + /// A callback function that is executed if the request succeeds. + /// The type of data expected from the server. Default: Intelligent Guess (xml, json, script, or html). + /// + /// + }, + 'getJSON': function() { + /// + /// Load JSON-encoded data from the server using a GET HTTP request. + /// A string containing the URL to which the request is sent. + /// A plain object or string that is sent to the server with the request. + /// A callback function that is executed if the request succeeds. + /// + /// + }, + 'getScript': function() { + /// + /// Load a JavaScript file from the server using a GET HTTP request, then execute it. + /// A string containing the URL to which the request is sent. + /// A callback function that is executed if the request succeeds. + /// + /// + }, + 'globalEval': function() { + /// + /// Execute some JavaScript code globally. + /// The JavaScript code to execute. + /// + }, + 'grep': function() { + /// + /// Finds the elements of an array which satisfy a filter function. The original array is not affected. + /// The array to search through. + /// The function to process each item against. The first argument to the function is the item, and the second argument is the index. The function should return a Boolean value. this will be the global window object. + /// If "invert" is false, or not provided, then the function returns an array consisting of all elements for which "callback" returns true. If "invert" is true, then the function returns an array consisting of all elements for which "callback" returns false. + /// + /// + }, + 'hasData': function() { + /// + /// Determine whether an element has any jQuery data associated with it. + /// A DOM element to be checked for data. + /// + /// + }, + 'holdReady': function() { + /// + /// Holds or releases the execution of jQuery's ready event. + /// Indicates whether the ready hold is being requested or released + /// + }, + 'inArray': function() { + /// + /// Search for a specified value within an array and return its index (or -1 if not found). + /// The value to search for. + /// An array through which to search. + /// The index of the array at which to begin the search. The default is 0, which will search the whole array. + /// + /// + }, + 'isArray': function() { + /// + /// Determine whether the argument is an array. + /// Object to test whether or not it is an array. + /// + /// + }, + 'isEmptyObject': function() { + /// + /// Check to see if an object is empty (contains no enumerable properties). + /// The object that will be checked to see if it's empty. + /// + /// + }, + 'isFunction': function() { + /// + /// Determine if the argument passed is a Javascript function object. + /// Object to test whether or not it is a function. + /// + /// + }, + 'isNumeric': function() { + /// + /// Determines whether its argument is a number. + /// The value to be tested. + /// + /// + }, + 'isPlainObject': function() { + /// + /// 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. + /// + /// + }, + 'isWindow': function() { + /// + /// Determine whether the argument is a window. + /// Object to test whether or not it is a window. + /// + /// + }, + 'isXMLDoc': function() { + /// + /// Check to see if a DOM node is within an XML document (or is an XML document). + /// The DOM node that will be checked to see if it's in an XML document. + /// + /// + }, + 'makeArray': function() { + /// + /// Convert an array-like object into a true JavaScript array. + /// Any object to turn into a native Array. + /// + /// + }, + 'map': function() { + /// + /// Translate all items in an array or object to new array of items. + /// The Array to translate. + /// The function to process each item against. The first argument to the function is the array item, the second argument is the index in array The function can return any value. Within the function, this refers to the global (window) object. + /// + /// + /// + /// Translate all items in an array or object to new array of items. + /// The Array or Object to translate. + /// The function to process each item against. The first argument to the function is the value; the second argument is the index or key of the array or object property. The function can return any value to add to the array. A returned array will be flattened into the resulting array. Within the function, this refers to the global (window) object. + /// + /// + }, + 'merge': function() { + /// + /// Merge the contents of two arrays together into the first array. + /// The first array to merge, the elements of second added. + /// The second array to merge into the first, unaltered. + /// + /// + }, + 'noConflict': function() { + /// + /// Relinquish jQuery's control of the $ variable. + /// A Boolean indicating whether to remove all jQuery variables from the global scope (including jQuery itself). + /// + /// + }, + 'noop': function() { + /// An empty function. + }, + 'now': function() { + /// Return a number representing the current time. + /// + }, + 'param': function() { + /// + /// Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request. + /// An array or object to serialize. + /// + /// + /// + /// Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request. + /// An array or object to serialize. + /// A Boolean indicating whether to perform a traditional "shallow" serialization. + /// + /// + }, + 'parseHTML': function() { + /// + /// Parses a string into an array of DOM nodes. + /// HTML string to be parsed + /// Document element to serve as the context in which the HTML fragment will be created + /// A Boolean indicating whether to include scripts passed in the HTML string + /// + /// + }, + 'parseJSON': function() { + /// + /// Takes a well-formed JSON string and returns the resulting JavaScript object. + /// The JSON string to parse. + /// + /// + }, + 'parseXML': function() { + /// + /// Parses a string into an XML document. + /// a well-formed XML string to be parsed + /// + /// + }, + 'post': function() { + /// + /// Load data from the server using a HTTP POST request. + /// A string containing the URL to which the request is sent. + /// A plain object or string that is sent to the server with the request. + /// A callback function that is executed if the request succeeds. Required if dataType is provided, but can be null in that case. + /// The type of data expected from the server. Default: Intelligent Guess (xml, json, script, text, html). + /// + /// + }, + 'proxy': function() { + /// + /// Takes a function and returns a new one that will always have a particular context. + /// The function whose context will be changed. + /// The object to which the context (this) of the function should be set. + /// + /// + /// + /// Takes a function and returns a new one that will always have a particular context. + /// The object to which the context of the function should be set. + /// The name of the function whose context will be changed (should be a property of the context object). + /// + /// + /// + /// Takes a function and returns a new one that will always have a particular context. + /// The function whose context will be changed. + /// The object to which the context (this) of the function should be set. + /// Any number of arguments to be passed to the function referenced in the function argument. + /// + /// + /// + /// Takes a function and returns a new one that will always have a particular context. + /// The object to which the context of the function should be set. + /// The name of the function whose context will be changed (should be a property of the context object). + /// Any number of arguments to be passed to the function named in the name argument. + /// + /// + }, + 'queue': function() { + /// + /// Manipulate the queue of functions to be executed on the matched element. + /// A DOM element where the array of queued functions is attached. + /// A string containing the name of the queue. Defaults to fx, the standard effects queue. + /// An array of functions to replace the current queue contents. + /// + /// + /// + /// Manipulate the queue of functions to be executed on the matched element. + /// A DOM element on which to add a queued function. + /// A string containing the name of the queue. Defaults to fx, the standard effects queue. + /// The new function to add to the queue. + /// + /// + }, + 'removeData': function() { + /// + /// Remove a previously-stored piece of data. + /// A DOM element from which to remove data. + /// A string naming the piece of data to remove. + /// + /// + }, + 'sub': function() { + /// Creates a new copy of jQuery whose properties and methods can be modified without affecting the original jQuery object. + /// + }, + 'support': function() { + /// A collection of properties that represent the presence of different browser features or bugs. Primarily intended for jQuery's internal use; specific properties may be removed when they are no longer needed internally to improve page startup performance. + /// + }, + 'trim': function() { + /// + /// Remove the whitespace from the beginning and end of a string. + /// The string to trim. + /// + /// + }, + 'type': function() { + /// + /// Determine the internal JavaScript [[Class]] of an object. + /// Object to get the internal JavaScript [[Class]] of. + /// + /// + }, + 'unique': function() { + /// + /// Sorts an array of DOM elements, in place, with the duplicates removed. Note that this only works on arrays of DOM elements, not strings or numbers. + /// The Array of DOM elements. + /// + /// + }, + 'when': function() { + /// + /// Provides a way to execute callback functions based on one or more objects, usually Deferred objects that represent asynchronous events. + /// One or more Deferred objects, or plain JavaScript objects. + /// + /// + }, +}); + +var _1228819969 = jQuery.Callbacks; +jQuery.Callbacks = function(flags) { +var _object = _1228819969(flags); +intellisense.annotate(_object, { + 'add': function() { + /// + /// Add a callback or a collection of callbacks to a callback list. + /// A function, or array of functions, that are to be added to the callback list. + /// + /// + }, + 'disable': function() { + /// Disable a callback list from doing anything more. + /// + }, + 'disabled': function() { + /// Determine if the callbacks list has been disabled. + /// + }, + 'empty': function() { + /// Remove all of the callbacks from a list. + /// + }, + 'fire': function() { + /// + /// Call all of the callbacks with the given arguments + /// The argument or list of arguments to pass back to the callback list. + /// + /// + }, + 'fired': function() { + /// Determine if the callbacks have already been called at least once. + /// + }, + 'fireWith': function() { + /// + /// Call all callbacks in a list with the given context and arguments. + /// A reference to the context in which the callbacks in the list should be fired. + /// An argument, or array of arguments, to pass to the callbacks in the list. + /// + /// + }, + 'has': function() { + /// + /// Determine whether a supplied callback is in a list + /// The callback to search for. + /// + /// + }, + 'lock': function() { + /// Lock a callback list in its current state. + /// + }, + 'locked': function() { + /// Determine if the callbacks list has been locked. + /// + }, + 'remove': function() { + /// + /// Remove a callback or a collection of callbacks from a callback list. + /// A function, or array of functions, that are to be removed from the callback list. + /// + /// + }, +}); + +return _object; +}; +intellisense.redirectDefinition(jQuery.Callbacks, _1228819969); + +var _731531622 = jQuery.Deferred; +jQuery.Deferred = function(func) { +var _object = _731531622(func); +intellisense.annotate(_object, { + 'always': function() { + /// + /// Add handlers to be called when the Deferred object is either resolved or rejected. + /// A function, or array of functions, that is called when the Deferred is resolved or rejected. + /// Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected. + /// + /// + }, + 'done': function() { + /// + /// Add handlers to be called when the Deferred object is resolved. + /// A function, or array of functions, that are called when the Deferred is resolved. + /// Optional additional functions, or arrays of functions, that are called when the Deferred is resolved. + /// + /// + }, + 'fail': function() { + /// + /// Add handlers to be called when the Deferred object is rejected. + /// A function, or array of functions, that are called when the Deferred is rejected. + /// Optional additional functions, or arrays of functions, that are called when the Deferred is rejected. + /// + /// + }, + 'isRejected': function() { + /// Determine whether a Deferred object has been rejected. + /// + }, + 'isResolved': function() { + /// Determine whether a Deferred object has been resolved. + /// + }, + 'notify': function() { + /// + /// Call the progressCallbacks on a Deferred object with the given args. + /// Optional arguments that are passed to the progressCallbacks. + /// + /// + }, + 'notifyWith': function() { + /// + /// Call the progressCallbacks on a Deferred object with the given context and args. + /// Context passed to the progressCallbacks as the this object. + /// Optional arguments that are passed to the progressCallbacks. + /// + /// + }, + 'pipe': function() { + /// + /// Utility method to filter and/or chain Deferreds. + /// An optional function that is called when the Deferred is resolved. + /// An optional function that is called when the Deferred is rejected. + /// + /// + /// + /// Utility method to filter and/or chain Deferreds. + /// An optional function that is called when the Deferred is resolved. + /// An optional function that is called when the Deferred is rejected. + /// An optional function that is called when progress notifications are sent to the Deferred. + /// + /// + }, + 'progress': function() { + /// + /// Add handlers to be called when the Deferred object generates progress notifications. + /// A function, or array of functions, to be called when the Deferred generates progress notifications. + /// + /// + }, + 'promise': function() { + /// + /// Return a Deferred's Promise object. + /// Object onto which the promise methods have to be attached + /// + /// + }, + 'reject': function() { + /// + /// Reject a Deferred object and call any failCallbacks with the given args. + /// Optional arguments that are passed to the failCallbacks. + /// + /// + }, + 'rejectWith': function() { + /// + /// Reject a Deferred object and call any failCallbacks with the given context and args. + /// Context passed to the failCallbacks as the this object. + /// An optional array of arguments that are passed to the failCallbacks. + /// + /// + }, + 'resolve': function() { + /// + /// Resolve a Deferred object and call any doneCallbacks with the given args. + /// Optional arguments that are passed to the doneCallbacks. + /// + /// + }, + 'resolveWith': function() { + /// + /// Resolve a Deferred object and call any doneCallbacks with the given context and args. + /// Context passed to the doneCallbacks as the this object. + /// An optional array of arguments that are passed to the doneCallbacks. + /// + /// + }, + 'state': function() { + /// Determine the current state of a Deferred object. + /// + }, + 'then': function() { + /// + /// Add handlers to be called when the Deferred object is resolved, rejected, or still in progress. + /// A function that is called when the Deferred is resolved. + /// An optional function that is called when the Deferred is rejected. + /// An optional function that is called when progress notifications are sent to the Deferred. + /// + /// + /// + /// Add handlers to be called when the Deferred object is resolved, rejected, or still in progress. + /// A function, or array of functions, called when the Deferred is resolved. + /// A function, or array of functions, called when the Deferred is rejected. + /// + /// + /// + /// Add handlers to be called when the Deferred object is resolved, rejected, or still in progress. + /// A function, or array of functions, called when the Deferred is resolved. + /// A function, or array of functions, called when the Deferred is rejected. + /// A function, or array of functions, called when the Deferred notifies progress. + /// + /// + }, +}); + +return _object; +}; +intellisense.redirectDefinition(jQuery.Callbacks, _731531622); + +intellisense.annotate(jQuery.Event.prototype, { + 'currentTarget': function() { + /// The current DOM element within the event bubbling phase. + /// + }, + 'data': function() { + /// An optional object of data passed to an event method when the current executing handler is bound. + /// + }, + 'delegateTarget': function() { + /// The element where the currently-called jQuery event handler was attached. + /// + }, + 'isDefaultPrevented': function() { + /// Returns whether event.preventDefault() was ever called on this event object. + /// + }, + 'isImmediatePropagationStopped': function() { + /// Returns whether event.stopImmediatePropagation() was ever called on this event object. + /// + }, + 'isPropagationStopped': function() { + /// Returns whether event.stopPropagation() was ever called on this event object. + /// + }, + 'metaKey': function() { + /// Indicates whether the META key was pressed when the event fired. + /// + }, + 'namespace': function() { + /// The namespace specified when the event was triggered. + /// + }, + 'pageX': function() { + /// The mouse position relative to the left edge of the document. + /// + }, + 'pageY': function() { + /// The mouse position relative to the top edge of the document. + /// + }, + 'preventDefault': function() { + /// If this method is called, the default action of the event will not be triggered. + }, + 'relatedTarget': function() { + /// The other DOM element involved in the event, if any. + /// + }, + 'result': function() { + /// The last value returned by an event handler that was triggered by this event, unless the value was undefined. + /// + }, + 'stopImmediatePropagation': function() { + /// Keeps the rest of the handlers from being executed and prevents the event from bubbling up the DOM tree. + }, + 'stopPropagation': function() { + /// Prevents the event from bubbling up the DOM tree, preventing any parent handlers from being notified of the event. + }, + 'target': function() { + /// The DOM element that initiated the event. + /// + }, + 'timeStamp': function() { + /// The difference in milliseconds between the time the browser created the event and January 1, 1970. + /// + }, + 'type': function() { + /// Describes the nature of the event. + /// + }, + 'which': function() { + /// For key or mouse events, this property indicates the specific key or button that was pressed. + /// + }, +}); + +intellisense.annotate(jQuery.fn, { + 'add': function() { + /// + /// Add elements to the set of matched elements. + /// A string representing a selector expression to find additional elements to add to the set of matched elements. + /// + /// + /// + /// Add elements to the set of matched elements. + /// One or more elements to add to the set of matched elements. + /// + /// + /// + /// Add elements to the set of matched elements. + /// An HTML fragment to add to the set of matched elements. + /// + /// + /// + /// Add elements to the set of matched elements. + /// An existing jQuery object to add to the set of matched elements. + /// + /// + /// + /// Add elements to the set of matched elements. + /// A string representing a selector expression to find additional elements to add to the set of matched elements. + /// The point in the document at which the selector should begin matching; similar to the context argument of the $(selector, context) method. + /// + /// + }, + 'addBack': function() { + /// + /// Add the previous set of elements on the stack to the current set, optionally filtered by a selector. + /// A string containing a selector expression to match the current set of elements against. + /// + /// + }, + 'addClass': function() { + /// + /// Adds the specified class(es) to each of the set of matched elements. + /// One or more space-separated classes to be added to the class attribute of each matched element. + /// + /// + /// + /// Adds the specified class(es) to each of the set of matched elements. + /// A function returning one or more space-separated class names to be added to the existing class name(s). Receives the index position of the element in the set and the existing class name(s) as arguments. Within the function, this refers to the current element in the set. + /// + /// + }, + 'after': function() { + /// + /// Insert content, specified by the parameter, after each element in the set of matched elements. + /// HTML string, DOM element, or jQuery object to insert after each element in the set of matched elements. + /// One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert after each element in the set of matched elements. + /// + /// + /// + /// Insert content, specified by the parameter, after each element in the set of matched elements. + /// A function that returns an HTML string, DOM element(s), or jQuery object to insert after each element in the set of matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set. + /// + /// + }, + 'ajaxComplete': function() { + /// + /// Register a handler to be called when Ajax requests complete. This is an AjaxEvent. + /// The function to be invoked. + /// + /// + }, + 'ajaxError': function() { + /// + /// Register a handler to be called when Ajax requests complete with an error. This is an Ajax Event. + /// The function to be invoked. + /// + /// + }, + 'ajaxSend': function() { + /// + /// Attach a function to be executed before an Ajax request is sent. This is an Ajax Event. + /// The function to be invoked. + /// + /// + }, + 'ajaxStart': function() { + /// + /// Register a handler to be called when the first Ajax request begins. This is an Ajax Event. + /// The function to be invoked. + /// + /// + }, + 'ajaxStop': function() { + /// + /// Register a handler to be called when all Ajax requests have completed. This is an Ajax Event. + /// The function to be invoked. + /// + /// + }, + 'ajaxSuccess': function() { + /// + /// Attach a function to be executed whenever an Ajax request completes successfully. This is an Ajax Event. + /// The function to be invoked. + /// + /// + }, + 'all': function() { + /// Selects all elements. + }, + 'andSelf': function() { + /// Add the previous set of elements on the stack to the current set. + /// + }, + 'animate': function() { + /// + /// Perform a custom animation of a set of CSS properties. + /// An object of CSS properties and values that the animation will move toward. + /// A string or number determining how long the animation will run. + /// A string indicating which easing function to use for the transition. + /// A function to call once the animation is complete. + /// + /// + /// + /// Perform a custom animation of a set of CSS properties. + /// An object of CSS properties and values that the animation will move toward. + /// A map of additional options to pass to the method. + /// + /// + }, + 'animated': function() { + /// Select all elements that are in the progress of an animation at the time the selector is run. + }, + 'append': function() { + /// + /// Insert content, specified by the parameter, to the end of each element in the set of matched elements. + /// DOM element, HTML string, or jQuery object to insert at the end of each element in the set of matched elements. + /// One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the end of each element in the set of matched elements. + /// + /// + /// + /// Insert content, specified by the parameter, to the end of each element in the set of matched elements. + /// A function that returns an HTML string, DOM element(s), or jQuery object to insert at the end of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set. + /// + /// + }, + 'appendTo': function() { + /// + /// Insert every element in the set of matched elements to the end of the target. + /// A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted at the end of the element(s) specified by this parameter. + /// + /// + }, + 'attr': function() { + /// + /// Set one or more attributes for the set of matched elements. + /// The name of the attribute to set. + /// A value to set for the attribute. + /// + /// + /// + /// Set one or more attributes for the set of matched elements. + /// An object of attribute-value pairs to set. + /// + /// + /// + /// Set one or more attributes for the set of matched elements. + /// The name of the attribute to set. + /// A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old attribute value as arguments. + /// + /// + }, + 'attributeContains': function() { + /// + /// Selects elements that have the specified attribute with a value containing the a given substring. + /// An attribute name. + /// An attribute value. Can be either an unquoted single word or a quoted string. + /// + }, + 'attributeContainsPrefix': function() { + /// + /// Selects elements that have the specified attribute with a value either equal to a given string or starting with that string followed by a hyphen (-). + /// An attribute name. + /// An attribute value. Can be either an unquoted single word or a quoted string. + /// + }, + 'attributeContainsWord': function() { + /// + /// Selects elements that have the specified attribute with a value containing a given word, delimited by spaces. + /// An attribute name. + /// An attribute value. Can be either an unquoted single word or a quoted string. + /// + }, + 'attributeEndsWith': function() { + /// + /// Selects elements that have the specified attribute with a value ending exactly with a given string. The comparison is case sensitive. + /// An attribute name. + /// An attribute value. Can be either an unquoted single word or a quoted string. + /// + }, + 'attributeEquals': function() { + /// + /// Selects elements that have the specified attribute with a value exactly equal to a certain value. + /// An attribute name. + /// An attribute value. Can be either an unquoted single word or a quoted string. + /// + }, + 'attributeHas': function() { + /// + /// Selects elements that have the specified attribute, with any value. + /// An attribute name. + /// + }, + 'attributeMultiple': function() { + /// + /// Matches elements that match all of the specified attribute filters. + /// An attribute filter. + /// Another attribute filter, reducing the selection even more + /// As many more attribute filters as necessary + /// + }, + 'attributeNotEqual': function() { + /// + /// Select elements that either don't have the specified attribute, or do have the specified attribute but not with a certain value. + /// An attribute name. + /// An attribute value. Can be either an unquoted single word or a quoted string. + /// + }, + 'attributeStartsWith': function() { + /// + /// Selects elements that have the specified attribute with a value beginning exactly with a given string. + /// An attribute name. + /// An attribute value. Can be either an unquoted single word or a quoted string. + /// + }, + 'before': function() { + /// + /// Insert content, specified by the parameter, before each element in the set of matched elements. + /// HTML string, DOM element, or jQuery object to insert before each element in the set of matched elements. + /// One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert before each element in the set of matched elements. + /// + /// + /// + /// Insert content, specified by the parameter, before each element in the set of matched elements. + /// A function that returns an HTML string, DOM element(s), or jQuery object to insert before each element in the set of matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set. + /// + /// + }, + 'bind': function() { + /// + /// Attach a handler to an event for the elements. + /// A string containing one or more DOM event types, such as "click" or "submit," or custom event names. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Attach a handler to an event for the elements. + /// A string containing one or more DOM event types, such as "click" or "submit," or custom event names. + /// An object containing data that will be passed to the event handler. + /// Setting the third argument to false will attach a function that prevents the default action from occurring and stops the event from bubbling. The default is true. + /// + /// + /// + /// Attach a handler to an event for the elements. + /// An object containing one or more DOM event types and functions to execute for them. + /// + /// + }, + 'blur': function() { + /// + /// Bind an event handler to the "blur" JavaScript event, or trigger that event on an element. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to the "blur" JavaScript event, or trigger that event on an element. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'button': function() { + /// Selects all button elements and elements of type button. + }, + 'change': function() { + /// + /// Bind an event handler to the "change" JavaScript event, or trigger that event on an element. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to the "change" JavaScript event, or trigger that event on an element. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'checkbox': function() { + /// Selects all elements of type checkbox. + }, + 'checked': function() { + /// Matches all elements that are checked or selected. + }, + 'child': function() { + /// + /// Selects all direct child elements specified by "child" of elements specified by "parent". + /// Any valid selector. + /// A selector to filter the child elements. + /// + }, + 'children': function() { + /// + /// Get the children of each element in the set of matched elements, optionally filtered by a selector. + /// A string containing a selector expression to match elements against. + /// + /// + }, + 'class': function() { + /// + /// Selects all elements with the given class. + /// A class to search for. An element can have multiple classes; only one of them must match. + /// + }, + 'clearQueue': function() { + /// + /// 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. + /// + /// + }, + 'click': function() { + /// + /// Bind an event handler to the "click" JavaScript event, or trigger that event on an element. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to the "click" JavaScript event, or trigger that event on an element. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'clone': function() { + /// + /// Create a deep copy of the set of matched elements. + /// A Boolean indicating whether event handlers should be copied along with the elements. As of jQuery 1.4, element data will be copied as well. + /// + /// + /// + /// Create a deep copy of the set of matched elements. + /// A Boolean indicating whether event handlers and data should be copied along with the elements. The default value is false. *In jQuery 1.5.0 the default value was incorrectly true; it was changed back to false in 1.5.1 and up. + /// A Boolean indicating whether event handlers and data for all children of the cloned element should be copied. By default its value matches the first argument's value (which defaults to false). + /// + /// + }, + 'closest': function() { + /// + /// For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree. + /// A string containing a selector expression to match elements against. + /// + /// + /// + /// For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree. + /// 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. + /// + /// + /// + /// For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree. + /// A jQuery object to match elements against. + /// + /// + /// + /// For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree. + /// An element to match elements against. + /// + /// + }, + 'contains': function() { + /// + /// Select all elements that contain the specified text. + /// A string of text to look for. It's case sensitive. + /// + }, + 'contents': function() { + /// Get the children of each element in the set of matched elements, including text and comment nodes. + /// + }, + 'context': function() { + /// The DOM node context originally passed to jQuery(); if none was passed then context will likely be the document. + /// + }, + 'css': function() { + /// + /// Set one or more CSS properties for the set of matched elements. + /// A CSS property name. + /// A value to set for the property. + /// + /// + /// + /// Set one or more CSS properties for the set of matched elements. + /// A CSS property name. + /// A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old value as arguments. + /// + /// + /// + /// Set one or more CSS properties for the set of matched elements. + /// An object of property-value pairs to set. + /// + /// + }, + 'data': function() { + /// + /// Store arbitrary data associated with the matched elements. + /// A string naming the piece of data to set. + /// The new data value; it can be any Javascript type including Array or Object. + /// + /// + /// + /// Store arbitrary data associated with the matched elements. + /// An object of key-value pairs of data to update. + /// + /// + }, + 'dblclick': function() { + /// + /// Bind an event handler to the "dblclick" JavaScript event, or trigger that event on an element. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to the "dblclick" JavaScript event, or trigger that event on an element. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'delay': function() { + /// + /// 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. + /// + /// + }, + 'delegate': function() { + /// + /// Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements. + /// A selector to filter the elements that trigger the event. + /// A string containing one or more space-separated JavaScript event types, such as "click" or "keydown," or custom event names. + /// A function to execute at the time the event is triggered. + /// + /// + /// + /// Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements. + /// A selector to filter the elements that trigger the event. + /// A string containing one or more space-separated JavaScript event types, such as "click" or "keydown," or custom event names. + /// An object containing data that will be passed to the event handler. + /// A function to execute at the time the event is triggered. + /// + /// + /// + /// Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements. + /// A selector to filter the elements that trigger the event. + /// A plain object of one or more event types and functions to execute for them. + /// + /// + }, + 'dequeue': function() { + /// + /// Execute the next function on the queue for the matched elements. + /// A string containing the name of the queue. Defaults to fx, the standard effects queue. + /// + /// + }, + 'descendant': function() { + /// + /// Selects all elements that are descendants of a given ancestor. + /// Any valid selector. + /// A selector to filter the descendant elements. + /// + }, + 'detach': function() { + /// + /// Remove the set of matched elements from the DOM. + /// A selector expression that filters the set of matched elements to be removed. + /// + /// + }, + 'die': function() { + /// + /// Remove 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 no longer to be executed. + /// + /// + /// + /// Remove event handlers previously attached using .live() from the elements. + /// A plain object of one or more event types, such as click or keydown and their corresponding functions that are no longer to be executed. + /// + /// + }, + 'disabled': function() { + /// Selects all elements that are disabled. + }, + 'each': function() { + /// + /// Iterate over a jQuery object, executing a function for each matched element. + /// A function to execute for each matched element. + /// + /// + }, + 'element': function() { + /// + /// Selects all elements with the given tag name. + /// An element to search for. Refers to the tagName of DOM nodes. + /// + }, + 'empty': function() { + /// Select all elements that have no children (including text nodes). + }, + 'enabled': function() { + /// Selects all elements that are enabled. + }, + 'end': function() { + /// End the most recent filtering operation in the current chain and return the set of matched elements to its previous state. + /// + }, + 'eq': function() { + /// + /// Select the element at index n within the matched set. + /// Zero-based index of the element to match. + /// + /// + /// Select the element at index n within the matched set. + /// Zero-based index of the element to match, counting backwards from the last element. + /// + }, + 'error': function() { + /// + /// Bind an event handler to the "error" JavaScript event. + /// A function to execute when the event is triggered. + /// + /// + /// + /// Bind an event handler to the "error" JavaScript event. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'even': function() { + /// Selects even elements, zero-indexed. See also odd. + }, + 'fadeIn': function() { + /// + /// Display the matched elements by fading them to opaque. + /// A string or number determining how long the animation will run. + /// A function to call once the animation is complete. + /// + /// + /// + /// Display the matched elements by fading them to opaque. + /// A map of additional options to pass to the method. + /// + /// + /// + /// Display the matched elements by fading them to opaque. + /// A string or number determining how long the animation will run. + /// A string indicating which easing function to use for the transition. + /// A function to call once the animation is complete. + /// + /// + }, + 'fadeOut': function() { + /// + /// Hide the matched elements by fading them to transparent. + /// A string or number determining how long the animation will run. + /// A function to call once the animation is complete. + /// + /// + /// + /// Hide the matched elements by fading them to transparent. + /// A map of additional options to pass to the method. + /// + /// + /// + /// Hide the matched elements by fading them to transparent. + /// A string or number determining how long the animation will run. + /// A string indicating which easing function to use for the transition. + /// A function to call once the animation is complete. + /// + /// + }, + 'fadeTo': function() { + /// + /// Adjust the opacity of the matched elements. + /// A string or number determining how long the animation will run. + /// A number between 0 and 1 denoting the target opacity. + /// A function to call once the animation is complete. + /// + /// + /// + /// Adjust the opacity of the matched elements. + /// A string or number determining how long the animation will run. + /// A number between 0 and 1 denoting the target opacity. + /// A string indicating which easing function to use for the transition. + /// A function to call once the animation is complete. + /// + /// + }, + 'fadeToggle': function() { + /// + /// Display or hide the matched elements by animating their opacity. + /// A string or number determining how long the animation will run. + /// A string indicating which easing function to use for the transition. + /// A function to call once the animation is complete. + /// + /// + /// + /// Display or hide the matched elements by animating their opacity. + /// A map of additional options to pass to the method. + /// + /// + }, + 'file': function() { + /// Selects all elements of type file. + }, + 'filter': function() { + /// + /// Reduce the set of matched elements to those that match the selector or pass the function's test. + /// A string containing a selector expression to match the current set of elements against. + /// + /// + /// + /// Reduce the set of matched elements to those that match the selector or pass the function's test. + /// A function used as a test for each element in the set. this is the current DOM element. + /// + /// + /// + /// Reduce the set of matched elements to those that match the selector or pass the function's test. + /// An element to match the current set of elements against. + /// + /// + /// + /// Reduce the set of matched elements to those that match the selector or pass the function's test. + /// An existing jQuery object to match the current set of elements against. + /// + /// + }, + 'find': function() { + /// + /// Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element. + /// A string containing a selector expression to match elements against. + /// + /// + /// + /// Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element. + /// A jQuery object to match elements against. + /// + /// + /// + /// Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element. + /// An element to match elements against. + /// + /// + }, + 'finish': function() { + /// + /// Stop the currently-running animation, remove all queued animations, and complete all animations for the matched elements. + /// The name of the queue in which to stop animations. + /// + /// + }, + 'first': function() { + /// Selects the first matched element. + }, + 'first-child': function() { + /// Selects all elements that are the first child of their parent. + }, + 'first-of-type': function() { + /// Selects all elements that are the first among siblings of the same element name. + }, + 'focus': function() { + /// + /// Bind an event handler to the "focus" JavaScript event, or trigger that event on an element. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to the "focus" JavaScript event, or trigger that event on an element. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'focusin': function() { + /// + /// Bind an event handler to the "focusin" event. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to the "focusin" event. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'focusout': function() { + /// + /// Bind an event handler to the "focusout" JavaScript event. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to the "focusout" JavaScript event. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'get': function() { + /// + /// Retrieve one of the DOM elements matched by the jQuery object. + /// A zero-based integer indicating which element to retrieve. + /// + /// + }, + 'gt': function() { + /// + /// Select all elements at an index greater than index within the matched set. + /// Zero-based index. + /// + /// + /// Select all elements at an index greater than index within the matched set. + /// Zero-based index, counting backwards from the last element. + /// + }, + 'has': function() { + /// + /// 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. + /// + /// + /// + /// Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element. + /// A DOM element to match elements against. + /// + /// + }, + 'hasClass': function() { + /// + /// Determine whether any of the matched elements are assigned the given class. + /// The class name to search for. + /// + /// + }, + 'header': function() { + /// Selects all elements that are headers, like h1, h2, h3 and so on. + }, + 'height': function() { + /// + /// Set the CSS height of every matched element. + /// An integer representing the number of pixels, or an integer with an optional unit of measure appended (as a string). + /// + /// + /// + /// Set the CSS height of every matched element. + /// A function returning the height to set. Receives the index position of the element in the set and the old height as arguments. Within the function, this refers to the current element in the set. + /// + /// + }, + 'hidden': function() { + /// Selects all elements that are hidden. + }, + 'hide': function() { + /// + /// Hide the matched elements. + /// A string or number determining how long the animation will run. + /// A function to call once the animation is complete. + /// + /// + /// + /// Hide the matched elements. + /// A map of additional options to pass to the method. + /// + /// + /// + /// Hide the matched elements. + /// A string or number determining how long the animation will run. + /// A string indicating which easing function to use for the transition. + /// A function to call once the animation is complete. + /// + /// + }, + 'hover': function() { + /// + /// Bind two handlers to the matched elements, to be executed when the mouse pointer enters and leaves the elements. + /// A function to execute when the mouse pointer enters the element. + /// A function to execute when the mouse pointer leaves the element. + /// + /// + }, + 'html': function() { + /// + /// Set the HTML contents of each element in the set of matched elements. + /// A string of HTML to set as the content of each matched element. + /// + /// + /// + /// Set the HTML contents of each element in the set of matched elements. + /// A function returning the HTML content to set. Receives the index position of the element in the set and the old HTML value as arguments. jQuery empties the element before calling the function; use the oldhtml argument to reference the previous content. Within the function, this refers to the current element in the set. + /// + /// + }, + 'id': function() { + /// + /// Selects a single element with the given id attribute. + /// An ID to search for, specified via the id attribute of an element. + /// + }, + 'image': function() { + /// Selects all elements of type image. + }, + 'index': function() { + /// + /// Search for a given element from among the matched elements. + /// A selector representing a jQuery collection in which to look for an element. + /// + /// + /// + /// Search for a given element from among the matched elements. + /// The DOM element or first element within the jQuery object to look for. + /// + /// + }, + 'init': function() { + /// + /// Accepts a string containing a CSS selector which is then used to match a set of elements. + /// A string containing a selector expression + /// A DOM Element, Document, or jQuery to use as context + /// + /// + /// + /// Accepts a string containing a CSS selector which is then used to match a set of elements. + /// A DOM element to wrap in a jQuery object. + /// + /// + /// + /// Accepts a string containing a CSS selector which is then used to match a set of elements. + /// An array containing a set of DOM elements to wrap in a jQuery object. + /// + /// + /// + /// Accepts a string containing a CSS selector which is then used to match a set of elements. + /// A plain object to wrap in a jQuery object. + /// + /// + /// + /// Accepts a string containing a CSS selector which is then used to match a set of elements. + /// An existing jQuery object to clone. + /// + /// + }, + 'innerHeight': function() { + /// Get the current computed height for the first element in the set of matched elements, including padding but not border. + /// + }, + 'innerWidth': function() { + /// Get the current computed width for the first element in the set of matched elements, including padding but not border. + /// + }, + 'input': function() { + /// Selects all input, textarea, select and button elements. + }, + 'insertAfter': function() { + /// + /// Insert every element in the set of matched elements after the target. + /// A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted after the element(s) specified by this parameter. + /// + /// + }, + 'insertBefore': function() { + /// + /// Insert every element in the set of matched elements before the target. + /// A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted before the element(s) specified by this parameter. + /// + /// + }, + 'is': function() { + /// + /// Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments. + /// A string containing a selector expression to match elements against. + /// + /// + /// + /// Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments. + /// A function used as a test for the set of elements. It accepts one argument, index, which is the element's index in the jQuery collection.Within the function, this refers to the current DOM element. + /// + /// + /// + /// Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments. + /// An existing jQuery object to match the current set of elements against. + /// + /// + /// + /// Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments. + /// An element to match the current set of elements against. + /// + /// + }, + 'jquery': function() { + /// A string containing the jQuery version number. + /// + }, + 'keydown': function() { + /// + /// Bind an event handler to the "keydown" JavaScript event, or trigger that event on an element. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to the "keydown" JavaScript event, or trigger that event on an element. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'keypress': function() { + /// + /// Bind an event handler to the "keypress" JavaScript event, or trigger that event on an element. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to the "keypress" JavaScript event, or trigger that event on an element. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'keyup': function() { + /// + /// Bind an event handler to the "keyup" JavaScript event, or trigger that event on an element. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to the "keyup" JavaScript event, or trigger that event on an element. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'lang': function() { + /// + /// Selects all elements of the specified language. + /// A language code. + /// + }, + 'last': function() { + /// Selects the last matched element. + }, + 'last-child': function() { + /// Selects all elements that are the last child of their parent. + }, + 'last-of-type': function() { + /// Selects all elements that are the last among siblings of the same element name. + }, + 'length': function() { + /// The number of elements in the jQuery object. + /// + }, + 'live': function() { + /// + /// Attach an event handler for all elements which match the current selector, now and in the future. + /// A string containing a JavaScript event type, such as "click" or "keydown." As of jQuery 1.4 the string can contain multiple, space-separated event types or custom event names. + /// A function to execute at the time the event is triggered. + /// + /// + /// + /// Attach an event handler for all elements which match the current selector, now and in the future. + /// A string containing a JavaScript event type, such as "click" or "keydown." As of jQuery 1.4 the string can contain multiple, space-separated event types or custom event names. + /// An object containing data that will be passed to the event handler. + /// A function to execute at the time the event is triggered. + /// + /// + /// + /// Attach an event handler for all elements which match the current selector, now and in the future. + /// A plain object of one or more JavaScript event types and functions to execute for them. + /// + /// + }, + 'load': function() { + /// + /// Bind an event handler to the "load" JavaScript event. + /// A function to execute when the event is triggered. + /// + /// + /// + /// Bind an event handler to the "load" JavaScript event. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'lt': function() { + /// + /// Select all elements at an index less than index within the matched set. + /// Zero-based index. + /// + /// + /// Select all elements at an index less than index within the matched set. + /// Zero-based index, counting backwards from the last element. + /// + }, + 'map': function() { + /// + /// Pass each element in the current matched set through a function, producing a new jQuery object containing the return values. + /// A function object that will be invoked for each element in the current set. + /// + /// + }, + 'mousedown': function() { + /// + /// Bind an event handler to the "mousedown" JavaScript event, or trigger that event on an element. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to the "mousedown" JavaScript event, or trigger that event on an element. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'mouseenter': function() { + /// + /// Bind an event handler to be fired when the mouse enters an element, or trigger that handler on an element. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to be fired when the mouse enters an element, or trigger that handler on an element. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'mouseleave': function() { + /// + /// Bind an event handler to be fired when the mouse leaves an element, or trigger that handler on an element. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to be fired when the mouse leaves an element, or trigger that handler on an element. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'mousemove': function() { + /// + /// Bind an event handler to the "mousemove" JavaScript event, or trigger that event on an element. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to the "mousemove" JavaScript event, or trigger that event on an element. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'mouseout': function() { + /// + /// Bind an event handler to the "mouseout" JavaScript event, or trigger that event on an element. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to the "mouseout" JavaScript event, or trigger that event on an element. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'mouseover': function() { + /// + /// Bind an event handler to the "mouseover" JavaScript event, or trigger that event on an element. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to the "mouseover" JavaScript event, or trigger that event on an element. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'mouseup': function() { + /// + /// Bind an event handler to the "mouseup" JavaScript event, or trigger that event on an element. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to the "mouseup" JavaScript event, or trigger that event on an element. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'multiple': function() { + /// + /// Selects the combined results of all the specified selectors. + /// Any valid selector. + /// Another valid selector. + /// As many more valid selectors as you like. + /// + }, + 'next': function() { + /// + /// Get the immediately following sibling of each element in the set of matched elements. If a selector is provided, it retrieves the next sibling only if it matches that selector. + /// A string containing a selector expression to match elements against. + /// + /// + }, + 'next adjacent': function() { + /// + /// Selects all next elements matching "next" that are immediately preceded by a sibling "prev". + /// Any valid selector. + /// A selector to match the element that is next to the first selector. + /// + }, + 'next siblings': function() { + /// + /// Selects all sibling elements that follow after the "prev" element, have the same parent, and match the filtering "siblings" selector. + /// Any valid selector. + /// A selector to filter elements that are the following siblings of the first selector. + /// + }, + 'nextAll': function() { + /// + /// Get all following siblings of each element in the set of matched elements, optionally filtered by a selector. + /// A string containing a selector expression to match elements against. + /// + /// + }, + 'nextUntil': function() { + /// + /// Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed. + /// A string containing a selector expression to indicate where to stop matching following sibling elements. + /// A string containing a selector expression to match elements against. + /// + /// + /// + /// Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed. + /// A DOM node or jQuery object indicating where to stop matching following sibling elements. + /// A string containing a selector expression to match elements against. + /// + /// + }, + 'not': function() { + /// + /// Remove elements from the set of matched elements. + /// A string containing a selector expression to match elements against. + /// + /// + /// + /// Remove elements from the set of matched elements. + /// One or more DOM elements to remove from the matched set. + /// + /// + /// + /// Remove elements from the set of matched elements. + /// A function used as a test for each element in the set. this is the current DOM element. + /// + /// + /// + /// Remove elements from the set of matched elements. + /// An existing jQuery object to match the current set of elements against. + /// + /// + }, + 'nth-child': function() { + /// + /// Selects all elements that are the nth-child of their parent. + /// The index of each child to match, starting with 1, the string even or odd, or an equation ( eg. :nth-child(even), :nth-child(4n) ) + /// + }, + 'nth-last-child': function() { + /// + /// Selects all elements that are the nth-child of their parent, counting from the last element to the first. + /// The index of each child to match, starting with the last one (1), the string even or odd, or an equation ( eg. :nth-last-child(even), :nth-last-child(4n) ) + /// + }, + 'nth-last-of-type': function() { + /// + /// Selects all elements that are the nth-child of their parent, counting from the last element to the first. + /// The index of each child to match, starting with the last one (1), the string even or odd, or an equation ( eg. :nth-last-of-type(even), :nth-last-of-type(4n) ) + /// + }, + 'nth-of-type': function() { + /// + /// Selects all elements that are the nth child of their parent in relation to siblings with the same element name. + /// The index of each child to match, starting with 1, the string even or odd, or an equation ( eg. :nth-of-type(even), :nth-of-type(4n) ) + /// + }, + 'odd': function() { + /// Selects odd elements, zero-indexed. See also even. + }, + 'off': function() { + /// + /// Remove an event handler. + /// One or more space-separated event types and optional namespaces, or just namespaces, such as "click", "keydown.myPlugin", or ".myPlugin". + /// A selector which should match the one originally passed to .on() when attaching event handlers. + /// A handler function previously attached for the event(s), or the special value false. + /// + /// + /// + /// Remove an event handler. + /// An object where the string keys represent one or more space-separated event types and optional namespaces, and the values represent handler functions previously attached for the event(s). + /// A selector which should match the one originally passed to .on() when attaching event handlers. + /// + /// + }, + 'offset': function() { + /// + /// Set the current coordinates of every element in the set of matched elements, relative to the document. + /// An object containing the properties top and left, which are integers indicating the new top and left coordinates for the elements. + /// + /// + /// + /// Set the current coordinates of every element in the set of matched elements, relative to the document. + /// A function to return the coordinates to set. Receives the index of the element in the collection as the first argument and the current coordinates as the second argument. The function should return an object with the new top and left properties. + /// + /// + }, + 'offsetParent': function() { + /// Get the closest ancestor element that is positioned. + /// + }, + 'on': function() { + /// + /// Attach an event handler function for one or more events to the selected elements. + /// One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin". + /// A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element. + /// Data to be passed to the handler in event.data when an event is triggered. + /// A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false. + /// + /// + /// + /// Attach an event handler function for one or more events to the selected elements. + /// An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s). + /// A selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element. + /// Data to be passed to the handler in event.data when an event occurs. + /// + /// + }, + 'one': function() { + /// + /// Attach a handler to an event for the elements. The handler is executed at most once per element. + /// A string containing one or more JavaScript event types, such as "click" or "submit," or custom event names. + /// An object containing data that will be passed to the event handler. + /// A function to execute at the time the event is triggered. + /// + /// + /// + /// Attach a handler to an event for the elements. The handler is executed at most once per element. + /// One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin". + /// A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element. + /// Data to be passed to the handler in event.data when an event is triggered. + /// A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false. + /// + /// + /// + /// Attach a handler to an event for the elements. The handler is executed at most once per element. + /// An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s). + /// A selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element. + /// Data to be passed to the handler in event.data when an event occurs. + /// + /// + }, + 'only-child': function() { + /// Selects all elements that are the only child of their parent. + }, + 'only-of-type': function() { + /// Selects all elements that have no siblings with the same element name. + }, + 'outerHeight': function() { + /// + /// Get the current computed height for the first element in the set of matched elements, including padding, border, and optionally margin. Returns an integer (without "px") representation of the value or null if called on an empty set of elements. + /// A Boolean indicating whether to include the element's margin in the calculation. + /// + /// + }, + 'outerWidth': function() { + /// + /// Get the current computed width for the first element in the set of matched elements, including padding and border. + /// A Boolean indicating whether to include the element's margin in the calculation. + /// + /// + }, + 'parent': function() { + /// + /// Get the parent of each element in the current set of matched elements, optionally filtered by a selector. + /// A string containing a selector expression to match elements against. + /// + /// + }, + 'parents': function() { + /// + /// Get the ancestors of each element in the current set of matched elements, optionally filtered by a selector. + /// A string containing a selector expression to match elements against. + /// + /// + }, + 'parentsUntil': function() { + /// + /// Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object. + /// A string containing a selector expression to indicate where to stop matching ancestor elements. + /// A string containing a selector expression to match elements against. + /// + /// + /// + /// Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object. + /// A DOM node or jQuery object indicating where to stop matching ancestor elements. + /// A string containing a selector expression to match elements against. + /// + /// + }, + 'password': function() { + /// Selects all elements of type password. + }, + 'position': function() { + /// Get the current coordinates of the first element in the set of matched elements, relative to the offset parent. + /// + }, + 'prepend': function() { + /// + /// Insert content, specified by the parameter, to the beginning of each element in the set of matched elements. + /// DOM element, array of elements, HTML string, or jQuery object to insert at the beginning of each element in the set of matched elements. + /// One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the beginning of each element in the set of matched elements. + /// + /// + /// + /// Insert content, specified by the parameter, to the beginning of each element in the set of matched elements. + /// A function that returns an HTML string, DOM element(s), or jQuery object to insert at the beginning of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set. + /// + /// + }, + 'prependTo': function() { + /// + /// Insert every element in the set of matched elements to the beginning of the target. + /// A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted at the beginning of the element(s) specified by this parameter. + /// + /// + }, + 'prev': function() { + /// + /// Get the immediately preceding sibling of each element in the set of matched elements, optionally filtered by a selector. + /// A string containing a selector expression to match elements against. + /// + /// + }, + 'prevAll': function() { + /// + /// Get all preceding siblings of each element in the set of matched elements, optionally filtered by a selector. + /// A string containing a selector expression to match elements against. + /// + /// + }, + 'prevUntil': function() { + /// + /// Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object. + /// A string containing a selector expression to indicate where to stop matching preceding sibling elements. + /// A string containing a selector expression to match elements against. + /// + /// + /// + /// Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object. + /// A DOM node or jQuery object indicating where to stop matching preceding sibling elements. + /// A string containing a selector expression to match elements against. + /// + /// + }, + 'promise': function() { + /// + /// Return a Promise object to observe when all actions of a certain type bound to the collection, queued or not, have finished. + /// The type of queue that needs to be observed. + /// Object onto which the promise methods have to be attached + /// + /// + }, + 'prop': function() { + /// + /// Set one or more properties for the set of matched elements. + /// The name of the property to set. + /// A value to set for the property. + /// + /// + /// + /// Set one or more properties for the set of matched elements. + /// An object of property-value pairs to set. + /// + /// + /// + /// Set one or more properties for the set of matched elements. + /// The name of the property to set. + /// A function returning the value to set. Receives the index position of the element in the set and the old property value as arguments. Within the function, the keyword this refers to the current element. + /// + /// + }, + 'pushStack': function() { + /// + /// Add a collection of DOM elements onto the jQuery stack. + /// An array of elements to push onto the stack and make into a new jQuery object. + /// + /// + /// + /// Add a collection of DOM elements onto the jQuery stack. + /// An array of elements to push onto the stack and make into a new jQuery object. + /// The name of a jQuery method that generated the array of elements. + /// The arguments that were passed in to the jQuery method (for serialization). + /// + /// + }, + 'queue': function() { + /// + /// Manipulate the queue of functions to be executed, once for each matched element. + /// A string containing the name of the queue. Defaults to fx, the standard effects queue. + /// An array of functions to replace the current queue contents. + /// + /// + /// + /// Manipulate the queue of functions to be executed, once for each matched element. + /// A string containing the name of the queue. Defaults to fx, the standard effects queue. + /// The new function to add to the queue, with a function to call that will dequeue the next item. + /// + /// + }, + 'radio': function() { + /// Selects all elements of type radio. + }, + 'ready': function() { + /// + /// Specify a function to execute when the DOM is fully loaded. + /// A function to execute after the DOM is ready. + /// + /// + }, + 'remove': function() { + /// + /// Remove the set of matched elements from the DOM. + /// A selector expression that filters the set of matched elements to be removed. + /// + /// + }, + 'removeAttr': function() { + /// + /// Remove an attribute from each element in the set of matched elements. + /// An attribute to remove; as of version 1.7, it can be a space-separated list of attributes. + /// + /// + }, + 'removeClass': function() { + /// + /// Remove a single class, multiple classes, or all classes from each element in the set of matched elements. + /// One or more space-separated classes to be removed from the class attribute of each matched element. + /// + /// + /// + /// Remove a single class, multiple classes, or all classes from each element in the set of matched elements. + /// A function returning one or more space-separated class names to be removed. Receives the index position of the element in the set and the old class value as arguments. + /// + /// + }, + 'removeData': function() { + /// + /// Remove a previously-stored piece of data. + /// A string naming the piece of data to delete. + /// + /// + /// + /// Remove a previously-stored piece of data. + /// An array or space-separated string naming the pieces of data to delete. + /// + /// + }, + 'removeProp': function() { + /// + /// Remove a property for the set of matched elements. + /// The name of the property to remove. + /// + /// + }, + 'replaceAll': function() { + /// + /// Replace each target element with the set of matched elements. + /// A selector string, jQuery object, or DOM element reference indicating which element(s) to replace. + /// + /// + }, + 'replaceWith': function() { + /// + /// Replace each element in the set of matched elements with the provided new content and return the set of elements that was removed. + /// The content to insert. May be an HTML string, DOM element, or jQuery object. + /// + /// + /// + /// Replace each element in the set of matched elements with the provided new content and return the set of elements that was removed. + /// A function that returns content with which to replace the set of matched elements. + /// + /// + }, + 'reset': function() { + /// Selects all elements of type reset. + }, + 'resize': function() { + /// + /// Bind an event handler to the "resize" JavaScript event, or trigger that event on an element. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to the "resize" JavaScript event, or trigger that event on an element. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'root': function() { + /// Selects the element that is the root of the document. + }, + 'scroll': function() { + /// + /// Bind an event handler to the "scroll" JavaScript event, or trigger that event on an element. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to the "scroll" JavaScript event, or trigger that event on an element. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'scrollLeft': function() { + /// + /// Set the current horizontal position of the scroll bar for each of the set of matched elements. + /// An integer indicating the new position to set the scroll bar to. + /// + /// + }, + 'scrollTop': function() { + /// + /// Set the current vertical position of the scroll bar for each of the set of matched elements. + /// An integer indicating the new position to set the scroll bar to. + /// + /// + }, + 'select': function() { + /// + /// Bind an event handler to the "select" JavaScript event, or trigger that event on an element. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to the "select" JavaScript event, or trigger that event on an element. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'selected': function() { + /// Selects all elements that are selected. + }, + 'selector': function() { + /// A selector representing selector passed to jQuery(), if any, when creating the original set. + /// + }, + 'serialize': function() { + /// Encode a set of form elements as a string for submission. + /// + }, + 'serializeArray': function() { + /// Encode a set of form elements as an array of names and values. + /// + }, + 'show': function() { + /// + /// Display the matched elements. + /// A string or number determining how long the animation will run. + /// A function to call once the animation is complete. + /// + /// + /// + /// Display the matched elements. + /// A map of additional options to pass to the method. + /// + /// + /// + /// Display the matched elements. + /// A string or number determining how long the animation will run. + /// A string indicating which easing function to use for the transition. + /// A function to call once the animation is complete. + /// + /// + }, + 'siblings': function() { + /// + /// Get the siblings of each element in the set of matched elements, optionally filtered by a selector. + /// A string containing a selector expression to match elements against. + /// + /// + }, + 'size': function() { + /// Return the number of elements in the jQuery object. + /// + }, + 'slice': function() { + /// + /// Reduce the set of matched elements to a subset specified by a range of indices. + /// An integer indicating the 0-based position at which the elements begin to be selected. If negative, it indicates an offset from the end of the set. + /// An integer indicating the 0-based position at which the elements stop being selected. If negative, it indicates an offset from the end of the set. If omitted, the range continues until the end of the set. + /// + /// + }, + 'slideDown': function() { + /// + /// Display the matched elements with a sliding motion. + /// A string or number determining how long the animation will run. + /// A function to call once the animation is complete. + /// + /// + /// + /// Display the matched elements with a sliding motion. + /// A map of additional options to pass to the method. + /// + /// + /// + /// Display the matched elements with a sliding motion. + /// A string or number determining how long the animation will run. + /// A string indicating which easing function to use for the transition. + /// A function to call once the animation is complete. + /// + /// + }, + 'slideToggle': function() { + /// + /// Display or hide the matched elements with a sliding motion. + /// A string or number determining how long the animation will run. + /// A function to call once the animation is complete. + /// + /// + /// + /// Display or hide the matched elements with a sliding motion. + /// A map of additional options to pass to the method. + /// + /// + /// + /// Display or hide the matched elements with a sliding motion. + /// A string or number determining how long the animation will run. + /// A string indicating which easing function to use for the transition. + /// A function to call once the animation is complete. + /// + /// + }, + 'slideUp': function() { + /// + /// Hide the matched elements with a sliding motion. + /// A string or number determining how long the animation will run. + /// A function to call once the animation is complete. + /// + /// + /// + /// Hide the matched elements with a sliding motion. + /// A map of additional options to pass to the method. + /// + /// + /// + /// Hide the matched elements with a sliding motion. + /// A string or number determining how long the animation will run. + /// A string indicating which easing function to use for the transition. + /// A function to call once the animation is complete. + /// + /// + }, + 'stop': function() { + /// + /// Stop the currently-running animation on the matched elements. + /// A Boolean indicating whether to remove queued animation as well. Defaults to false. + /// A Boolean indicating whether to complete the current animation immediately. Defaults to false. + /// + /// + /// + /// Stop the currently-running animation on the matched elements. + /// The name of the queue in which to stop animations. + /// A Boolean indicating whether to remove queued animation as well. Defaults to false. + /// A Boolean indicating whether to complete the current animation immediately. Defaults to false. + /// + /// + }, + 'submit': function() { + /// + /// Bind an event handler to the "submit" JavaScript event, or trigger that event on an element. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to the "submit" JavaScript event, or trigger that event on an element. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'target': function() { + /// Selects the target element indicated by the fragment identifier of the document's URI. + }, + 'text': function() { + /// + /// Set the content of each element in the set of matched elements to the specified text. + /// A string of text to set as the content of each matched element. + /// + /// + /// + /// Set the content of each element in the set of matched elements to the specified text. + /// A function returning the text content to set. Receives the index position of the element in the set and the old text value as arguments. + /// + /// + }, + 'toArray': function() { + /// Retrieve all the DOM elements contained in the jQuery set, as an array. + /// + }, + 'toggle': function() { + /// + /// Display or hide the matched elements. + /// A string or number determining how long the animation will run. + /// A function to call once the animation is complete. + /// + /// + /// + /// Display or hide the matched elements. + /// A map of additional options to pass to the method. + /// + /// + /// + /// Display or hide the matched elements. + /// A string or number determining how long the animation will run. + /// A string indicating which easing function to use for the transition. + /// A function to call once the animation is complete. + /// + /// + /// + /// Display or hide the matched elements. + /// A Boolean indicating whether to show or hide the elements. + /// + /// + }, + 'toggleClass': function() { + /// + /// Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument. + /// One or more class names (separated by spaces) to be toggled for each element in the matched set. + /// + /// + /// + /// Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument. + /// One or more class names (separated by spaces) to be toggled for each element in the matched set. + /// A Boolean (not just truthy/falsy) value to determine whether the class should be added or removed. + /// + /// + /// + /// Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument. + /// A boolean value to determine whether the class should be added or removed. + /// + /// + /// + /// Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument. + /// A function that returns class names to be toggled in the class attribute of each element in the matched set. Receives the index position of the element in the set, the old class value, and the switch as arguments. + /// A boolean value to determine whether the class should be added or removed. + /// + /// + }, + 'trigger': function() { + /// + /// Execute all handlers and behaviors attached to the matched elements for the given event type. + /// A string containing a JavaScript event type, such as click or submit. + /// Additional parameters to pass along to the event handler. + /// + /// + /// + /// Execute all handlers and behaviors attached to the matched elements for the given event type. + /// A jQuery.Event object. + /// Additional parameters to pass along to the event handler. + /// + /// + }, + 'triggerHandler': function() { + /// + /// Execute all handlers attached to an element for an event. + /// A string containing a JavaScript event type, such as click or submit. + /// An array of additional parameters to pass along to the event handler. + /// + /// + }, + 'unbind': function() { + /// + /// Remove a previously-attached event handler from the elements. + /// A string containing a JavaScript event type, such as click or submit. + /// The function that is to be no longer executed. + /// + /// + /// + /// Remove a previously-attached event handler from the elements. + /// A string containing a JavaScript event type, such as click or submit. + /// Unbinds the corresponding 'return false' function that was bound using .bind( eventType, false ). + /// + /// + /// + /// Remove a previously-attached event handler from the elements. + /// A JavaScript event object as passed to an event handler. + /// + /// + }, + 'undelegate': function() { + /// + /// Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements. + /// A selector which will be used to filter the event results. + /// A string containing a JavaScript event type, such as "click" or "keydown" + /// + /// + /// + /// Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements. + /// A selector which will be used to filter the event results. + /// A string containing a JavaScript event type, such as "click" or "keydown" + /// A function to execute at the time the event is triggered. + /// + /// + /// + /// Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements. + /// A selector which will be used to filter the event results. + /// An object of one or more event types and previously bound functions to unbind from them. + /// + /// + /// + /// Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements. + /// A string containing a namespace to unbind all events from. + /// + /// + }, + 'unload': function() { + /// + /// Bind an event handler to the "unload" JavaScript event. + /// A function to execute when the event is triggered. + /// + /// + /// + /// Bind an event handler to the "unload" JavaScript event. + /// A plain object of data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'unwrap': function() { + /// Remove the parents of the set of matched elements from the DOM, leaving the matched elements in their place. + /// + }, + 'val': function() { + /// + /// Set the value of each element in the set of matched elements. + /// A string of text or an array of strings corresponding to the value of each matched element to set as selected/checked. + /// + /// + /// + /// Set the value of each element in the set of matched elements. + /// A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old value as arguments. + /// + /// + }, + 'visible': function() { + /// Selects all elements that are visible. + }, + 'width': function() { + /// + /// Set the CSS width of each element in the set of matched elements. + /// An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string). + /// + /// + /// + /// Set the CSS width of each element in the set of matched elements. + /// A function returning the width to set. Receives the index position of the element in the set and the old width as arguments. Within the function, this refers to the current element in the set. + /// + /// + }, + 'wrap': function() { + /// + /// Wrap an HTML structure around each element in the set of matched elements. + /// A selector, element, HTML string, or jQuery object specifying the structure to wrap around the matched elements. + /// + /// + /// + /// Wrap an HTML structure around each element in the set of matched elements. + /// A callback function returning the HTML content or jQuery object to wrap around the matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set. + /// + /// + }, + 'wrapAll': function() { + /// + /// Wrap an HTML structure around all elements in the set of matched elements. + /// A selector, element, HTML string, or jQuery object specifying the structure to wrap around the matched elements. + /// + /// + }, + 'wrapInner': function() { + /// + /// Wrap an HTML structure around the content of each element in the set of matched elements. + /// An HTML snippet, selector expression, jQuery object, or DOM element specifying the structure to wrap around the content of the matched elements. + /// + /// + /// + /// Wrap an HTML structure around the content of each element in the set of matched elements. + /// A callback function which generates a structure to wrap around the content of the matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set. + /// + /// + }, +}); + +intellisense.annotate(window, { + '$': function() { + /// + /// Accepts a string containing a CSS selector which is then used to match a set of elements. + /// A string containing a selector expression + /// A DOM Element, Document, or jQuery to use as context + /// + /// + /// + /// Accepts a string containing a CSS selector which is then used to match a set of elements. + /// A DOM element to wrap in a jQuery object. + /// + /// + /// + /// Accepts a string containing a CSS selector which is then used to match a set of elements. + /// An array containing a set of DOM elements to wrap in a jQuery object. + /// + /// + /// + /// Accepts a string containing a CSS selector which is then used to match a set of elements. + /// A plain object to wrap in a jQuery object. + /// + /// + /// + /// Accepts a string containing a CSS selector which is then used to match a set of elements. + /// An existing jQuery object to clone. + /// + /// + }, +}); + diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Scripts/jquery-3.1.1.js b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Scripts/jquery-3.1.1.js new file mode 100644 index 000000000..072e30811 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Scripts/jquery-3.1.1.js @@ -0,0 +1,10220 @@ +/*! + * jQuery JavaScript Library v3.1.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2016-09-22T22:30Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var document = window.document; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var concat = arr.concat; + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + + + + function DOMEval( code, doc ) { + doc = doc || document; + + var script = doc.createElement( "script" ); + + script.text = code; + doc.head.appendChild( script ).parentNode.removeChild( script ); + } +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.1.1", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android <=4.0 only + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // 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 ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = jQuery.isArray( copy ) ) ) ) { + + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray( src ) ? src : []; + + } else { + clone = src && jQuery.isPlainObject( src ) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isFunction: function( obj ) { + return jQuery.type( obj ) === "function"; + }, + + isArray: Array.isArray, + + isWindow: function( obj ) { + return obj != null && obj === obj.window; + }, + + isNumeric: function( obj ) { + + // As of jQuery 3.0, isNumeric is limited to + // strings and numbers (primitives or objects) + // that can be coerced to finite numbers (gh-2662) + var type = jQuery.type( obj ); + return ( type === "number" || type === "string" ) && + + // parseFloat NaNs numeric-cast false positives ("") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + !isNaN( obj - parseFloat( obj ) ); + }, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + + /* eslint-disable no-unused-vars */ + // See https://github.com/eslint/eslint/issues/6125 + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + DOMEval( code ); + }, + + // Convert dashed to camelCase; used by the css and data modules + // Support: IE <=9 - 11, Edge 12 - 13 + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android <=4.0 only + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: Date.now, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.3 + * https://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2016-08-08 + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + disabledAncestor = addCombinator( + function( elem ) { + return elem.disabled === true && ("form" in elem || "label" in elem); + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !compilerCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + + if ( nodeType !== 1 ) { + newContext = context; + newSelector = selector; + + // qSA looks outside Element context, which is not what we want + // Thanks to Andrew Dupont for this workaround technique + // Support: IE <=8 + // Exclude object elements + } else if ( context.nodeName.toLowerCase() !== "object" ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[i] = "#" + nid + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement("fieldset"); + + try { + return !!fn( el ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + disabledAncestor( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9-11, Edge + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + if ( preferredDoc !== document && + (subWindow = document.defaultView) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( el ) { + el.className = "i"; + return !el.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( el ) { + el.appendChild( document.createComment("") ); + return !el.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + }); + + // ID filter and find + if ( support.getById ) { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( (elem = elems[i++]) ) { + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( el ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push("~="); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement("input"); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll(":enabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll(":disabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( el ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === document ? -1 : + b === document ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + !compilerCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch (e) {} + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return (sel + "").replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[6] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + // Use previously-cached element index if available + if ( useCache ) { + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + // Don't keep the element (issue #299) + input[0] = null; + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( (oldCache = uniqueCache[ key ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context === document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + if ( !context && elem.ownerDocument !== document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context || document, xml) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert(function( el ) { + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement("fieldset") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert(function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert(function( el ) { + return el.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +return Sizzle; + +})( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +var risSimple = /^.[^:#\[\.,]*$/; + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Simple selector that can be filtered directly, removing non-Elements + if ( risSimple.test( qualifier ) ) { + return jQuery.filter( qualifier, elements, not ); + } + + // Complex selector, compare the two sets, removing non-Elements + qualifier = jQuery.filter( qualifier, elements ); + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1; + } ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + return elem.contentDocument || jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( jQuery.isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && jQuery.isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && jQuery.isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + resolve.call( undefined, value ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.call( undefined, value ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( jQuery.isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + jQuery.isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + jQuery.isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + jQuery.isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the master Deferred + master = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + master.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( master.state() === "pending" || + jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return master.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + } + + return master.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ jQuery.camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ jQuery.camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( jQuery.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( jQuery.camelCase ); + } else { + key = jQuery.camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + jQuery.contains( elem.ownerDocument, elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + +var swap = function( elem, options, callback, args ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.apply( elem, args || [] ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, + scale = 1, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + do { + + // If previous iteration zeroed out, double until we get *something*. + // Use string for doubling so we don't accidentally see scale as unchanged below + scale = scale || ".5"; + + // Adjust and apply + initialInUnit = initialInUnit / scale; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Update scale, tolerating zero or NaN from tween.cur() + // Break the loop if scale is unchanged or perfect, or if we've just had enough. + } while ( + scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations + ); + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i ); + +var rscriptType = ( /^$|\/(?:java|ecma)script/i ); + + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // Support: IE <=9 only + option: [ 1, "" ], + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
          " ], + col: [ 2, "", "
          " ], + tr: [ 2, "", "
          " ], + td: [ 3, "", "
          " ], + + _default: [ 0, "", "" ] +}; + +// Support: IE <=9 only +wrapMap.optgroup = wrapMap.option; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && jQuery.nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, contains, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; +} )(); +var documentElement = document.documentElement; + + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 only +// See #13393 for more info +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = {}; + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + // Make a writable jQuery.Event from the native event object + var event = jQuery.event.fix( nativeEvent ); + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or 2) have namespace(s) + // a subset or equal to those in the bound event (both can have no namespace). + if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: jQuery.isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + this.focus(); + return false; + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return jQuery.nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } +}, jQuery.event.addProp ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + /* eslint-disable max-len */ + + // See https://github.com/eslint/eslint/issues/3229 + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, + + /* eslint-enable */ + + // Support: IE <=10 - 11, Edge 12 - 13 + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +function manipulationTarget( elem, content ) { + if ( jQuery.nodeName( elem, "table" ) && + jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return elem.getElementsByTagName( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + + if ( match ) { + elem.type = match[ 1 ]; + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.access( src ); + pdataCur = dataPriv.set( dest, pdataOld ); + events = pdataOld.events; + + if ( events ) { + delete pdataCur.handle; + pdataCur.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( isFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html.replace( rxhtmlTag, "<$1>" ); + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = jQuery.contains( elem.ownerDocument, elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rmargin = ( /^margin/ ); + +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + div.style.cssText = + "box-sizing:border-box;" + + "position:relative;display:block;" + + "margin:auto;border:1px;padding:1px;" + + "top:1%;width:50%"; + div.innerHTML = ""; + documentElement.appendChild( container ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = divStyle.marginLeft === "2px"; + boxSizingReliableVal = divStyle.width === "4px"; + + // Support: Android 4.0 - 4.3 only + // Some styles come back with percentage values, even though they shouldn't + div.style.marginRight = "50%"; + pixelMarginRightVal = divStyle.marginRight === "4px"; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" + + "padding:0;margin-top:1px;position:absolute"; + container.appendChild( div ); + + jQuery.extend( support, { + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelMarginRight: function() { + computeStyleTests(); + return pixelMarginRightVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + style = elem.style; + + computed = computed || getStyles( elem ); + + // Support: IE <=9 only + // getPropertyValue is only needed for .css('filter') (#12537) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }, + + cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style; + +// Return a css property mapped to a potentially vendor prefixed property +function vendorPropName( name ) { + + // Shortcut for names that are not vendor prefixed + if ( name in emptyStyle ) { + return name; + } + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +function setPositiveNumber( elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { + var i, + val = 0; + + // If we already have the right measurement, avoid augmentation + if ( extra === ( isBorderBox ? "border" : "content" ) ) { + i = 4; + + // Otherwise initialize for horizontal or vertical properties + } else { + i = name === "width" ? 1 : 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin, so add it if we want it + if ( extra === "margin" ) { + val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); + } + + if ( isBorderBox ) { + + // border-box includes padding, so remove it if we want content + if ( extra === "content" ) { + val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // At this point, extra isn't border nor margin, so remove border + if ( extra !== "margin" ) { + val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } else { + + // At this point, extra isn't content, so add padding + val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // At this point, extra isn't content nor padding, so add border + if ( extra !== "padding" ) { + val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + return val; +} + +function getWidthOrHeight( elem, name, extra ) { + + // Start with offset property, which is equivalent to the border-box value + var val, + valueIsBorderBox = true, + styles = getStyles( elem ), + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + if ( elem.getClientRects().length ) { + val = elem.getBoundingClientRect()[ name ]; + } + + // Some non-html elements return undefined for offsetWidth, so check for null/undefined + // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 + // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 + if ( val <= 0 || val == null ) { + + // Fall back to computed then uncomputed css if necessary + val = curCSS( elem, name, styles ); + if ( val < 0 || val == null ) { + val = elem.style[ name ]; + } + + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test( val ) ) { + return val; + } + + // Check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = isBorderBox && + ( support.boxSizingReliable() || val === elem.style[ name ] ); + + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; + } + + // Use the active box-sizing model to add/subtract irrelevant styles + return ( val + + augmentWidthOrHeight( + elem, + name, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: { + "float": "cssFloat" + }, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = jQuery.camelCase( name ), + style = elem.style; + + name = jQuery.cssProps[ origName ] || + ( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName ); + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + if ( type === "number" ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + style[ name ] = value; + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = jQuery.camelCase( name ); + + // Make sure that we're working with the right name + name = jQuery.cssProps[ origName ] || + ( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName ); + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( i, name ) { + jQuery.cssHooks[ name ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, name, extra ); + } ) : + getWidthOrHeight( elem, name, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = extra && getStyles( elem ), + subtract = extra && augmentWidthOrHeight( + elem, + name, + extra, + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + styles + ); + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ name ] = value; + value = jQuery.css( elem, name ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( !rmargin.test( prefix ) ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( jQuery.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && + ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || + jQuery.cssHooks[ tween.prop ] ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, timerId, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function raf() { + if ( timerId ) { + window.requestAnimationFrame( raf ); + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = jQuery.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 13 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = jQuery.camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( jQuery.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + if ( percent < 1 && length ) { + return remaining; + } else { + deferred.resolveWith( elem, [ animation ] ); + return false; + } + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( jQuery.isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + jQuery.proxy( result.stop, result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( jQuery.isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + // attach callbacks from options + return animation.progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( jQuery.isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + jQuery.isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing + }; + + // Go to the end state if fx are off or if document is hidden + if ( jQuery.fx.off || document.hidden ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( jQuery.isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue && type !== false ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = jQuery.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Checks the timer has not already been removed + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + if ( timer() ) { + jQuery.fx.start(); + } else { + jQuery.timers.pop(); + } +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( !timerId ) { + timerId = window.requestAnimationFrame ? + window.requestAnimationFrame( raf ) : + window.setInterval( jQuery.fx.tick, jQuery.fx.interval ); + } +}; + +jQuery.fx.stop = function() { + if ( window.cancelAnimationFrame ) { + window.cancelAnimationFrame( timerId ); + } else { + window.clearInterval( timerId ); + } + + timerId = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + jQuery.nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( jQuery.isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( typeof value === "string" && value ) { + classes = value.match( rnothtmlwhite ) || []; + + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( jQuery.isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + if ( typeof value === "string" && value ) { + classes = value.match( rnothtmlwhite ) || []; + + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value; + + if ( typeof stateVal === "boolean" && type === "string" ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( jQuery.isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( type === "string" ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = value.match( rnothtmlwhite ) || []; + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, isFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup contextmenu" ).split( " " ), + function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; +} ); + +jQuery.fn.extend( { + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +} ); + + + + +support.focusin = "onfocusin" in window; + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = jQuery.now(); + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( jQuery.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && jQuery.type( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = jQuery.isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + // If an array was passed in, assume that it is an array of form elements. + if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( jQuery.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( jQuery.isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ]; + } + } + match = responseHeaders[ key.toLowerCase() ]; + } + return match == null ? null : match; + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 13 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available, append data to url + if ( s.data ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( jQuery.isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + + +jQuery._evalUrl = function( url ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + "throws": true + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( jQuery.isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var isFunction = jQuery.isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain requests + if ( s.crossDomain ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Child/DeleteChild.cshtml b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Child/DeleteChild.cshtml new file mode 100644 index 000000000..038a95132 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Child/DeleteChild.cshtml @@ -0,0 +1,20 @@ +@model Suteki.TardisBank.Web.Mvc.Controllers.ViewModels.DeleteChildConfirmViewModel + +@{ + Layout = "~/Views/Shared/SiteLayout.cshtml"; +} + +

          Are you sure you want to delete @Model.ChildName's account?

          +
          + @{ Html.BeginForm(); } + @Html.HiddenFor(x => x.ChildId) + @Html.HiddenFor(x => x.ChildName) + + + + + +
           
          + @{ Html.EndForm(); } +
          + diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Child/Index.cshtml b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Child/Index.cshtml new file mode 100644 index 000000000..a2e2495d3 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Child/Index.cshtml @@ -0,0 +1,27 @@ +@model Suteki.TardisBank.Domain.Parent + +@{ + Layout = "~/Views/Shared/SiteLayout.cshtml"; +} + +

          Your Childrens' Accounts

          + +@if(Model.Children.Count == 0){ +

          Please click on the button below to create accounts for your children.

          +} else { +

          This is list of your childrens' accounts. To view the account, click 'View Account'.

          +} +
          + +@foreach(var child in Model.Children) { + + + + + +} +
          @child.Name@Html.ActionLink("View Account", "ParentView", "Account", new { id = child.Id }, null)@Html.ActionLink("Delete", "DeleteChild", "Child", new { id = child.Id }, new { @class = "warning" })
          +
          +

          + @Html.ActionLink("Add A Child", "AddChild", "User") +

          diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Home/About.cshtml b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Home/About.cshtml new file mode 100644 index 000000000..2e6d9adfd --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Home/About.cshtml @@ -0,0 +1,28 @@ + + +@{ + Layout = "~/Views/Shared/SiteLayout.cshtml"; +} + +
          +

          Why is it called Tardis Bank anyway?

          + A photo of Mike and Leo

           

          +

          My son Leo (age 8) and I, that's us above, have a bit of a pocket money problem. He’s supposed to get £2.00 every week, paid on Sunday. He has a Tardis shaped piggy bank, into which he’s supposed to put the £2.00. When he wants to buy something, he’s supposed to get the cash and take it to the shop.

          +

          The thing is, I’m a complete scatter brain and often forget to pay the weekly £2.00. Leo is also very spontaneous in his purchasing habits and will often decide he wants to buy something, but has forgotten to bring along his pocket money. In that situation, I buy whatever it is he wants and tell him that I will deduct it from next week’s pocket money…. which I then promptly forget.

          +

          We frequently have long discussions about how many weeks have gone past since his last payment and what I’ve bought on his behalf in the meantime. We loose all track of his real pocket money balance.

          +

          I really do think that regular pocket money is an important financial education for Leo. He needs to learn how to manage money, but without any proper accounting it just ends up being an arbitrary and irregular hand-over of cash and he learns nothing, except how to beg effectively.

          +

          These days most people don’t keep their money under the mattress. I use my bank’s online banking web site to manage my finances. What Leo needs is something similar for his pocket money.

          +

          I'm a freelance software engineer, if you're feeling particularly geeky you can check out my blog, Code Rant. Once I started to think about our requirements I realised that it would be pretty straightforward to put together a simple web application. I also realised that there was no reason why I couldn't make it available to anyone who wanted something similar.

          +

          So Tardis Bank was born. I built it purely to 'scratch an itch', it's completely non-commercial. You can get the source code by following the link on the right. I hope you find it useful. Drop me a line using the email address on the right if you have any comments or suggestions.

          +

          Happy Banking!

          +

          Mike Hadlow 1st November 2010

          +
          + +
          +

          Contact Us

          +

          info@tardisbank.com

          +

          Open Source

          +

          Tardis Bank is Open Source software. It's licenced under the terms of the Apache 2 open source licence.

          +

          Get The Source

          +
          + diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Home/Index.cshtml b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Home/Index.cshtml new file mode 100644 index 000000000..fbcb6d09d --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Home/Index.cshtml @@ -0,0 +1,27 @@ +@{ + Layout = "~/Views/Shared/SiteLayout.cshtml"; +} + +
          +

          Kids

          +

          Piggy banks full of loose change are sooo 20th century.

          +

          With Tardis Bank you get your own on-line pocket money bank account. You'll be able to keep track of how much your parents owe you, and how much you can spend.

          +

          Since no real money changes hands, there's no age limit.

          +

          It's really easy. Just get your Mum or Dad to register by clicking the button on this page. Within minutes you'll have your bank account set up.

          +
          +
          +

          Parents

          +

          You are the bank.

          +

          Tardis bank is a virtual pocket money bank account. It's entirely free, we don't see a penny of your money, it's simply a way for your kids to learn financial literacy. It also makes it much easier for you to keep track of how much pocket money they should be getting.

          +

          After you register, you create accounts for your children and setup a pocket money payment schedule. You can also make additional payments into their account at any time, which is great for Christmas and birthdays. When your child wants to withdraw cash, they click a withdraw button and you will get a message, either by email or by checking your messages on the website, then you hand the money directly to them.

          +

          Register now, it only takes a minute and all we need is your email address (which we won't give out to anyone else).

          +

          Parents Sign Up

          +
          +
          +

          Already Signed Up?

          +

          Login Here

          + +
          +
          + + diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Home/Legal.cshtml b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Home/Legal.cshtml new file mode 100644 index 000000000..5a1be9147 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Home/Legal.cshtml @@ -0,0 +1,15 @@ + + +@{ + Layout = "~/Views/Shared/SiteLayout.cshtml"; +} + +
          +

          Legal Stuff

          +

          Tardis Bank is for educational use only.

          +

          While we do our best to make sure it works properly, We make no guarantees about either the integrity or the safety of your data.

          +

          We a not liable for any loss or inconvenience you may experience as a consequence of using this site.

          +
          + +
           
          + diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Menu/ChildMenu.cshtml b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Menu/ChildMenu.cshtml new file mode 100644 index 000000000..baf0d500a --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Menu/ChildMenu.cshtml @@ -0,0 +1,9 @@ +@model Suteki.TardisBank.Domain.Child + + + diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Menu/GuestMenu.cshtml b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Menu/GuestMenu.cshtml new file mode 100644 index 000000000..e9986fae4 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Menu/GuestMenu.cshtml @@ -0,0 +1,6 @@ + diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Menu/ParentMenu.cshtml b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Menu/ParentMenu.cshtml new file mode 100644 index 000000000..b0188a996 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Menu/ParentMenu.cshtml @@ -0,0 +1,11 @@ +@model Suteki.TardisBank.Domain.Parent + + + diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/News/Edit.cshtml b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/News/Edit.cshtml new file mode 100644 index 000000000..fd6cb1e07 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/News/Edit.cshtml @@ -0,0 +1,50 @@ +@using Suteki.TardisBank.Web.Mvc +@model dynamic + +@{ + ViewBag.Title = "Edit news"; +} +

          Edit news

          + +
          + Add Annoouncement +
          Title
          +
          + +
          + +
          Contents
          +
          + +
          +
          + + + +
          +

          + +

          Published announcements

          +
            +
          + + +@section scripts +{ + + + @Scripts.Render(BundleConfig.NewsScript) + + + + +} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/News/Index.cshtml b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/News/Index.cshtml new file mode 100644 index 000000000..9ad961e66 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/News/Index.cshtml @@ -0,0 +1,50 @@ +@using Suteki.TardisBank.Web.Mvc +@model Suteki.TardisBank.Web.Mvc.Models.News.NewsListModel + +@{ + ViewBag.Title = "News"; + Layout = "~/Views/Shared/SiteLayout.cshtml"; +} + +@if (Model.IsParent) +{ +

          + @Html.ActionLink("Click here to edit news list", "Edit", "News") +

          +} + +

          Latest news

          + +
          +
            +
            + +
            + +
            +
            + +@section scripts +{ + + + + + @Scripts.Render(BundleConfig.NewsScript) + + +} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Openid/Index.cshtml b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Openid/Index.cshtml new file mode 100644 index 000000000..4e725cd9b --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Openid/Index.cshtml @@ -0,0 +1,12 @@ +@{ + Layout = "~/Views/Shared/SiteLayout.cshtml"; +} + +

            Members Only Area

            +

            Congratulations,
            + You have completed the OpenID login process. +

            +

            + Logout +

            + diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Openid/Login.cshtml b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Openid/Login.cshtml new file mode 100644 index 000000000..9994ded86 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Openid/Login.cshtml @@ -0,0 +1,15 @@ + @if (ViewData["Message"] != null) { +
            + @Html.Encode(ViewData["Message"].ToString()) +
            + } +

            You must log in before entering the Members Area:

            +
            + + + +
            + + \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Password/ChildConfirm.cshtml b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Password/ChildConfirm.cshtml new file mode 100644 index 000000000..a99ffb7fb --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Password/ChildConfirm.cshtml @@ -0,0 +1,10 @@ + + +@{ + Layout = "~/Views/Shared/SiteLayout.cshtml"; +} + +

            Password Reset Sucessfully

            +

            We have sent your new password to your parent. Ask them to check their email.

            + + diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Password/Forgot.cshtml b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Password/Forgot.cshtml new file mode 100644 index 000000000..bfcf8b5e2 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Password/Forgot.cshtml @@ -0,0 +1,25 @@ +@model Suteki.TardisBank.Web.Mvc.Controllers.ViewModels.ForgottenPasswordViewModel + +@{ + Layout = "~/Views/Shared/SiteLayout.cshtml"; +} + +

            Reset Your Password

            +

            If you are a child, enter your user name below. If you are a parent, enter your email address.

            +

            @Html.ValidationSummary()

            +
            + @{ Html.BeginForm(); } + + + + + + + + + +
            @Html.TextBoxFor(x => x.UserName)
             
            + @{ Html.EndForm(); } +
            + + diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Password/ParentConfirm.cshtml b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Password/ParentConfirm.cshtml new file mode 100644 index 000000000..a5a093d18 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Password/ParentConfirm.cshtml @@ -0,0 +1,9 @@ + + +@{ + Layout = "~/Views/Shared/SiteLayout.cshtml"; +} + +

            Password Reset Sucessfully

            +

            We have sent your new password to your email address.

            + diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Schedule/AddSchedule.cshtml b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Schedule/AddSchedule.cshtml new file mode 100644 index 000000000..afe283a81 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Schedule/AddSchedule.cshtml @@ -0,0 +1,50 @@ +@using Suteki.TardisBank.Web.Mvc.Utilities +@model Suteki.TardisBank.Web.Mvc.Controllers.ViewModels.AddScheduleViewModel + +@{ + Layout = "~/Views/Shared/SiteLayout.cshtml"; +} +

            Add Schedule

            +

            This is where you set up you child's regular pocket money payments.

            +

            @Html.ValidationSummary()

            +
            + @{ Html.BeginForm(); } + + @Html.HiddenFor(x => x.ChildId) + + + + + + + + + + + + + + + + + + + + + + +
            @Html.TextBoxFor(x => x.Description)
            @Html.TextBoxFor(x => x.Amount)
            + +
            @Html.TextBox("StartDate", Model.StartDate.ToShortDateString())
             
            + @{ Html.EndForm(); } +
            + + + + diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Schedule/AddScheduleConfirm.cshtml b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Schedule/AddScheduleConfirm.cshtml new file mode 100644 index 000000000..80a691314 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Schedule/AddScheduleConfirm.cshtml @@ -0,0 +1,11 @@ +@model Suteki.TardisBank.Web.Mvc.Controllers.ViewModels.AddScheduleViewModel + +@{ + Layout = "~/Views/Shared/SiteLayout.cshtml"; +} + +

            Schedule Created

            +

            Your child's regular pocket money schedule has been created.

            +

            The first payment of @Model.Amount.ToString("c") will be paid on @Model.StartDate.ToLongDateString(), and then every @Model.Interval after that.

            +

            @Html.ActionLink("Return to your child's account", "ParentView", "Account", new { id = Model.ChildId }, null)

            + diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Shared/SiteLayout.cshtml b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Shared/SiteLayout.cshtml new file mode 100644 index 000000000..746d2bc40 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Shared/SiteLayout.cshtml @@ -0,0 +1,97 @@ + +@{ + Layout = ""; +} + + + + + Tardis Bank + + @Styles.Render("~/Content/css") + @Scripts.Render("~/bundles/modernizr") + + + + + + + + + + + + @Html.Action("Index", "Analytics") + + + + +
            + + +
            + +
            +
            + +
            + +
            + + @RenderBody() + + +
            +
            +
            +
            + + +
            +
            + + @Scripts.Render("~/bundles/jquery") + @Scripts.Render("~/bundles/jqueryui") + @Scripts.Render("~/bundles/bootstrap") + + + + + + + @RenderSection("scripts", required: false) + + diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Shared/_Layout.cshtml b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Shared/_Layout.cshtml new file mode 100644 index 000000000..11af28554 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Shared/_Layout.cshtml @@ -0,0 +1,47 @@ +@using Suteki.TardisBank.Web.Mvc.Controllers + + + + + + @Styles.Render("~/Content/css") + + + @Scripts.Render("~/bundles/modernizr") + @ViewBag.Title + + + +
            +
            +
            +
            +

            + +

            +

            Suteki.TardisBank Pages

            +
              +
            • @Html.ActionLink("Home", "Index", "Home")
            • +
            +
            + + +
            + @RenderBody() +
            + +
            +
            + +
            + + + +
            + +
            + @Scripts.Render("~/bundles/jquery") + @Scripts.Render("~/bundles/jqueryui") + + + diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/User/ActivateConfirm.cshtml b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/User/ActivateConfirm.cshtml new file mode 100644 index 000000000..1a98f5fa2 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/User/ActivateConfirm.cshtml @@ -0,0 +1,12 @@ + + +@{ + Layout = "~/Views/Shared/SiteLayout.cshtml"; +} + +

            Congratulations!

            +

            You are now registered at Tardis Bank. Please Log in.

            +

            @Html.ActionLink("Login", "Login")

            + + + diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/User/ActivationFailed.cshtml b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/User/ActivationFailed.cshtml new file mode 100644 index 000000000..96926f6ee --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/User/ActivationFailed.cshtml @@ -0,0 +1,13 @@ + + +@{ + Layout = "~/Views/Shared/SiteLayout.cshtml"; +} + +

            Activation Failed

            +

            We are very sorry, but we didn't recognise your activation key.

            +

            Please try again, making sure you copy the URL exactly into your browser.

            +

            it still doesn't work, contact us at +info@tardisbank.com

            + + diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/User/AddChild.cshtml b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/User/AddChild.cshtml new file mode 100644 index 000000000..b939a49e8 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/User/AddChild.cshtml @@ -0,0 +1,37 @@ +@model Suteki.TardisBank.Web.Mvc.Controllers.ViewModels.RegistrationViewModel + +@{ + Layout = "~/Views/Shared/SiteLayout.cshtml"; +} +

            Add a Child Account

            +

            Complete the form below to create an account for your child.

            +

            @Html.ValidationSummary()

            +
            + @{ Html.BeginForm(); } + + + + + + + + + + + + + + + + + + + + + +
            @Html.TextBoxFor(x => x.Email)This needs to be unique, for example 'tomrobinson04'
            @Html.TextBoxFor(x => x.Name)This is just for display, for example 'Tom'
            @Html.PasswordFor(x => x.Password)So that your child can sign in.
              
            + @{ Html.EndForm(); } +
            + + + diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/User/Confirm.cshtml b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/User/Confirm.cshtml new file mode 100644 index 000000000..358486d04 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/User/Confirm.cshtml @@ -0,0 +1,8 @@ +@{ + Layout = "~/Views/Shared/SiteLayout.cshtml"; +} + +

            Now check your email (or just login if no smtp server is configured)

            +

            You should have recieved an email from us with a link to an activation page. Just click on the link to activate your account

            +

            If you don't get the email, please contact us at info@tardisbank.com

            + diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/User/DisplayGreeting.cshtml b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/User/DisplayGreeting.cshtml new file mode 100644 index 000000000..c53c47762 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/User/DisplayGreeting.cshtml @@ -0,0 +1,8 @@ +@model Suteki.TardisBank.Web.Mvc.Controllers.ViewModels.UserViewModel + +@Model.UserName  +@if(Model.IsLoggedIn) { + @Html.ActionLink("Logout", "Logout") +} else { + @Html.ActionLink("Login", "Login") +} diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/User/Login.cshtml b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/User/Login.cshtml new file mode 100644 index 000000000..b79a2d7b4 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/User/Login.cshtml @@ -0,0 +1,30 @@ +@model Suteki.TardisBank.Web.Mvc.Controllers.ViewModels.LoginViewModel + +@{ + Layout = "~/Views/Shared/SiteLayout.cshtml"; +} +

            Log In

            +

            @Html.ValidationSummary()

            +
            + @{ Html.BeginForm(); } + + + + + + + + + + + + + +
            @Html.TextBoxFor(x => x.Name)
            @Html.PasswordFor(x => x.Password)
             
            + @{ Html.EndForm(); } +
            +
            +

            Forgotten your password? Just click this link...

            + @Html.ActionLink("I've forgotten my password", "Forgot", "Password") +
            + diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/User/Messages.cshtml b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/User/Messages.cshtml new file mode 100644 index 000000000..c05c9234f --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/User/Messages.cshtml @@ -0,0 +1,28 @@ +@model Suteki.TardisBank.Domain.User + +@{ + Layout = "~/Views/Shared/SiteLayout.cshtml"; +} + +

            Your Messages

            +@if(Model.Messages.Count == 0) { +

            You have no messages

            +} else { + + +@foreach(var message in Model.Messages.Reverse()) { + + + + @if(message.HasBeenRead) { + + } else { + + } + +} + +
            @message.Date.ToShortDateString()@message.TextDone@Html.ActionLink("OK", "ReadMessage", new { id = @message.Id })
            +

            (Note: we only keep the last @Suteki.TardisBank.Domain.User.MaxMessages messages)

            +} + diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/User/Register.cshtml b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/User/Register.cshtml new file mode 100644 index 000000000..0eeeb35f5 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/User/Register.cshtml @@ -0,0 +1,38 @@ +@model Suteki.TardisBank.Web.Mvc.Controllers.ViewModels.RegistrationViewModel + +@{ + Layout = "~/Views/Shared/SiteLayout.cshtml"; +} +

            Parent Sign Up

            +

            Parents, please sign up for Tardis Bank by completing this form. We will then send you an email with a link to activate your account.

            +

            After you have signed up, you can create accounts for all your kids.

            +

            Kids, you have to ask a parent to sign up and create an account for you. You can't sign up here by yourself. After all, you need someone to actually give you the money.

            +

            @Html.ValidationSummary()

            +
            + @{ Html.BeginForm(); } + + + + + + + + + + + + + + + + + + + + + +
            @Html.TextBoxFor(x => x.Email)This must be a valid email address so that we can send you the activation link
            @Html.TextBoxFor(x => x.Name)This is just for display, 'Mum' or 'Dad' is fine.
            @Html.PasswordFor(x => x.Password) 
              
            + @{ Html.EndForm(); } +
            + + diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Web.config b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Web.config new file mode 100644 index 000000000..e6c4c783e --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/Web.config @@ -0,0 +1,38 @@ + + + + + +
            +
            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/_ViewStart.cshtml b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/_ViewStart.cshtml new file mode 100644 index 000000000..bf880d908 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Views/_ViewStart.cshtml @@ -0,0 +1,3 @@ +@{ + Layout = "~/Views/Shared/SiteLayout.cshtml"; +} diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Web.Debug.config b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Web.Debug.config new file mode 100644 index 000000000..c1bf1db28 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Web.Debug.config @@ -0,0 +1,30 @@ + + + + + + + + + + diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Web.Release.config b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Web.Release.config new file mode 100644 index 000000000..0b2a31c8a --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Web.Release.config @@ -0,0 +1,32 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Web.config b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Web.config new file mode 100644 index 000000000..e5def91ed --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/Web.config @@ -0,0 +1,156 @@ + + + + +
            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/WebApi/ValidateModel.cs b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/WebApi/ValidateModel.cs new file mode 100644 index 000000000..8b7e05edb --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/WebApi/ValidateModel.cs @@ -0,0 +1,25 @@ +namespace Suteki.TardisBank.Web.Mvc.WebApi +{ + using System.Net; + using System.Net.Http; + using System.Web.Http.Controllers; + using System.Web.Http.Filters; + + /// + /// Automatically validate model. + /// + /// + /// Taken from article http://www.asp.net/web-api/overview/formats-and-model-binding/model-validation-in-aspnet-web-api + /// + public sealed class ValidateModelAttribute : ActionFilterAttribute + { + public override void OnActionExecuting(HttpActionContext actionContext) + { + if (actionContext.ModelState.IsValid == false) + { + actionContext.Response = actionContext.Request.CreateErrorResponse( + HttpStatusCode.BadRequest, actionContext.ModelState); + } + } + } +} \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/favicon.ico b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/favicon.ico new file mode 100644 index 000000000..d589247e2 Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/favicon.ico differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/favicon.png b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/favicon.png new file mode 100644 index 000000000..2edd21e9a Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/favicon.png differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/fonts/FontAwesome.otf b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/fonts/FontAwesome.otf new file mode 100644 index 000000000..401ec0f36 Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/fonts/FontAwesome.otf differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/fonts/fontawesome-webfont.eot b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/fonts/fontawesome-webfont.eot new file mode 100644 index 000000000..e9f60ca95 Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/fonts/fontawesome-webfont.eot differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/fonts/fontawesome-webfont.svg b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/fonts/fontawesome-webfont.svg new file mode 100644 index 000000000..855c845e5 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/fonts/fontawesome-webfont.ttf b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/fonts/fontawesome-webfont.ttf new file mode 100644 index 000000000..35acda2fa Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/fonts/fontawesome-webfont.ttf differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/fonts/fontawesome-webfont.woff b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/fonts/fontawesome-webfont.woff new file mode 100644 index 000000000..400014a4b Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/fonts/fontawesome-webfont.woff differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/fonts/fontawesome-webfont.woff2 b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/fonts/fontawesome-webfont.woff2 new file mode 100644 index 000000000..4d13fc604 Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/fonts/fontawesome-webfont.woff2 differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/fonts/glyphicons-halflings-regular.eot b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 000000000..b93a4953f Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/fonts/glyphicons-halflings-regular.eot differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/fonts/glyphicons-halflings-regular.svg b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/fonts/glyphicons-halflings-regular.svg new file mode 100644 index 000000000..94fb5490a --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/fonts/glyphicons-halflings-regular.svg @@ -0,0 +1,288 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/fonts/glyphicons-halflings-regular.ttf b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 000000000..1413fc609 Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/fonts/glyphicons-halflings-regular.ttf differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/fonts/glyphicons-halflings-regular.woff b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 000000000..9e612858f Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/fonts/glyphicons-halflings-regular.woff differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/fonts/glyphicons-halflings-regular.woff2 b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/fonts/glyphicons-halflings-regular.woff2 new file mode 100644 index 000000000..64539b54c Binary files /dev/null and b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/fonts/glyphicons-halflings-regular.woff2 differ diff --git a/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/packages.config b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/packages.config new file mode 100644 index 000000000..6c0ee3ad4 --- /dev/null +++ b/Samples/old/TardisBank/Solutions/Suteki.TardisBank.Web.Mvc/packages.config @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SharpArch.AutoLoad.DotSettings b/SharpArch.AutoLoad.DotSettings new file mode 100644 index 000000000..b574c5866 --- /dev/null +++ b/SharpArch.AutoLoad.DotSettings @@ -0,0 +1,446 @@ + + True + True + True + False + False + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + Inherit + True + // Use the following placeholders: +// $EXPR$ -- source expression +// $NAME$ -- source name (string literal or 'nameof' expression) +// $MESSAGE$ -- string literal in the form of "$NAME$ != null" +FluentAssertions.AssertionExtensions.Should($EXPR$).NotBeNull() + + CSharp90 + True + True + LibLog.cs + SOLUTION + True + True + + DO_NOT_SHOW + DO_NOT_SHOW + DO_NOT_SHOW + DO_NOT_SHOW + True + True + True + (Tests$|Facts$) + + True + + <?xml version="1.0" encoding="utf-16"?><Profile name="SharpArch"><CSReorderTypeMembers>True</CSReorderTypeMembers><JsInsertSemicolon>True</JsInsertSemicolon><FormatAttributeQuoteDescriptor>True</FormatAttributeQuoteDescriptor><CorrectVariableKindsDescriptor>True</CorrectVariableKindsDescriptor><VariablesToInnerScopesDescriptor>True</VariablesToInnerScopesDescriptor><StringToTemplatesDescriptor>True</StringToTemplatesDescriptor><JsReformatCode>True</JsReformatCode><JsFormatDocComments>True</JsFormatDocComments><RemoveRedundantQualifiersTs>True</RemoveRedundantQualifiersTs><OptimizeImportsTs>True</OptimizeImportsTs><OptimizeReferenceCommentsTs>True</OptimizeReferenceCommentsTs><PublicModifierStyleTs>True</PublicModifierStyleTs><ExplicitAnyTs>True</ExplicitAnyTs><TypeAnnotationStyleTs>True</TypeAnnotationStyleTs><RelativePathStyleTs>True</RelativePathStyleTs><HtmlReformatCode>True</HtmlReformatCode><AspOptimizeRegisterDirectives>True</AspOptimizeRegisterDirectives><XMLReformatCode>True</XMLReformatCode><CSCodeStyleAttributes ArrangeTypeAccessModifier="True" ArrangeTypeMemberAccessModifier="True" SortModifiers="True" RemoveRedundantParentheses="True" AddMissingParentheses="False" ArrangeBraces="False" ArrangeAttributes="True" ArrangeArgumentsStyle="True" ArrangeCodeBodyStyle="True" ArrangeVarStyle="False" /><RemoveCodeRedundanciesVB>True</RemoveCodeRedundanciesVB><CssAlphabetizeProperties>True</CssAlphabetizeProperties><VBOptimizeImports>True</VBOptimizeImports><VBShortenReferences>True</VBShortenReferences><RemoveCodeRedundancies>True</RemoveCodeRedundancies><CSUseAutoProperty>True</CSUseAutoProperty><CSMakeFieldReadonly>True</CSMakeFieldReadonly><CSMakeAutoPropertyGetOnly>True</CSMakeAutoPropertyGetOnly><CSArrangeQualifiers>True</CSArrangeQualifiers><CSFixBuiltinTypeReferences>True</CSFixBuiltinTypeReferences><CssReformatCode>True</CssReformatCode><VBReformatCode>True</VBReformatCode><VBFormatDocComments>True</VBFormatDocComments><CSOptimizeUsings><OptimizeUsings>True</OptimizeUsings><EmbraceInRegion>False</EmbraceInRegion><RegionName></RegionName></CSOptimizeUsings><CSShortenReferences>True</CSShortenReferences><CSReformatCode>True</CSReformatCode><CSharpFormatDocComments>True</CSharpFormatDocComments></Profile> + SharpArch + True + RequiredForMultiline + RequiredForMultilineStatement + RequiredForMultiline + RequiredForMultiline + RequiredForMultiline + Implicit + Implicit + + + + ExpressionBody + ExpressionBody + False + True + NEXT_LINE + 1 + 2 + NEXT_LINE + 1 + True + True + True + False + False + True + NEXT_LINE + 1 + 1 + False + True + NEVER + False + NEVER + True + True + 150 + CHOP_ALWAYS + 1 + 2 + 100 + 2 + False + 140 + <?xml version="1.0" encoding="utf-16"?> +<Patterns xmlns="urn:schemas-jetbrains-com:member-reordering-patterns"> + <TypePattern DisplayName="Non-reorderable types"> + <TypePattern.Match> + <Or> + <And> + <Kind Is="Interface" /> + <Or> + <HasAttribute Name="System.Runtime.InteropServices.InterfaceTypeAttribute" /> + <HasAttribute Name="System.Runtime.InteropServices.ComImport" /> + </Or> + </And> + <Kind Is="Struct" /> + <HasAttribute Name="JetBrains.Annotations.NoReorderAttribute" /> + <HasAttribute Name="JetBrains.Annotations.NoReorder" /> + </Or> + </TypePattern.Match> + </TypePattern> + <TypePattern DisplayName="xUnit.net Test Classes"> + <TypePattern.Match> + <And> + <Kind Is="Class" /> + <HasMember> + <And> + <Kind Is="Method" /> + <HasAttribute Name="Xunit.FactAttribute" Inherited="True" /> + </And> + </HasMember> + </And> + </TypePattern.Match> + <Entry DisplayName="Static Fields and Constants"> + <Entry.Match> + <Or> + <Kind Is="Constant" /> + <And> + <Kind Is="Field" /> + <Static /> + </And> + </Or> + </Entry.Match> + <Entry.SortBy> + <Kind Order="Constant Field" /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="Fields"> + <Entry.Match> + <And> + <Kind Is="Field" /> + <Not> + <Static /> + </Not> + </And> + </Entry.Match> + <Entry.SortBy> + <Readonly /> + <ImplementsInterface /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="Public Delegates" Priority="100"> + <Entry.Match> + <And> + <Access Is="Public" /> + <Kind Is="Delegate" /> + </And> + </Entry.Match> + <Entry.SortBy> + <Name /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="Public Enums" Priority="100"> + <Entry.Match> + <And> + <Access Is="Public" /> + <Kind Is="Enum" /> + </And> + </Entry.Match> + <Entry.SortBy> + <Name /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="Setup/Teardown Methods"> + <Entry.Match> + <Or> + <Kind Is="Constructor" /> + <And> + <Kind Is="Method" /> + <ImplementsInterface Name="System.IDisposable" /> + </And> + </Or> + </Entry.Match> + <Entry.SortBy> + <Kind Order="Constructor" /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="All other members" /> + <Entry DisplayName="Test Methods" Priority="100"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <HasAttribute Name="Xunit.FactAttribute" /> + </And> + </Entry.Match> + <Entry.SortBy> + <Name /> + </Entry.SortBy> + </Entry> + </TypePattern> + <TypePattern DisplayName="NUnit Test Fixtures"> + <TypePattern.Match> + <And> + <Kind Is="Class" /> + <HasAttribute Name="NUnit.Framework.TestFixtureAttribute" Inherited="True" /> + </And> + </TypePattern.Match> + <Entry DisplayName="Setup/Teardown Methods"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <Or> + <HasAttribute Name="NUnit.Framework.SetUpAttribute" Inherited="True" /> + <HasAttribute Name="NUnit.Framework.TearDownAttribute" Inherited="True" /> + <HasAttribute Name="NUnit.Framework.FixtureSetUpAttribute" Inherited="True" /> + <HasAttribute Name="NUnit.Framework.FixtureTearDownAttribute" Inherited="True" /> + </Or> + </And> + </Entry.Match> + </Entry> + <Entry DisplayName="All other members" /> + <Entry DisplayName="Test Methods" Priority="100"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <HasAttribute Name="NUnit.Framework.TestAttribute" /> + </And> + </Entry.Match> + <Entry.SortBy> + <Name /> + </Entry.SortBy> + </Entry> + </TypePattern> + <TypePattern DisplayName="Default Pattern"> + <Entry DisplayName="Static Fields and Constants"> + <Entry.Match> + <Or> + <Kind Is="Constant" /> + <And> + <Kind Is="Field" /> + <Static /> + </And> + </Or> + </Entry.Match> + <Entry.SortBy> + <Kind Order="Constant Field" /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="Fields"> + <Entry.Match> + <And> + <Kind Is="Field" /> + <Not> + <Static /> + </Not> + </And> + </Entry.Match> + <Entry.SortBy> + <Readonly /> + <Name /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="Public Delegates" Priority="100"> + <Entry.Match> + <And> + <Access Is="Public" /> + <Kind Is="Delegate" /> + </And> + </Entry.Match> + <Entry.SortBy> + <Name /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="Public Enums" Priority="100"> + <Entry.Match> + <And> + <Access Is="Public" /> + <Kind Is="Enum" /> + </And> + </Entry.Match> + <Entry.SortBy> + <Name /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="Properties, Indexers"> + <Entry.Match> + <Or> + <Kind Is="Property" /> + <Kind Is="Indexer" /> + </Or> + </Entry.Match> + </Entry> + <Entry DisplayName="Constructors"> + <Entry.Match> + <Kind Is="Constructor" /> + </Entry.Match> + <Entry.SortBy> + <Static /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="Interface Implementations" Priority="100"> + <Entry.Match> + <And> + <Kind Is="Member" /> + <ImplementsInterface /> + </And> + </Entry.Match> + <Entry.SortBy> + <ImplementsInterface Immediate="True" /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="All other members" /> + <Entry DisplayName="Nested Types"> + <Entry.Match> + <Kind Is="Type" /> + </Entry.Match> + </Entry> + </TypePattern> +</Patterns> + True + True + False + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="_" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="I" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="T" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + OUTLINE + True + + 3 + Never + True + + + + + DO_NOTHING + LIVE_MONITOR + DO_NOTHING + DO_NOTHING + DO_NOTHING + DO_NOTHING + DO_NOTHING + LIVE_MONITOR + LIVE_MONITOR + DO_NOTHING + DO_NOTHING + LIVE_MONITOR + DO_NOTHING + DO_NOTHING + + True + + True + + True + + True + + True + + True + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + IfRequired + False + ALWAYS + True + True + True + True + True + + True + + True + True + True + True + + + \ No newline at end of file diff --git a/SharpArch.build b/SharpArch.build deleted file mode 100644 index 45006b857..000000000 --- a/SharpArch.build +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/SharpArchitecture.code-workspace b/SharpArchitecture.code-workspace new file mode 100644 index 000000000..362d7c25b --- /dev/null +++ b/SharpArchitecture.code-workspace @@ -0,0 +1,7 @@ +{ + "folders": [ + { + "path": "." + } + ] +} \ No newline at end of file diff --git a/Src/Common/NHibernate/TestDatabaseSetup.cs b/Src/Common/NHibernate/TestDatabaseSetup.cs new file mode 100644 index 000000000..6c758c7e0 --- /dev/null +++ b/Src/Common/NHibernate/TestDatabaseSetup.cs @@ -0,0 +1,248 @@ +namespace SharpArch.Testing.NHibernate +{ + using System; + using System.Data.Common; + using System.Diagnostics; + using System.IO; + using System.Linq; + using System.Reflection; + using FluentNHibernate.Automapping; + using global::NHibernate; + using global::NHibernate.Cfg; + using global::NHibernate.Tool.hbm2ddl; + using Infrastructure; + using JetBrains.Annotations; + using SharpArch.NHibernate; + using SharpArch.NHibernate.FluentNHibernate; + + + /// + /// Performs NHibernate and database initialization. + /// + /// + /// By default it looks for file + /// to load configuration, if you prefer fluent configuration, override method. + /// + [PublicAPI] + public class TestDatabaseSetup : IDisposable + { + readonly string _basePath; + readonly Assembly[] _mappingAssemblies; + readonly Type _persistenceModelGenerator; + Configuration? _configuration; + ISessionFactory? _sessionFactory; + + /// + /// Allows to apply custom configuration to new ISession. + /// + /// + /// Callback is executed by default implementation of from . + /// + public Action? SessionConfigurator { get; set; } + + /// + /// Allows to apply custom configuration to new ISession. + /// + /// + /// Callback is executed by default implementation of from . + /// + public Action? StatelessSessionConfigurator { get; set; } + + /// + /// Initializes a new instance of the class. + /// + /// Base bath to use when looking for mapping assemblies and default NHibernate configuration file. + /// Persistence model generator, type. Must implement . + /// + /// List of assemblies containing NHibernate mapping files and persistence model generator. + /// + /// + /// , or is + /// null. + /// + /// + /// does not implement . + /// + public TestDatabaseSetup( + string basePath, + Type persistenceModelGenerator, + Assembly[] mappingAssemblies) + { + _basePath = basePath ?? throw new ArgumentNullException(nameof(basePath)); + _persistenceModelGenerator = persistenceModelGenerator ?? throw new ArgumentNullException(nameof(persistenceModelGenerator)); + if (!typeof(IAutoPersistenceModelGenerator).IsAssignableFrom(persistenceModelGenerator)) + throw new ArgumentException($"Type {persistenceModelGenerator.FullName} must implement {nameof(IAutoPersistenceModelGenerator)}."); + + if (mappingAssemblies == null) throw new ArgumentNullException(nameof(mappingAssemblies)); + _mappingAssemblies = mappingAssemblies.Distinct().ToArray(); + } + + /// + /// Initializes a new instance of the class. + /// + /// Persistence model generator, type. Must implement . + /// + /// Assembly to use to determine configuration folder. Typically is it assembly containing + /// tests. + /// + /// + /// + /// or is + /// null. + /// + /// + /// does not implement . + /// + public TestDatabaseSetup( + Assembly baseAssembly, + Type persistenceModelGenerator, + Assembly[] mappingAssemblies) + : this(CodeBaseLocator.GetAssemblyCodeBasePath(baseAssembly), + persistenceModelGenerator, + mappingAssemblies) + { + } + + /// + /// Disposes SessionFactory. + /// + public virtual void Dispose() + { + Shutdown(_sessionFactory); + _sessionFactory = null; + _configuration = null; + GC.SuppressFinalize(this); + } + + /// + /// Returns NHibernate . + /// Configuration instance is cached, all subsequent calls will return the same instance. + /// + public Configuration GetConfiguration() + { + if (_configuration != null) return _configuration; + + var autoPersistenceModel = GenerateAutoPersistenceModel(); + + var builder = new NHibernateSessionFactoryBuilder() + .AddMappingAssemblies(_mappingAssemblies) + .UseAutoPersistenceModel(autoPersistenceModel); + + var defaultConfigFilePath = + Path.Combine(_basePath, NHibernateSessionFactoryBuilder.DefaultNHibernateConfigFileName); + if (File.Exists(defaultConfigFilePath)) + { + Debug.WriteLine( + $"Found default configuration file {NHibernateSessionFactoryBuilder.DefaultNHibernateConfigFileName} in output folder. Loading configuration from '{defaultConfigFilePath}'."); + builder.UseConfigFile(defaultConfigFilePath); + } + + Customize(builder); + _configuration = builder.BuildConfiguration(); + return _configuration; + } + + /// + /// Generates auto-persistence model. + /// + /// + /// + /// + /// Unable to instantiate AutoPersistenceModelGenerator. + public AutoPersistenceModel GenerateAutoPersistenceModel() + { + var generator = (IAutoPersistenceModelGenerator)Activator.CreateInstance(_persistenceModelGenerator)!; + return generator.Generate(); + } + + /// + /// Override this method to customize NHibernate configuration. + /// + /// + /// + /// + protected virtual void Customize(NHibernateSessionFactoryBuilder builder) + { + } + + /// + /// Configures before usage. + /// + /// Session builder. + protected virtual ISessionBuilder ConfigureSession(ISessionBuilder sessionBuilder) + { + if (sessionBuilder == null) throw new ArgumentNullException(nameof(sessionBuilder)); + SessionConfigurator?.Invoke(sessionBuilder); + return sessionBuilder; + } + + /// + /// Configures before usage. + /// + /// Session builder. + protected virtual IStatelessSessionBuilder ConfigureStatelessSession(IStatelessSessionBuilder statelessSessionBuilder) + { + if (statelessSessionBuilder == null) throw new ArgumentNullException(nameof(statelessSessionBuilder)); + StatelessSessionConfigurator?.Invoke(statelessSessionBuilder); + return statelessSessionBuilder; + } + + /// + /// Returns NHibernate . + /// Session factory instance is cached, all subsequent calls to GetSessionFactory() will return the same instance. + /// + public ISessionFactory GetSessionFactory() + { + if (_sessionFactory != null) return _sessionFactory; + _sessionFactory = GetConfiguration().BuildSessionFactory(); + return _sessionFactory!; + } + + /// + /// Creates new NHibernate session and initializes database structure. + /// + /// NHibernate Session + public ISession InitializeSession() + { + var sessionBuilder = GetSessionFactory().WithOptions(); + var session = ConfigureSession(sessionBuilder).OpenSession(); + var connection = session.Connection; + new SchemaExport(_configuration).Execute(false, true, false, connection, null); + return session; + } + + /// + /// Creates new NHibernate stateless session. + /// + /// + /// When testing using transient database, database structure should be created once per test. + /// If stateless session is required, it should be created using connection opened by regular session, . + /// + /// NHibernate Session + public IStatelessSession CreateStatelessSessionForConnection(DbConnection connection) + { + if (connection == null) throw new ArgumentNullException(nameof(connection)); + var sessionBuilder = GetSessionFactory().WithStatelessOptions(); + sessionBuilder.Connection(connection); + var statelessSession = ConfigureStatelessSession(sessionBuilder).OpenStatelessSession(); + return statelessSession; + } + + /// + /// Closes the specified session. + /// + /// The session. + public static void Close(ISession? session) + => session?.Dispose(); + + /// + /// Shutdowns the specified session factory. + /// + /// The session factory. + /// + /// Disposing will destroy Session Factory associated with this instance. + /// + public static void Shutdown(ISessionFactory? sessionFactory) + => sessionFactory?.Dispose(); + } +} diff --git a/Src/Directory.Build.props b/Src/Directory.Build.props new file mode 100644 index 000000000..2bafb61b0 --- /dev/null +++ b/Src/Directory.Build.props @@ -0,0 +1,13 @@ + + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + diff --git a/Src/SharpArch.Domain/DomainModel/BaseObject.cs b/Src/SharpArch.Domain/DomainModel/BaseObject.cs new file mode 100644 index 000000000..5d4fb557b --- /dev/null +++ b/Src/SharpArch.Domain/DomainModel/BaseObject.cs @@ -0,0 +1,183 @@ +namespace SharpArch.Domain.DomainModel +{ + using System; + using System.Reflection; + using JetBrains.Annotations; + using Reflection; + + /// + /// Provides a standard base class for facilitating comparison of objects. + /// + /// + /// For a discussion of the implementation of Equals/GetHashCode, see + /// http://devlicio.us/blogs/billy_mccafferty/archive/2007/04/25/using-equals-gethashcode-effectively.aspx + /// and http://groups.google.com/group/sharp-architecture/browse_thread/thread/f76d1678e68e3ece?hl=en for + /// an in depth and conclusive resolution. + /// + [Serializable] + [PublicAPI] + public abstract class BaseObject + { + /// + /// To help ensure hash code uniqueness, a carefully selected random number multiplier + /// is used within the calculation. Goodrich and Tamassia's Data Structures and + /// Algorithms in Java asserts that 31, 33, 37, 39 and 41 will produce the fewest number + /// of collissions. See http://computinglife.wordpress.com/2008/11/20/why-do-hash-functions-use-prime-numbers/ + /// for more information. + /// + const int HashMultiplier = 31; + + /// + /// This static member caches the domain signature properties to avoid looking them up for + /// each instance of the same type. + /// + static readonly ITypePropertyDescriptorCache _signaturePropertiesCache + = new TypePropertyDescriptorCache(); + + /// + /// Determines whether the specified is equal to this instance. + /// + /// The to compare with the current . + /// true if the specified is equal to this instance; otherwise, false. + public override bool Equals(object? obj) + { + var compareTo = obj as BaseObject; + + if (ReferenceEquals(this, compareTo)) { + return true; + } + + return compareTo != null && GetType().Equals(compareTo.GetTypeUnproxied()) && + HasSameObjectSignatureAs(compareTo); + } + + /// + /// Returns a hash code for this instance. + /// + /// A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + /// + /// This is used to provide the hash code identifier of an object using the signature + /// properties of the object; although it's necessary for NHibernate's use, this can + /// also be useful for business logic purposes and has been included in this base + /// class, accordingly. Since it is recommended that GetHashCode change infrequently, + /// if at all, in an object's lifetime, it's important that properties are carefully + /// selected which truly represent the signature of an object. + /// + public override int GetHashCode() + { + unchecked { + PropertyInfo[] signatureProperties = GetSignatureProperties(); + + // If no properties were flagged as being part of the signature of the object, + // then simply return the hashcode of the base object as the hashcode. + if (signatureProperties.Length == 0) { + // ReSharper disable once BaseObjectGetHashCodeCallInGetHashCode + return base.GetHashCode(); + } + + // It's possible for two objects to return the same hash code based on + // identically valued properties, even if they're of two different types, + // so we include the object's type in the hash calculation + int hashCode = GetType().GetHashCode(); + + for (var i = 0; i < signatureProperties.Length; i++) { + PropertyInfo property = signatureProperties[i]; + object? value = property.GetValue(this, null); + if (value != null) { + hashCode = (hashCode * HashMultiplier) ^ value.GetHashCode(); + } + } + + return hashCode; + } + } + + /// + /// Returns the properties of the current object that make up the object's signature. + /// + public virtual PropertyInfo[] GetSignatureProperties() + { + Type type = GetTypeUnproxied(); + + // Since data won't be in cache on first request only, use .GetOrAdd as second attempt to prevent allocation of extra lambda object. + TypePropertyDescriptor descriptor = _signaturePropertiesCache.Find(type) ?? GetOrAdd(type); + return descriptor.Properties; + } + + TypePropertyDescriptor GetOrAdd(Type type) + { + return _signaturePropertiesCache.GetOrAdd(type, + t => new TypePropertyDescriptor(t, GetTypeSpecificSignatureProperties())); + } + + /// + /// Determines whether the current object has the same object signature as the specified object. + /// + /// The object to compare to. + /// + /// true if the current object has the same object signature as the specified object; otherwise, + /// false. + /// + /// You may override this method to provide your own comparison routine. + public virtual bool HasSameObjectSignatureAs(BaseObject compareTo) + { + PropertyInfo[] signatureProperties = GetSignatureProperties(); + + // if there were no signature properties, then simply return the default behavior of Equals + if (signatureProperties.Length == 0) { + // ReSharper disable once BaseObjectEqualsIsObjectEquals + return base.Equals(compareTo); + } + + // use for loop instead of foreach/LINQ for performance reasons. + // ReSharper disable once ForCanBeConvertedToForeach + // ReSharper disable once LoopCanBeConvertedToQuery + for (var index = 0; index < signatureProperties.Length; index++) { + PropertyInfo property = signatureProperties[index]; + object? valueOfThisObject = property.GetValue(this, null); + object? valueToCompareTo = property.GetValue(compareTo, null); + + if (valueOfThisObject == null && valueToCompareTo == null) { + continue; + } + + if (valueOfThisObject == null ^ valueToCompareTo == null || + !(valueOfThisObject!.Equals(valueToCompareTo))) { + return false; + } + } + + // If we've gotten this far and signature properties were found, then we can + // assume that everything matched + return true; + } + + /// + /// Enforces the template method pattern to have child objects determine which specific + /// properties should and should not be included in the object signature comparison. + /// + protected abstract PropertyInfo[] GetTypeSpecificSignatureProperties(); + + /// + /// Returns the unproxied type of the current object. + /// + /// + /// + /// When NHibernate proxies objects, it masks the type of the actual entity object. + /// This wrapper burrows into the proxied object to get its actual type. + /// + /// + /// Although this assumes NHibernate is being used, it doesn't require any NHibernate + /// related dependencies and has no bad side effects if NHibernate isn't being used. + /// + /// + /// Related discussion is at + /// http://groups.google.com/group/sharp-architecture/browse_thread/thread/ddd05f9baede023a ...thanks Jay Oliver! + /// + /// + public virtual Type GetTypeUnproxied() + { + return GetType(); + } + } +} diff --git a/Src/SharpArch.Domain/DomainModel/BaseObjectEqualityComparer.cs b/Src/SharpArch.Domain/DomainModel/BaseObjectEqualityComparer.cs new file mode 100644 index 000000000..dc2696a40 --- /dev/null +++ b/Src/SharpArch.Domain/DomainModel/BaseObjectEqualityComparer.cs @@ -0,0 +1,58 @@ +namespace SharpArch.Domain.DomainModel +{ + using System; + using System.Collections.Generic; + using JetBrains.Annotations; + + /// + /// Provides a comparer for supporting LINQ methods such as Intersect, Union and Distinct. + /// + /// + /// + /// This may be used for comparing objects of type and anything + /// that derives from it, such as and . + /// + /// + /// NOTE: Microsoft decided that set operators such as Intersect, Union and Distinct should + /// not use the IEqualityComparer's Equals() method when comparing objects, but should instead + /// use IEqualityComparer's GetHashCode() method. + /// + /// + [PublicAPI] + public class BaseObjectEqualityComparer : IEqualityComparer + where T : BaseObject + { + /// + /// Compares the specified objects for equality. + /// + /// The first object. + /// The second object. + /// true if the objects are equal, false otherwise. + public bool Equals(T? firstObject, T? secondObject) + { + // While SQL would return false for the following condition, returning true when + // comparing two null values is consistent with the C# language + if (firstObject == null && secondObject == null) { + return true; + } + + if (firstObject == null ^ secondObject == null) { + return false; + } + + return firstObject!.Equals(secondObject!); + } + + /// Returns a hash code for the specified object. + /// The object. + /// is null. + /// + /// A hash code for the object, suitable for use in hashing algorithms and data structures like a hash table. + /// + public int GetHashCode(T obj) + { + if (obj == null) throw new ArgumentNullException(nameof(obj)); + return obj.GetHashCode(); + } + } +} diff --git a/Src/SharpArch.Domain/DomainModel/DomainSignatureAttribute.cs b/Src/SharpArch.Domain/DomainModel/DomainSignatureAttribute.cs new file mode 100644 index 000000000..5d3aadab0 --- /dev/null +++ b/Src/SharpArch.Domain/DomainModel/DomainSignatureAttribute.cs @@ -0,0 +1,19 @@ +namespace SharpArch.Domain.DomainModel +{ + using System; + using JetBrains.Annotations; + + /// + /// Facilitates indicating which property(s) describe the unique signature of an + /// entity. See for when this is leveraged. + /// + /// + /// This is intended for use with . It may NOT be used on a . + /// + [Serializable] + [AttributeUsage(AttributeTargets.Property)] + [PublicAPI] + [BaseTypeRequired(typeof(IEntity<>))] + public sealed class DomainSignatureAttribute : Attribute + { } +} diff --git a/Src/SharpArch.Domain/DomainModel/Entity.cs b/Src/SharpArch.Domain/DomainModel/Entity.cs new file mode 100644 index 000000000..bdcb5a063 --- /dev/null +++ b/Src/SharpArch.Domain/DomainModel/Entity.cs @@ -0,0 +1,218 @@ +namespace SharpArch.Domain.DomainModel +{ +#if !NULLABLE_REFERENCE_TYPES + #pragma warning disable 8618 + #pragma warning disable 8604 +#endif + using System; + using System.Diagnostics.CodeAnalysis; + using System.Linq; + using System.Reflection; + using System.Xml.Serialization; + using JetBrains.Annotations; + + /// + /// For a discussion of this object, see + /// http://devlicio.us/blogs/billy_mccafferty/archive/2007/04/25/using-equals-gethashcode-effectively.aspx + /// + [Serializable] + [PublicAPI] + public abstract class Entity : ValidatableObject, IEntity, IEntity, + IEquatable> + where TId : IEquatable + { + /// + /// To help ensure hash code uniqueness, a carefully selected random number multiplier + /// is used within the calculation. Goodrich and Tamassia's Data Structures and + /// Algorithms in Java asserts that 31, 33, 37, 39 and 41 will produce the fewest number + /// of collisions. See http://computinglife.wordpress.com/2008/11/20/why-do-hash-functions-use-prime-numbers/ + /// for more information. + /// + const int HashMultiplier = 31; + + int? _cachedHashcode; + + /// + /// Gets or sets the ID. + /// + /// + /// + /// The ID may be of type string, int, a custom type, etc. + /// The setter is protected to allow unit tests to set this property via reflection + /// and to allow domain objects more flexibility in setting this for those objects + /// with assigned IDs. It's virtual to allow NHibernate-backed objects to be lazily + /// loaded. This is ignored for XML serialization because it does not have a public + /// setter (which is very much by design). See the FAQ within the documentation if + /// you'd like to have the ID XML serialized. + /// + /// + [XmlIgnore] +#if NULLABLE_REFERENCE_TYPES + [MaybeNull] +#endif + public virtual TId Id { get; protected set; } + + + /// + public virtual object? GetId() + { + // ReSharper disable once ConditionIsAlwaysTrueOrFalse + if (Id is null) return null; + return Id.Equals(default!) + // ReSharper disable once RedundantCast + ? (object?) null + : Id; + } + + /// + /// Returns a value indicating whether the current object is transient. + /// + /// + /// Transient objects are not associated with an item already in storage. For instance, + /// a Customer is transient if its ID is 0. It's virtual to allow NHibernate-backed + /// objects to be lazily loaded. + /// + public virtual bool IsTransient() + { + // ReSharper disable once ConditionIsAlwaysTrueOrFalse + return Id is null + || Id.Equals(default!); + } + + /// + public virtual bool Equals(Entity? other) + { + if (ReferenceEquals(this, other)) { + return true; + } + + if (other == null || GetType() != other.GetTypeUnproxied()) { + return false; + } + + if (HasSameNonDefaultIdAs(other)) { + return true; + } + + // Since the Ids aren't the same, both of them must be transient to + // compare domain signatures; because if one is transient and the + // other is a persisted entity, then they cannot be the same object. + return IsTransient() && other.IsTransient() && HasSameObjectSignatureAs(other); + + } + + /// + /// Determines whether the specified is equal to this instance. + /// + /// The to compare with the current . + /// true if the specified is equal to this instance; otherwise, false. + public override bool Equals(object? obj) + { + var compareTo = obj as Entity; + return Equals(compareTo); + } + + /// + /// Returns a hash code for this instance. + /// + /// A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + /// + /// This is used to provide the hash code identifier of an object using the signature + /// properties of the object; although it's necessary for NHibernate's use, this can + /// also be useful for business logic purposes and has been included in this base + /// class, accordingly. Since it is recommended that GetHashCode change infrequently, + /// if at all, in an object's lifetime, it's important that properties are carefully + /// selected which truly represent the signature of an object. + /// + [SuppressMessage("ReSharper", "NonReadonlyMemberInGetHashCode", Justification = "By design")] + public override int GetHashCode() + { + if (_cachedHashcode.HasValue) { + return _cachedHashcode.Value; + } + + if (IsTransient()) { + _cachedHashcode = base.GetHashCode(); + } + else { + unchecked + { + // It's possible for two objects to return the same hash code based on + // identically valued properties, even if they're of two different types, + // so we include the object's type in the hash calculation + int hashCode = GetType().GetHashCode() * HashMultiplier; + + // ReSharper disable once ConditionIsAlwaysTrueOrFalse + if (Id is null) + { + _cachedHashcode = hashCode; + } + else + { + _cachedHashcode = hashCode ^ Id.GetHashCode(); + } + } + } + + return _cachedHashcode.Value; + } + + /// + /// Returns the signature properties that are specific to the type of the current object. + /// + /// + /// If you choose NOT to override this method (which will be the most common scenario), + /// then you should decorate the appropriate property(s) with the + /// attribute and they will be compared automatically. This is the preferred method of + /// managing the domain signature of entity objects. This ensures that the entity has at + /// least one property decorated with the attribute. + /// + protected override PropertyInfo[] GetTypeSpecificSignatureProperties() + { + return + GetType().GetProperties().Where(p => p.IsDefined(typeof (DomainSignatureAttribute), true)).ToArray(); + + } + + /// + /// Returns a value indicating whether the current entity and the provided entity have + /// the same ID values and the IDs are not of the default ID value. + /// + /// + /// true if the current entity and the provided entity have the same ID values and the IDs are not of the + /// default ID value; otherwise; false. + /// + bool HasSameNonDefaultIdAs(Entity compareTo) + { +#if NULLABLE_REFERENCE_TYPES + return !IsTransient() && !compareTo.IsTransient() && Id!.Equals(compareTo.Id!); +#else + return !IsTransient() && !compareTo.IsTransient() && Id.Equals(compareTo.Id); +#endif + } + + /// + /// Check whether entities are equal. + /// + /// Entity to compare. + /// Entity to compare. + /// true if entities are equal, false otherwise. + public static bool operator ==(Entity? left, Entity? right) + => Equals(left, right); + + /// + /// Check whether entities are not equal. + /// + /// Entity to compare. + /// Entity to compare. + /// true if entities are not equal, false otherwise. + public static bool operator !=(Entity? left, Entity? right) + => !Equals(left, right); + } + +#if !NULLABLE_REFERENCE_TYPES + #pragma warning restore 8618 + #pragma warning restore 8604 +#endif + +} diff --git a/Src/SharpArch.Domain/DomainModel/IEntity.cs b/Src/SharpArch.Domain/DomainModel/IEntity.cs new file mode 100644 index 000000000..71f76760d --- /dev/null +++ b/Src/SharpArch.Domain/DomainModel/IEntity.cs @@ -0,0 +1,80 @@ +namespace SharpArch.Domain.DomainModel +{ + using System; +#if NULLABLE_REFERENCE_TYPES + using System.Diagnostics.CodeAnalysis; +#endif + using System.Reflection; + using JetBrains.Annotations; + + + /// + /// Non-generic entity interface. + /// + [PublicAPI] + public interface IEntity + { + /// + /// Returns entity identifier. + /// + /// Entity identifier or null for transient entities. + /// + /// Calling this method may result in boxing for entities with value type identifier. + /// Use where possible. + /// + object? GetId(); + + /// + /// Returns the properties of the current object that make up the object's signature. + /// + /// A collection of instances. + PropertyInfo[] GetSignatureProperties(); + + /// + /// Returns a value indicating whether the current object is transient. + /// + /// + /// Transient objects are not associated with an item already in storage. For instance, + /// a Customer is transient if its ID is 0. It's virtual to allow NHibernate-backed + /// objects to be lazily loaded. + /// + bool IsTransient(); + + /// + /// Returns the unproxied type of the current object. + /// + /// + /// + /// When NHibernate proxies objects, it masks the type of the actual entity object. + /// This wrapper burrows into the proxied object to get its actual type. + /// + /// + /// Although this assumes NHibernate is being used, it doesn't require any NHibernate + /// related dependencies and has no bad side effects if NHibernate isn't being used. + /// + /// + /// Related discussion is at + /// http://groups.google.com/group/sharp-architecture/browse_thread/thread/ddd05f9baede023a ...thanks Jay Oliver! + /// + /// + Type GetTypeUnproxied(); + } + + /// + /// This serves as a base interface for . + /// It also provides a simple means to develop your own base entity. + /// + [PublicAPI] + public interface IEntity + where TId : IEquatable + { + /// + /// Gets the ID which uniquely identifies the entity instance within its type's bounds. + /// +#if NULLABLE_REFERENCE_TYPES + [AllowNull] [MaybeNull] +#endif + TId Id { get; } + } + +} diff --git a/Src/SharpArch.Domain/DomainModel/IHasAssignedId.cs b/Src/SharpArch.Domain/DomainModel/IHasAssignedId.cs new file mode 100644 index 000000000..4341eab09 --- /dev/null +++ b/Src/SharpArch.Domain/DomainModel/IHasAssignedId.cs @@ -0,0 +1,24 @@ +namespace SharpArch.Domain.DomainModel +{ + using System; + using JetBrains.Annotations; + + /// + /// Defines the public members of a class that supports setting an assigned ID of an object. + /// + /// The type of the ID. + [PublicAPI] + public interface IHasAssignedId + where TId : IEquatable + { + /// + /// Sets the assigned ID of an object. + /// + /// + /// This is not part of since most entities do not have assigned + /// IDs and since business rules will certainly vary as to what constitutes a valid, + /// assigned ID for one object but not for another. + /// + void SetAssignedIdTo(TId assignedId); + } +} diff --git a/Src/SharpArch.Domain/DomainModel/ValidatableObject.cs b/Src/SharpArch.Domain/DomainModel/ValidatableObject.cs new file mode 100644 index 000000000..e26e9a80c --- /dev/null +++ b/Src/SharpArch.Domain/DomainModel/ValidatableObject.cs @@ -0,0 +1,38 @@ +namespace SharpArch.Domain.DomainModel +{ + using System; + using System.Collections.Generic; + using System.ComponentModel.DataAnnotations; + using System.Diagnostics.CodeAnalysis; + using JetBrains.Annotations; + + /// + /// Serves as the base class for objects that are validatable. + /// + [Serializable] + [PublicAPI] + [SuppressMessage("ReSharper", "VirtualMemberNeverOverriden.Global", Justification = "Public API")] + public abstract class ValidatableObject : BaseObject + { + /// + /// Determines whether this instance is valid. + /// + /// true if this instance is valid; otherwise, false. + public virtual bool IsValid(ValidationContext validationContext) + { + return ValidationResults(validationContext).Count == 0; + } + + /// + /// Validates all properties of the object and returns the validation results if any of + /// them were deemed invalid. + /// + /// A collection of validation results. + public virtual ICollection ValidationResults(ValidationContext validationContext) + { + var validationResults = new List(); + Validator.TryValidateObject(this, validationContext, validationResults, true); + return validationResults; + } + } +} diff --git a/Src/SharpArch.Domain/DomainModel/ValueObject.cs b/Src/SharpArch.Domain/DomainModel/ValueObject.cs new file mode 100644 index 000000000..1ab9d9257 --- /dev/null +++ b/Src/SharpArch.Domain/DomainModel/ValueObject.cs @@ -0,0 +1,101 @@ +namespace SharpArch.Domain.DomainModel +{ + using System; + using System.Diagnostics.CodeAnalysis; + using System.Linq; + using System.Reflection; + using JetBrains.Annotations; + + /// + /// Provides a standard base class for facilitating comparison of value objects using all the object's properties. + /// + /// + /// For a discussion of the implementation of Equals/GetHashCode, see + /// http://devlicio.us/blogs/billy_mccafferty/archive/2007/04/25/using-equals-gethashcode-effectively.aspx + /// and http://groups.google.com/group/sharp-architecture/browse_thread/thread/f76d1678e68e3ece?hl=en for + /// an in depth and conclusive resolution. + /// + [Serializable] + [PublicAPI] + [SuppressMessage("ReSharper", "RedundantOverridenMember", Justification = + "Need to override Equals/GetHashCode because == and != operators were introduced")] + public abstract class ValueObject : BaseObject + { + /// + /// Implements the == operator. + /// + /// The first value object. + /// The second value object. + /// The result of the operator. + public static bool operator ==(ValueObject? valueObject1, ValueObject? valueObject2) + { + if (ReferenceEquals(valueObject1, null)) + return ReferenceEquals(valueObject2, null); + + return valueObject1.Equals(valueObject2); + } + + /// + /// Implements the != operator. + /// + /// The first value object. + /// The second value object. + /// The result of the operator. + public static bool operator !=(ValueObject? valueObject1, ValueObject? valueObject2) + { + return !(valueObject1 == valueObject2); + } + + /// + /// Determines whether the specified is equal to this instance. + /// + /// The to compare with the current . + /// true if the specified is equal to this instance; otherwise, false. + public override bool Equals(object? obj) + { + return base.Equals(obj); + } + + /// + /// Returns a hash code for this instance. + /// + /// A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + /// + /// This is used to provide the hash code identifier of an object using the signature + /// properties of the object; although it's necessary for NHibernate's use, this can + /// also be useful for business logic purposes and has been included in this base + /// class, accordingly. Since it is recommended that GetHashCode change infrequently, + /// if at all, in an object's lifetime, it's important that properties are carefully + /// selected which truly represent the signature of an object. + /// + public override int GetHashCode() + { + return base.GetHashCode(); + } + + /// + /// Returns the signature properties that are specific to the type of the current object. + /// + /// + /// ValueObject has properties marked with + /// + /// + protected override PropertyInfo[] GetTypeSpecificSignatureProperties() + { + var hasDomainSignature = GetType().GetProperties().Any(p => p.IsDefined(typeof(DomainSignatureAttribute), true)); + + if (hasDomainSignature) { + string message = "Properties were found within " + GetType() + + @" having the + [DomainSignature] attribute. The domain signature of a value object includes all + of the properties of the object by convention; consequently, adding [DomainSignature] + to the properties of a value object's properties is misleading and should be removed. + Alternatively, you can inherit from Entity if that fits your needs better."; + + throw new InvalidOperationException(message); + } + + return GetType().GetProperties(); + } + } +} diff --git a/Src/SharpArch.Domain/Enums.cs b/Src/SharpArch.Domain/Enums.cs new file mode 100644 index 000000000..ec744b76d --- /dev/null +++ b/Src/SharpArch.Domain/Enums.cs @@ -0,0 +1,52 @@ +namespace SharpArch.Domain +{ + using JetBrains.Annotations; + + + /// + /// Contains global enumerations. + /// + [PublicAPI] + public static class Enums + { + /// + /// Provides an NHibernate.LockMode facade so as to avoid a direct dependency on the NHibernate DLL. + /// + /// + /// Further information concerning lock modes may be found at: + /// http://docs.jboss.org/hibernate/orm/4.1/manual/en-US/html/ch13.html#transactions-locking + /// + public enum LockMode : byte + { + /// + /// Represents the absence of a lock. All objects switch to this lock mode at the + /// end of a Transaction. Objects associated with the session via a call to + /// update() or saveOrUpdate() also start out in this lock mode. + /// + None = 0, + + /// + /// This lock mode is acquired automatically when data is read under Repeatable Read + /// or Serializable isolation level. It can be re-acquired by explicit user request. + /// + Read = 1, + + /// + /// This lock mode can be acquired upon explicit user request using + /// SELECT ... FOR UPDATE on databases which support that syntax. + /// + Upgrade = 2, + + /// + /// This lock mode can be acquired upon explicit user request using a + /// SELECT ... FOR UPDATE NOWAIT under Oracle. + /// + UpgradeNoWait = 3, + + /// + /// This lock mode is acquired automatically when a row is updated or inserted. + /// + Write = 4 + } + } +} diff --git a/Src/SharpArch.Domain/PersistenceSupport/IEntityDuplicateChecker.cs b/Src/SharpArch.Domain/PersistenceSupport/IEntityDuplicateChecker.cs new file mode 100644 index 000000000..ef3db1c6e --- /dev/null +++ b/Src/SharpArch.Domain/PersistenceSupport/IEntityDuplicateChecker.cs @@ -0,0 +1,20 @@ +namespace SharpArch.Domain.PersistenceSupport +{ + using DomainModel; + using JetBrains.Annotations; + + /// + /// Defines the public members of a class that checks an entity for duplicates. + /// + [PublicAPI] + public interface IEntityDuplicateChecker + { + /// Returns a value indicating whether a duplicate of the specified exists. + /// The entity. + /// is null. + /// + /// true if a duplicate exists, false otherwise. + /// + bool DoesDuplicateExistWithTypedIdOf(IEntity entity); + } +} diff --git a/Src/SharpArch.Domain/PersistenceSupport/ILinqRepository.cs b/Src/SharpArch.Domain/PersistenceSupport/ILinqRepository.cs new file mode 100644 index 000000000..978c8e479 --- /dev/null +++ b/Src/SharpArch.Domain/PersistenceSupport/ILinqRepository.cs @@ -0,0 +1,55 @@ +namespace SharpArch.Domain.PersistenceSupport +{ + using System; + using System.Linq; + using System.Threading; + using System.Threading.Tasks; + using DomainModel; + using JetBrains.Annotations; + using Specifications; + + + /// + /// Defines the public members of a LINQ supported repository. + /// + /// + /// Defines a LINQ implementation of the Repository Pattern that takes in a Specification to + /// define the items that should be returned. + /// + [PublicAPI] + public interface ILinqRepository : IRepository + where TEntity : class, IEntity + where TId : IEquatable + { + /// + /// Finds an item by ID. + /// + /// The ID of the entity. + /// Cancellation token. + /// The matching item. + Task FindOneAsync(TId id, CancellationToken cancellationToken = default); + + /// + /// Finds an item by a specification. + /// + /// The specification. + /// Cancellation token. + /// The matching item. + Task FindOneAsync(ILinqSpecification specification, CancellationToken cancellationToken = default); + + /// + /// Returns representing query for the entity. + /// + /// Query. + + IQueryable FindAll(); + + /// + /// Returns query to filter entities by a specification. + /// + /// The specification. + /// Query. + + IQueryable FindAll(ILinqSpecification specification); + } +} diff --git a/Src/SharpArch.Domain/PersistenceSupport/IRepository.cs b/Src/SharpArch.Domain/PersistenceSupport/IRepository.cs new file mode 100644 index 000000000..e6f1bd5b4 --- /dev/null +++ b/Src/SharpArch.Domain/PersistenceSupport/IRepository.cs @@ -0,0 +1,99 @@ +namespace SharpArch.Domain.PersistenceSupport +{ + using System; + using System.Collections.Generic; + using System.Threading; + using System.Threading.Tasks; + using DomainModel; + using JetBrains.Annotations; + + + /// + /// Defines the public members of a class that implements the asynchronous repository pattern for entities + /// of the specified type. + /// + /// The entity type. + /// The type of the entity ID. + [PublicAPI] + public interface IRepository + where TEntity : class, IEntity + where TId : IEquatable + { + /// + /// Returns the database context, which provides a handle to application wide DB + /// activities such as committing any pending changes, beginning a transaction, + /// rolling back a transaction, etc. + /// + + ITransactionManager TransactionManager { get; } + + /// + /// Returns the entity that matches the specified ID. + /// + /// + /// An entity or null if a row is not found matching the provided ID. + /// + + Task GetAsync(TId id, CancellationToken cancellationToken = default); + + /// + /// Returns all of the items of a given type. + /// + + Task> GetAllAsync(CancellationToken cancellationToken = default); + + /// + /// For entities that have assigned Id's, you must explicitly call Save to add a new one. + /// See http://www.hibernate.org/hib_docs/nhibernate/html_single/#mapping-declaration-id-assigned. + /// + /// + /// Saved entity instance. + /// + /// is null. + + Task SaveAsync(TEntity entity, CancellationToken cancellationToken = default); + + /// + /// Saves or updates the specified entity. + /// + /// + /// + /// For entities with automatically generated IDs, such as identity, + /// may be called when saving or updating an entity. + /// + /// + /// Updating also allows you to commit changes to a detached object. + /// More info may be found at: + /// http://www.hibernate.org/hib_docs/nhibernate/html_single/#manipulatingdata-updating-detached + /// + /// + /// + /// Entity instance. + /// + /// is null. + + Task SaveOrUpdateAsync(TEntity entity, CancellationToken cancellationToken = default); + + /// + /// Disassociates the entity with the ORM so that changes made to it are not automatically + /// saved to the database. + /// + /// + /// In NHibernate this removes the entity from current session cache. + /// More details may be found at http://www.hibernate.org/hib_docs/nhibernate/html_single/#performance-sessioncache. + /// + /// is null. + Task EvictAsync(TEntity entity, CancellationToken cancellationToken = default); + + /// + /// Deletes the specified entity. + /// + /// is null. + Task DeleteAsync(TEntity entity, CancellationToken cancellationToken = default); + + /// + /// Deletes the entity that matches the provided Id. + /// + Task DeleteAsync(TId id, CancellationToken cancellationToken = default); + } +} diff --git a/Src/SharpArch.Domain/PersistenceSupport/ISupportsTransactionStatus.cs b/Src/SharpArch.Domain/PersistenceSupport/ISupportsTransactionStatus.cs new file mode 100644 index 000000000..d8190fce9 --- /dev/null +++ b/Src/SharpArch.Domain/PersistenceSupport/ISupportsTransactionStatus.cs @@ -0,0 +1,17 @@ +namespace SharpArch.Domain.PersistenceSupport +{ + using JetBrains.Annotations; + + + /// + /// Returns transaction status. + /// + [PublicAPI] + public interface ISupportsTransactionStatus + { + /// + /// Checks whether transaction is active or not. + /// + bool IsActive { get; } + } +} diff --git a/Src/SharpArch.Domain/PersistenceSupport/ITransactionManager.cs b/Src/SharpArch.Domain/PersistenceSupport/ITransactionManager.cs new file mode 100644 index 000000000..ba001dc7c --- /dev/null +++ b/Src/SharpArch.Domain/PersistenceSupport/ITransactionManager.cs @@ -0,0 +1,41 @@ +namespace SharpArch.Domain.PersistenceSupport +{ + using System; + using System.Data; + using System.Threading; + using System.Threading.Tasks; + using JetBrains.Annotations; + + + /// + /// Defines the public members of a class that represents a database context which handles + /// application wide DB activities such as committing any pending changes, beginning a + /// transaction, rolling back a transaction, etc. + /// + /// + /// Note that outside of , you shouldn't have to + /// invoke this object very often. If you're using on of the the TransactionAttribute + /// attributes provided by SharpArch on your controller actions, then the transaction + /// opening/committing will be taken care of for you. + /// + [PublicAPI] + public interface ITransactionManager + { + /// + /// Begins the transaction. + /// + /// Transaction isolation level, see for details. + /// The transaction instance. + IDisposable BeginTransaction(IsolationLevel isolationLevel = IsolationLevel.ReadCommitted); + + /// + /// Commits the transaction, saving all changes. + /// + Task CommitTransactionAsync(CancellationToken cancellationToken = default); + + /// + /// Rolls the transaction back, discarding any changes. + /// + Task RollbackTransactionAsync(CancellationToken cancellationToken = default); + } +} diff --git a/Src/SharpArch.Domain/PersistenceSupport/RepositoryExtensions.cs b/Src/SharpArch.Domain/PersistenceSupport/RepositoryExtensions.cs new file mode 100644 index 000000000..8914cadad --- /dev/null +++ b/Src/SharpArch.Domain/PersistenceSupport/RepositoryExtensions.cs @@ -0,0 +1,34 @@ +namespace SharpArch.Domain.PersistenceSupport +{ + using System; + using System.Threading; + using System.Threading.Tasks; + using DomainModel; + using JetBrains.Annotations; + + + /// + /// Repository extension methods. + /// + [PublicAPI] + public static class RepositoryExtensions + { + /// + /// Saves the specified object to the repository and evicts it from the session. + /// + /// + /// or is + /// . + /// + public static async Task SaveAndEvictAsync( + this IRepository repository, TEntity entity, CancellationToken cancellationToken = default) + where TEntity : class, IEntity + where TId : IEquatable + { + if (repository == null) throw new ArgumentNullException(nameof(repository)); + if (entity == null) throw new ArgumentNullException(nameof(entity)); + var saved = await repository.SaveAsync(entity, CancellationToken.None).ConfigureAwait(false); + await repository.EvictAsync(saved, cancellationToken).ConfigureAwait(false); + } + } +} diff --git a/Src/SharpArch.Domain/Reflection/ITypePropertyDescriptorCache.cs b/Src/SharpArch.Domain/Reflection/ITypePropertyDescriptorCache.cs new file mode 100644 index 000000000..e2cccb522 --- /dev/null +++ b/Src/SharpArch.Domain/Reflection/ITypePropertyDescriptorCache.cs @@ -0,0 +1,40 @@ +namespace SharpArch.Domain.Reflection +{ + using System; + using JetBrains.Annotations; + + /// + /// Property descriptors cache. + /// + /// + /// Implementation is thread-safe. + /// + [PublicAPI] + public interface ITypePropertyDescriptorCache + { + /// + /// Returns number of entries in the cache. + /// + int Count { get; } + + /// + /// Find cached property descriptor. + /// + /// The type. + /// or null if does not exists. + TypePropertyDescriptor? Find(Type type); + + /// + /// Get existing property descriptor or create and cache it. + /// + /// The type. + /// The factory to create descriptor. + /// + TypePropertyDescriptor GetOrAdd(Type type, Func factory); + + /// + /// Clears the cache. + /// + void Clear(); + } +} diff --git a/Src/SharpArch.Domain/Reflection/TypePropertyDescriptor.cs b/Src/SharpArch.Domain/Reflection/TypePropertyDescriptor.cs new file mode 100644 index 000000000..7f61ba4ec --- /dev/null +++ b/Src/SharpArch.Domain/Reflection/TypePropertyDescriptor.cs @@ -0,0 +1,109 @@ +namespace SharpArch.Domain.Reflection +{ + using System; + using System.Reflection; + using JetBrains.Annotations; + + /// + /// Contains injectable properties per type. + /// + [Serializable] + [PublicAPI] + public class TypePropertyDescriptor : IEquatable + { + static readonly PropertyInfo[] _emptyArray = Array.Empty(); + readonly Type _ownerType; + + /// + /// Initializes a new instance of the class. + /// + /// Type of the object. + /// The injectable properties. + /// + public TypePropertyDescriptor(Type ownerType, PropertyInfo[]? properties) + { + if (ownerType == null) throw new ArgumentNullException(nameof(ownerType)); + + this._ownerType = ownerType; + if (properties != null && properties.Length > 0) + Properties = properties; + else + Properties = _emptyArray; + } + + /// + /// Owner type. + /// + // ReSharper disable once ConvertToAutoPropertyWithPrivateSetter + public Type OwnerType => _ownerType; + + /// + /// Gets the injectable properties. + /// + /// + /// The injectable properties. + /// + public PropertyInfo[] Properties { get; private set; } + + /// + /// Indicates whether the current object is equal to another object of the same type. + /// + /// An object to compare with this object. + /// + /// true if the current object is equal to the parameter; otherwise, false. + /// + public bool Equals(TypePropertyDescriptor? other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + return OwnerType == other.OwnerType; + } + + /// + /// Gets a value indicating whether has injectable properties. + /// + /// + /// true if this instance has injectable properties; otherwise, false. + /// + public bool HasProperties() + { + return Properties.Length > 0; + } + + /// + /// Determines whether the specified , is equal to this instance. + /// + /// The to compare with this instance. + /// + /// true if the specified is equal to this instance; otherwise, false. + /// + public override bool Equals(object? obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + return obj is TypePropertyDescriptor other && Equals(other); + } + + /// + /// Returns a hash code for this instance. + /// + /// + /// A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + /// + public override int GetHashCode() + { + return OwnerType.GetHashCode(); + } + + /// + /// Returns a that represents this instance. + /// + /// + /// A that represents this instance. + /// + public override string ToString() + { + return string.Concat("Type: ", OwnerType.AssemblyQualifiedName, "Properties: ", Properties.Length); + } + } +} diff --git a/Src/SharpArch.Domain/Reflection/TypePropertyDescriptorCache.cs b/Src/SharpArch.Domain/Reflection/TypePropertyDescriptorCache.cs new file mode 100644 index 000000000..6a592ab39 --- /dev/null +++ b/Src/SharpArch.Domain/Reflection/TypePropertyDescriptorCache.cs @@ -0,0 +1,61 @@ +namespace SharpArch.Domain.Reflection +{ + using System; + using System.Collections.Concurrent; + using JetBrains.Annotations; + + /// + /// Property descriptors cache. + /// + /// Implementation is thread-safe. + [PublicAPI] + public class TypePropertyDescriptorCache : ITypePropertyDescriptorCache + { + readonly ConcurrentDictionary _cache = new(); + + /// + /// Find cached property descriptor. + /// + /// The type. + /// + /// or null if does not exists. + /// + [MustUseReturnValue] + public TypePropertyDescriptor? Find(Type type) + { + _cache.TryGetValue(type, out TypePropertyDescriptor? result); + return result; + } + + /// + /// Get existing property descriptor or create and cache it. + /// + /// The type. + /// The factory to create descriptor. + /// + /// + /// or is + /// . + /// + public TypePropertyDescriptor GetOrAdd(Type type, Func factory) + { + if (type == null) throw new ArgumentNullException(nameof(type)); + if (factory == null) throw new ArgumentNullException(nameof(factory)); + + return _cache.GetOrAdd(type, factory); + } + + /// + /// Clears the cache. + /// + public void Clear() + { + _cache.Clear(); + } + + /// + /// Returns number of entries in the cache. + /// + public int Count => _cache.Count; + } +} diff --git a/Src/SharpArch.Domain/SharpArch.Domain.csproj b/Src/SharpArch.Domain/SharpArch.Domain.csproj new file mode 100644 index 000000000..b893d442f --- /dev/null +++ b/Src/SharpArch.Domain/SharpArch.Domain.csproj @@ -0,0 +1,29 @@ + + + + + + + + Provides the core interfaces and classes needed by a Sharp Architecture application. It is persistence ignorant and would be used with other packages that provide persistance support. + $(PackageTags);domain + icon.png + + + + + + + + + + + + + + + + + + + diff --git a/Src/SharpArch.Domain/Specifications/AdHoc.cs b/Src/SharpArch.Domain/Specifications/AdHoc.cs new file mode 100644 index 000000000..0672c0d62 --- /dev/null +++ b/Src/SharpArch.Domain/Specifications/AdHoc.cs @@ -0,0 +1,28 @@ +namespace SharpArch.Domain.Specifications +{ + using System; + using System.Linq.Expressions; + using JetBrains.Annotations; + + /// + /// An ad hoc query specification. + /// + /// The entity type. + [PublicAPI] + public class AdHoc : QuerySpecification + { + /// + /// Initializes a new instance of the class. + /// + /// The expression. + public AdHoc(Expression>? expression) + { + MatchingCriteria = expression; + } + + /// + /// Gets the matching criteria. + /// + public override Expression>? MatchingCriteria { get; } + } +} diff --git a/Src/SharpArch.Domain/Specifications/ILinqSpecification.cs b/Src/SharpArch.Domain/Specifications/ILinqSpecification.cs new file mode 100644 index 000000000..11aed5f4a --- /dev/null +++ b/Src/SharpArch.Domain/Specifications/ILinqSpecification.cs @@ -0,0 +1,19 @@ +namespace SharpArch.Domain.Specifications +{ + using System.Linq; + + /// + /// Defines a contract for the behaviour of a LINQ Specification design pattern. + /// + /// The type to be used for Input / Output. + public interface ILinqSpecification + { + /// + /// Returns the elements from the specified candidates that are satisfying the + /// specification. + /// + /// The candidates. + /// A list of satisfying elements. + IQueryable SatisfyingElementsFrom(IQueryable candidates); + } +} diff --git a/Src/SharpArch.Domain/Specifications/ISpecification.cs b/Src/SharpArch.Domain/Specifications/ISpecification.cs new file mode 100644 index 000000000..b827b1505 --- /dev/null +++ b/Src/SharpArch.Domain/Specifications/ISpecification.cs @@ -0,0 +1,62 @@ +namespace SharpArch.Domain.Specifications +{ + using JetBrains.Annotations; + + /// + /// Defines the behaviour of a specification which is used to select specified items from a + /// collection + /// + /// The type that the specification is applied to. + [PublicAPI] + public interface ISpecification + { + /// + /// Allows multiple specifications to be joined together. + /// + /// The specification to add. + /// A specification object containing original specification and new addition. + ISpecification And(ISpecification specification); + + /// + /// Indicates whether the item provided satisfies the specification. + /// + /// The item to evaluate. + /// A value indicating whether the specification has be satisfied. + bool IsSatisfiedBy(T item); + + /// + /// Checks whether the specification is more general than a given specification. + /// + /// The specification to test. + /// A value indicating whether the current specification is a generalisation of the supplied specification. + bool IsGeneralizationOf(ISpecification specification); + + /// + /// Checks whether the specification is more specific than a given specification. + /// + /// The specification to test. + /// A value indicating whether the current specification is a special case version of the supplied specification. + bool IsSpecialCaseOf(ISpecification specification); + + /// + /// Allows multiple specifications to be joined together, the specification must return false. + /// + /// The specification to add. + /// A specification object containing original specification and new addition. + ISpecification Not(ISpecification specification); + + /// + /// Allows multiple specifications to be joined together, the specification can return true. + /// + /// The specification to add. + /// A specification object containing original specification and new addition. + ISpecification Or(ISpecification specification); + + /// + /// Returns the specification representing the criteria that are not met by the candidate object. + /// + /// The item to test. + /// A value indicating whether the specification is unsatisfied by the specified item. + ISpecification RemainderUnsatisfiedBy(T item); + } +} diff --git a/Src/SharpArch.Domain/Specifications/QuerySpecification.cs b/Src/SharpArch.Domain/Specifications/QuerySpecification.cs new file mode 100644 index 000000000..08ce37309 --- /dev/null +++ b/Src/SharpArch.Domain/Specifications/QuerySpecification.cs @@ -0,0 +1,38 @@ +namespace SharpArch.Domain.Specifications +{ + using System; + using System.Linq; + using System.Linq.Expressions; + using JetBrains.Annotations; + + /// + /// Serves as the base class for query specifications. + /// + /// The entity type. + [PublicAPI] + public abstract class QuerySpecification : ILinqSpecification + { + /// + /// Gets the matching criteria. + /// + public abstract Expression>? MatchingCriteria { get; } + + /// + /// Returns the elements from the specified candidates that are satisfying the + /// specification. + /// + /// The candidates. + /// A list of satisfying elements. + /// is . + public virtual IQueryable SatisfyingElementsFrom(IQueryable candidates) + { + if (candidates == null) throw new ArgumentNullException(nameof(candidates)); + if (MatchingCriteria != null) + { + return candidates.Where(MatchingCriteria); + } + + return candidates; + } + } +} diff --git a/Src/SharpArch.Domain/Specifications/QuerySpecificationExtensions.cs b/Src/SharpArch.Domain/Specifications/QuerySpecificationExtensions.cs new file mode 100644 index 000000000..a96a5901e --- /dev/null +++ b/Src/SharpArch.Domain/Specifications/QuerySpecificationExtensions.cs @@ -0,0 +1,55 @@ +namespace SharpArch.Domain.Specifications +{ + using System; + using System.Linq.Expressions; + using JetBrains.Annotations; + + /// + /// Provides extension methods that extend the class. + /// + [PublicAPI] + public static class QuerySpecificationExtensions + { + /// + /// Returns a specification that joins both specified specifications together using + /// the AND operator. + /// + /// The entity type. + /// The first specification. + /// The second specification. + /// A query specification. + public static QuerySpecification And(this QuerySpecification specification1, + QuerySpecification specification2) + { + if (specification1 == null) throw new ArgumentNullException(nameof(specification1)); + if (specification2 == null) throw new ArgumentNullException(nameof(specification2)); + InvocationExpression invokedExpr = + Expression.Invoke(specification2.MatchingCriteria!, specification1.MatchingCriteria!.Parameters); + Expression> dynamicClause = Expression.Lambda>( + Expression.AndAlso(specification1.MatchingCriteria!.Body, invokedExpr), + specification1.MatchingCriteria!.Parameters); + + return new AdHoc(dynamicClause); + } + + /// + /// Returns a specification that joins both specified specifications together using + /// the OR operator. + /// + /// The entity type. + /// The first specification. + /// The second specification. + /// A query specification. + public static QuerySpecification Or(this QuerySpecification specification1, + QuerySpecification specification2) + { + InvocationExpression invokedExpr = Expression.Invoke(specification2.MatchingCriteria!, + specification1.MatchingCriteria!.Parameters); + Expression> dynamicClause = Expression.Lambda>( + Expression.OrElse(specification1.MatchingCriteria!.Body, invokedExpr), + specification1.MatchingCriteria!.Parameters); + + return new AdHoc(dynamicClause); + } + } +} diff --git a/Src/SharpArch.Domain/Validation/HasUniqueDomainSignatureAttribute.cs b/Src/SharpArch.Domain/Validation/HasUniqueDomainSignatureAttribute.cs new file mode 100644 index 000000000..716511931 --- /dev/null +++ b/Src/SharpArch.Domain/Validation/HasUniqueDomainSignatureAttribute.cs @@ -0,0 +1,32 @@ +namespace SharpArch.Domain.Validation +{ + using System; + using System.ComponentModel.DataAnnotations; + using JetBrains.Annotations; + using DomainModel; + + /// + /// Provides a class level validator for determining if the entity has a unique domain signature + /// when compared with other entries in the database. + /// Due to the fact that .NET does not support generic attributes, this only works for entity + /// types having an Id of type int. + /// + [AttributeUsage(AttributeTargets.Class)] + [PublicAPI] + [BaseTypeRequired(typeof(IEntity))] + public sealed class HasUniqueDomainSignatureAttribute : HasUniqueDomainSignatureAttributeBase + { + /// + /// Returns true if entity's domain signature is unique in database. + /// + /// The value to validate. + /// The context information about the validation operation. + /// + /// An instance of the class. + /// + protected override ValidationResult? IsValid(object? value, ValidationContext validationContext) + { + return DoValidate(value, validationContext); + } + } +} diff --git a/Src/SharpArch.Domain/Validation/HasUniqueDomainSignatureAttributeBase.cs b/Src/SharpArch.Domain/Validation/HasUniqueDomainSignatureAttributeBase.cs new file mode 100644 index 000000000..89507eee5 --- /dev/null +++ b/Src/SharpArch.Domain/Validation/HasUniqueDomainSignatureAttributeBase.cs @@ -0,0 +1,63 @@ +namespace SharpArch.Domain.Validation +{ + using System; + using System.ComponentModel.DataAnnotations; + using System.Globalization; + using JetBrains.Annotations; + using DomainModel; + using PersistenceSupport; + + /// + /// Performs validation of domain signature uniqueness. + /// + /// + /// Performs database search to ensure no other entity with same domain signature exists. + /// + /// + /// + /// . + [PublicAPI] + [BaseTypeRequired(typeof(IEntity))] + public class HasUniqueDomainSignatureAttributeBase : ValidationAttribute + { + /// + /// Initializes a new instance of the class. + /// + protected HasUniqueDomainSignatureAttributeBase() + : base("Provided values matched an existing, duplicate entity") + { } + + /// + /// Gets a value that indicates whether the attribute requires validation context. + /// + public override bool RequiresValidationContext => true; + + /// + /// Performs database lookup to ensure domain signature uniqueness. + /// + /// The entity. + /// The validation context. + /// + /// + /// can not be resolved from + /// . + /// + protected ValidationResult? DoValidate(object? value, ValidationContext validationContext) + { + var entityToValidate = value as IEntity; + if (entityToValidate == null) + throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, + "This validator must be used at the class level of an " + nameof(IEntity) + ". The type you provided was '{0}'.", + (value?.GetType() as object) ?? "null")); + + var duplicateChecker = + (IEntityDuplicateChecker?) validationContext.GetService(typeof(IEntityDuplicateChecker)); + if (duplicateChecker == null) + throw new InvalidOperationException( + $"'{nameof(IEntityDuplicateChecker)}' can not be resolved from validation context."); + return duplicateChecker.DoesDuplicateExistWithTypedIdOf(entityToValidate) + ? new ValidationResult(ErrorMessage) + : ValidationResult.Success; + } + } +} diff --git a/Src/SharpArch.Infrastructure/CodeBaseLocator.cs b/Src/SharpArch.Infrastructure/CodeBaseLocator.cs new file mode 100644 index 000000000..a08173b5a --- /dev/null +++ b/Src/SharpArch.Infrastructure/CodeBaseLocator.cs @@ -0,0 +1,36 @@ +namespace SharpArch.Infrastructure +{ + using System; + using System.IO; + using System.Reflection; + using JetBrains.Annotations; + + + /// + /// Resolves assembly code base directory. + /// + [PublicAPI] + public class CodeBaseLocator + { + /// + /// Returns directory of assembly code base. + /// + /// Assembly + /// Directory path + /// is + public static string GetAssemblyCodeBasePath(Assembly assembly) + { + if (assembly == null) throw new ArgumentNullException(nameof(assembly)); + +#if NET5_0_OR_GREATER + return Path.GetDirectoryName(assembly.Location) + ?? Directory.GetCurrentDirectory(); + +#else + var uri = new UriBuilder(assembly.CodeBase); + var uriPath = Uri.UnescapeDataString(uri.Path); + return Path.GetDirectoryName(uriPath)!; +#endif + } + } +} diff --git a/Src/SharpArch.Infrastructure/Logging/EnabledLogLevel.cs b/Src/SharpArch.Infrastructure/Logging/EnabledLogLevel.cs new file mode 100644 index 000000000..63471c91e --- /dev/null +++ b/Src/SharpArch.Infrastructure/Logging/EnabledLogLevel.cs @@ -0,0 +1,51 @@ +namespace SharpArch.Infrastructure.Logging +{ + using System; + using JetBrains.Annotations; + using Microsoft.Extensions.Logging; + + + /// + /// Logs with specific log level. + /// + [PublicAPI] + public readonly struct EnabledLogLevel + { + readonly ILogger _logger; + readonly LogLevel _level; + + /// + /// Constructor. + /// + /// Logger. + /// Log level to use. + internal EnabledLogLevel(ILogger logger, LogLevel level) + { + _logger = logger; + _level = level; + } + + /// + /// Logs message. + /// + /// Message template. + /// Template parameters. + public void Log(string message, params object[] args) + { + // ReSharper disable once TemplateIsNotCompileTimeConstantProblem + _logger.Log(_level, message, args); + } + + /// + /// Logs message. + /// + /// Exception to log. + /// Message template. + /// Template parameters. + public void Log(Exception? ex, string message, params object[] args) + { + // ReSharper disable once TemplateIsNotCompileTimeConstantProblem + _logger.Log(_level, ex, message, args); + } + } +} diff --git a/Src/SharpArch.Infrastructure/Logging/EnabledLogger.cs b/Src/SharpArch.Infrastructure/Logging/EnabledLogger.cs new file mode 100644 index 000000000..37c9749d0 --- /dev/null +++ b/Src/SharpArch.Infrastructure/Logging/EnabledLogger.cs @@ -0,0 +1,78 @@ +namespace SharpArch.Infrastructure.Logging +{ + using System; + using JetBrains.Annotations; + using Microsoft.Extensions.Logging; + + + /// + /// Skips call to to prevent unnecessary memory allocations. + /// + [PublicAPI] + public readonly struct LogWrapper + { + readonly ILogger _logger; + + /// + /// Constructor. + /// + /// Logger. + public LogWrapper(ILogger logger) + { + _logger = logger ?? throw new ArgumentNullException(nameof(logger)); + } + + /// + /// Logs that contain the most detailed messages. These messages may contain sensitive application data. + /// These messages are disabled by default and should never be enabled in a production environment. + /// + /// or null if specified log level is not enabled. + public EnabledLogLevel? Trace => _logger.IsEnabled(LogLevel.Trace) + ? new EnabledLogLevel(_logger, LogLevel.Trace) + : null; + + /// + /// Logs that are used for interactive investigation during development. These logs should primarily contain + /// information useful for debugging and have no long-term value. + /// + /// or null if specified log level is not enabled. + public EnabledLogLevel? Debug => _logger.IsEnabled(LogLevel.Trace) + ? new EnabledLogLevel(_logger, LogLevel.Debug) + : null; + + /// + /// Logs that track the general flow of the application. These logs should have long-term value. + /// + /// or null if specified log level is not enabled. + public EnabledLogLevel? Information => _logger.IsEnabled(LogLevel.Trace) + ? new EnabledLogLevel(_logger, LogLevel.Information) + : null; + + /// + /// Logs that highlight an abnormal or unexpected event in the application flow, but do not otherwise cause the + /// application execution to stop. + /// + /// or null if specified log level is not enabled. + public EnabledLogLevel? Warning => _logger.IsEnabled(LogLevel.Trace) + ? new EnabledLogLevel(_logger, LogLevel.Warning) + : null; + + /// + /// Logs that highlight when the current flow of execution is stopped due to a failure. These should indicate a + /// failure in the current activity, not an application-wide failure. + /// + /// or null if specified log level is not enabled. + public EnabledLogLevel? Error => _logger.IsEnabled(LogLevel.Trace) + ? new EnabledLogLevel(_logger, LogLevel.Error) + : null; + + /// + /// Logs that describe an unrecoverable application or system crash, or a catastrophic failure that requires + /// immediate attention. + /// + /// or null if specified log level is not enabled. + public EnabledLogLevel? Critical => _logger.IsEnabled(LogLevel.Trace) + ? new EnabledLogLevel(_logger, LogLevel.Critical) + : null; + } +} diff --git a/Src/SharpArch.Infrastructure/SharpArch.Infrastructure.csproj b/Src/SharpArch.Infrastructure/SharpArch.Infrastructure.csproj new file mode 100644 index 000000000..b5ca31253 --- /dev/null +++ b/Src/SharpArch.Infrastructure/SharpArch.Infrastructure.csproj @@ -0,0 +1,33 @@ + + + + Provides infrastrucure components for Sharp Architecture application. + $(PackageTags);infrastructure + icon.png + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Src/SharpArch.NHibernate.DependencyInjection/NHibernateRegistrationExtensions.cs b/Src/SharpArch.NHibernate.DependencyInjection/NHibernateRegistrationExtensions.cs new file mode 100644 index 000000000..7cc8707d8 --- /dev/null +++ b/Src/SharpArch.NHibernate.DependencyInjection/NHibernateRegistrationExtensions.cs @@ -0,0 +1,105 @@ +namespace SharpArch.NHibernate.Extensions.DependencyInjection +{ + using System; + using Domain.PersistenceSupport; + using global::NHibernate; + using Infrastructure.Logging; + using JetBrains.Annotations; + using Microsoft.Extensions.DependencyInjection; + + + /// + /// NHibernate supporting infrastructure registration helpers. + /// + [PublicAPI] + public static class NHibernateRegistrationExtensions + { + /// + /// Adds NHibernate classes required to support , + /// instantiation from container. + /// + /// and are registered as Singleton. + /// + /// + /// is registered as Scoped (e.g. per Http request for ASP.NET Core) + /// + /// + /// is transient. Since it does not tracks state, there is no reason to share it. + /// Stateless session must be disposed by caller + /// as soon as it is not used anymore. + /// + /// + /// + /// Repository registration needs to be done separately. + /// + /// Service collection. + /// + /// NHibernate session factory configuration. + /// Function should return instance, + /// is passed to allow retrieval of configuration. + /// + /// Optional callback to configure new session options. + /// Optional callback to configure new stateless session options. + /// + /// + /// + public static IServiceCollection AddNHibernateWithSingleDatabase( + this IServiceCollection services, Func configureSessionFactory, + Func? sessionConfigurator = null, + Func? statelessSessionConfigurator = null + ) + { + if (services == null) throw new ArgumentNullException(nameof(services)); + if (configureSessionFactory == null) throw new ArgumentNullException(nameof(configureSessionFactory)); + + services.AddSingleton(sp => + { + var logger = GetLogger(sp); + logger.Debug?.Log("Building session factory..."); + + var sfBuilder = configureSessionFactory(sp); + var sessionFactory = sfBuilder.BuildSessionFactory(); + + logger.Information?.Log("Build session factory {SessionFactoryId}", sessionFactory.GetHashCode()); + return sessionFactory; + }); + + services.AddScoped(sp => + { + var sessionFactory = sp.GetRequiredService(); + ISession session = sessionConfigurator == null + ? sessionFactory.OpenSession() + : sessionConfigurator(sessionFactory.WithOptions(), sp); + + GetLogger(sp).Debug?.Log("Created Session {SessionId}", session.GetSessionImplementation().SessionId); + + return session; + }); + + services.AddScoped(sp => + { + var sessionFactory = sp.GetRequiredService(); + IStatelessSession session = statelessSessionConfigurator == null + ? sessionFactory.OpenStatelessSession() + : statelessSessionConfigurator(sessionFactory.WithStatelessOptions(), sp); + + GetLogger(sp).Debug?.Log("Created stateless Session {SessionId}", session.GetSessionImplementation().SessionId); + + return session; + }); + + services.AddScoped(); + services.AddTransient(sp => sp.GetRequiredService()); + services.AddTransient(sp => sp.GetRequiredService()); + + return services; + } + + static LogWrapper GetLogger(IServiceProvider sp) + { + var logger = new LogWrapper(sp.GetRequiredService() + .CreateLogger("SharpArch.NHibernate.Extensions.DependencyInjection")); + return logger; + } + } +} diff --git a/Src/SharpArch.NHibernate.DependencyInjection/SharpArch.NHibernate.Extensions.DependencyInjection.csproj b/Src/SharpArch.NHibernate.DependencyInjection/SharpArch.NHibernate.Extensions.DependencyInjection.csproj new file mode 100644 index 000000000..4af044689 --- /dev/null +++ b/Src/SharpArch.NHibernate.DependencyInjection/SharpArch.NHibernate.Extensions.DependencyInjection.csproj @@ -0,0 +1,40 @@ + + + + + + + + Add NHibernate registration helpers for Microsoft Dependency Injecton. + $(PackageTags);dependency-injection + icon.png + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Src/SharpArch.NHibernate/Contracts/Repositories/INHibernateRepository.cs b/Src/SharpArch.NHibernate/Contracts/Repositories/INHibernateRepository.cs new file mode 100644 index 000000000..2d435e9bb --- /dev/null +++ b/Src/SharpArch.NHibernate/Contracts/Repositories/INHibernateRepository.cs @@ -0,0 +1,119 @@ +namespace SharpArch.NHibernate.Contracts.Repositories +{ + using System; + using System.Collections.Generic; + using System.Threading; + using System.Threading.Tasks; + using Domain; + using Domain.DomainModel; + using Domain.PersistenceSupport; + using global::NHibernate; + using JetBrains.Annotations; + + + /// + /// NHibernate-specific asynchronous repository extensions. + /// + /// Entity type/ + /// Entity identifier type. + /// + [PublicAPI] + public interface INHibernateRepository : IRepository + where TEntity : class, IEntity + where TId : IEquatable + { + /// + /// Looks for zero or more instances using the properties provided. + /// The key of the collection should be the property name and the value should be + /// the value of the property to filter by. + /// + /// Property name/value pairs to use as search criteria. + /// Maximum number of entities to return, if return all data. + /// Cancellation token. + /// is + /// No properties specified. + Task> FindAllAsync( + IReadOnlyDictionary propertyValuePairs, + int? maxResults = null, + CancellationToken cancellationToken = default); + + /// + /// Looks for zero or more instances using the example provided. + /// + /// Sample entity instance. + /// Names of properties to exclude from search criteria. + /// Maximum number of entities to return, if return all data. + /// Cancellation token. + Task> FindAllAsync( + TEntity exampleInstance, string[] propertiesToExclude, + int? maxResults = null, + CancellationToken cancellationToken = default); + + /// + /// Looks for a single instance using the example provided. + /// + /// + Task FindOneAsync(TEntity exampleInstance, CancellationToken cancellationToken, params string[] propertiesToExclude); + + /// + /// Looks for a single instance using the property/values provided. + /// + /// + /// Property name/value pairs to use as search criteria. + /// Cancellation token. + Task FindOneAsync(IReadOnlyDictionary propertyValuePairs, CancellationToken cancellationToken = default); + + /// + /// Returns null if a row is not found matching the provided Id. + /// + /// Entity identifier. + /// Row Lock mode. + /// Cancellation token. + Task GetAsync(TId id, Enums.LockMode lockMode, CancellationToken cancellationToken = default); + + /// + /// Return the persistent instance of the given entity class with the given identifier. + /// + /// Entity identifier. + /// Cancellation token. + Task LoadAsync(TId id, CancellationToken cancellationToken = default); + + /// + /// Return the persistent instance of the given entity class with the given identifier, obtaining the specified lock + /// mode. + /// + /// Entity identifier. + /// Row Lock mode. + /// Cancellation token. + Task LoadAsync(TId id, Enums.LockMode lockMode, CancellationToken cancellationToken = default); + + /// + /// Copy the state of the given object onto the persistent object with the same + /// identifier. + /// + /// If there is no persistent instance currently associated with + /// the session, it will be loaded. Return the persistent instance. + /// + /// + /// If the given instance is unsaved, save a copy of and return it as a newly persistent + /// instance. The given instance does not become associated with the session. + /// + /// + /// + /// a detached instance with state to be copied + /// Cancellation token. + /// An updated persistent instance. + Task MergeAsync(TEntity entity, CancellationToken cancellationToken = default); + + /// + /// For entities that have assigned Id's, you should explicitly call Update to update an existing one. + /// Updating also allows you to commit changes to a detached object. More info may be found at: + /// http://www.hibernate.org/hib_docs/nhibernate/html_single/#manipulatingdata-updating-detached + /// + /// Entity instance. + /// Cancellation token. + /// Entity instance. + /// is null. + Task UpdateAsync(TEntity entity, CancellationToken cancellationToken = default); + } +} diff --git a/Src/SharpArch.NHibernate/EntityDuplicateChecker.cs b/Src/SharpArch.NHibernate/EntityDuplicateChecker.cs new file mode 100644 index 000000000..c5587fe90 --- /dev/null +++ b/Src/SharpArch.NHibernate/EntityDuplicateChecker.cs @@ -0,0 +1,184 @@ +namespace SharpArch.NHibernate +{ + using System; + using System.Linq; + using System.Reflection; + using global::NHibernate; + using global::NHibernate.Criterion; + using JetBrains.Annotations; + using Domain.DomainModel; + using Domain.PersistenceSupport; + + /// + /// Checks if entity with the same domain signature already exists in the database. + /// + /// + /// + /// . + [PublicAPI] + public class EntityDuplicateChecker : IEntityDuplicateChecker + { + static readonly DateTime _uninitializedDatetime = default; + readonly ISession _session; + + /// + /// Initializes a new instance of the class. + /// + /// The session. + /// + public EntityDuplicateChecker(ISession session) + { + _session = session ?? throw new ArgumentNullException(nameof(session)); + } + + /// + /// Provides a behavior specific repository for checking if a duplicate exists of an existing entity. + /// + /// The entity. + /// + /// true if a duplicate exists, false otherwise. + /// + /// entity is null. + public bool DoesDuplicateExistWithTypedIdOf(IEntity entity) + { + if (entity == null) throw new ArgumentNullException(nameof(entity)); + + var sessionForEntity = GetSessionFor(entity); + + var previousFlushMode = sessionForEntity.FlushMode; + + // We do NOT want this to flush pending changes as checking for a duplicate should + // only compare the object against data that's already in the database + sessionForEntity.FlushMode = FlushMode.Manual; + try + { + var criteria = + sessionForEntity.CreateCriteria(entity.GetType()) + .Add(Restrictions.Not(Restrictions.Eq("id", entity.GetId()))) + .SetMaxResults(1); + + AppendSignaturePropertyCriteriaTo(criteria, entity); + var doesDuplicateExist = criteria.List().Count > 0; + return doesDuplicateExist; + } + finally { + sessionForEntity.FlushMode = previousFlushMode; + } + } + + static void AppendEntityIdCriteriaTo( + ICriteria criteria, string propertyName, object? propertyValue) + { + criteria.Add( + propertyValue != null + ? Restrictions.Eq(propertyName + ".id", ((IEntity) propertyValue).GetId()!) + : Restrictions.IsNull(propertyName + ".id")); + } + + static void AppendStringPropertyCriteriaTo( + ICriteria criteria, string propertyName, object? propertyValue) + { + criteria.Add( + propertyValue != null + ? Restrictions.InsensitiveLike(propertyName, propertyValue.ToString(), MatchMode.Exact) + : Restrictions.IsNull(propertyName)); + } + + static void AppendValuePropertyCriteriaTo( + ICriteria criteria, string propertyName, object? propertyValue) + { + criteria.Add( + propertyValue != null + ? Restrictions.Eq(propertyName, propertyValue) + : Restrictions.IsNull(propertyName)); + } + + ISession GetSessionFor(object entity) + { + return _session; + } + + static string GetPropertyName(string parentPropertyName, PropertyInfo signatureProperty) + { + if (string.IsNullOrEmpty(parentPropertyName)) { + return signatureProperty.Name; + } + + if (parentPropertyName.EndsWith(".") == false) { + parentPropertyName += "."; + } + + return string.Concat(parentPropertyName, signatureProperty.Name); + } + + static void AppendDateTimePropertyCriteriaTo(ICriteria criteria, string propertyName, object? propertyValue) + { + criteria.Add( + (propertyValue is null) || (DateTime) propertyValue > _uninitializedDatetime + ? Restrictions.Eq(propertyName, propertyValue) + : Restrictions.IsNull(propertyName)); + } + + static void AppendSignaturePropertyCriteriaTo(ICriteria criteria, IEntity entity) + { + foreach (var signatureProperty in entity.GetSignatureProperties()) { + var propertyType = signatureProperty.PropertyType; + var propertyValue = signatureProperty.GetValue(entity, null); + var propertyName = signatureProperty.Name; + + if (propertyType.GetInterfaces().Any( + x => x.IsGenericType && x.GetGenericTypeDefinition() == typeof(IEntity<>))) { + AppendEntityIdCriteriaTo(criteria, propertyName, propertyValue); + } + else if (typeof(ValueObject).IsAssignableFrom(propertyType)) { + AppendValueObjectSignaturePropertyCriteriaTo(criteria, entity.GetType(), propertyName, + propertyValue as ValueObject); + } + else { + AppendSimplePropertyCriteriaTo(criteria, entity.GetType(), propertyValue, propertyType, + propertyName); + } + } + } + + static void AppendValueObjectSignaturePropertyCriteriaTo(ICriteria criteria, Type entityType, + string valueObjectPropertyName, ValueObject? valueObject) + { + if (valueObject == null) { + return; + } + + foreach (PropertyInfo signatureProperty in valueObject.GetSignatureProperties()) { + Type propertyType = signatureProperty.PropertyType; + object? propertyValue = signatureProperty.GetValue(valueObject, null); + string propertyName = GetPropertyName(valueObjectPropertyName, signatureProperty); + + AppendSimplePropertyCriteriaTo(criteria, entityType, propertyValue, propertyType, propertyName); + } + } + + static void AppendSimplePropertyCriteriaTo( + ICriteria criteria, Type entityType, object? propertyValue, Type propertyType, string propertyName) + { + if (propertyType.IsEnum) { + criteria.Add(Restrictions.Eq(propertyName, (int) propertyValue!)); + } + else if (propertyType == typeof(DateTime)) { + AppendDateTimePropertyCriteriaTo(criteria, propertyName, propertyValue); + } + else if (propertyType == typeof(string)) { + AppendStringPropertyCriteriaTo(criteria, propertyName, propertyValue); + } + else if (propertyType.IsValueType) { + AppendValuePropertyCriteriaTo(criteria, propertyName, propertyValue); + } + else { + throw new InvalidOperationException( + "Can't determine how to use " + entityType + "." + propertyName + + " when looking for duplicate entries. To remedy this, " + + "you can create a custom validator or report an issue to the S#arp Architecture " + + "project, detailing the type that you'd like to be accommodated."); + } + } + } +} diff --git a/Src/SharpArch.NHibernate/FluentNHibernate/AutomappingConfiguration.cs b/Src/SharpArch.NHibernate/FluentNHibernate/AutomappingConfiguration.cs new file mode 100644 index 000000000..548591a71 --- /dev/null +++ b/Src/SharpArch.NHibernate/FluentNHibernate/AutomappingConfiguration.cs @@ -0,0 +1,58 @@ +namespace SharpArch.NHibernate.FluentNHibernate +{ + using System; + using System.Linq; + using Domain.DomainModel; + using global::FluentNHibernate.Automapping; + using JetBrains.Annotations; + + + /// + /// Applies custom mapping conventions to S#Arch entities. + /// + /// + /// + /// + /// Following rules are applied: + /// + /// + /// ID + /// Property with name Id will be mapped to entity ID. + /// + /// + /// Component + /// descendants will be mapped as Components. + /// + /// + /// + /// + /// + /// + [PublicAPI] + public class AutomappingConfiguration : DefaultAutomappingConfiguration + { + /// + /// Checks if given type is S#Arch entity. + /// + public override bool ShouldMap(Type type) + { + return !type.IsNested && type.GetInterfaces().Any(x => + x.IsGenericType && + x.GetGenericTypeDefinition() == typeof(IEntity<>)); + } + + /// + /// Marks all descendants as components. + /// See https://martinfowler.com/eaaCatalog/valueObject.html + /// + public override bool IsComponent(Type type) + => typeof(ValueObject).IsAssignableFrom(type); + + /// + /// Marks all abstract descendants of as Layer Supertype. + /// See http://martinfowler.com/eaaCatalog/layerSupertype.html + /// + public override bool AbstractClassIsLayerSupertype(Type type) + => type == typeof(Entity<>); + } +} diff --git a/Src/SharpArch.NHibernate/FluentNHibernate/Conventions/CustomForeignKeyConvention.cs b/Src/SharpArch.NHibernate/FluentNHibernate/Conventions/CustomForeignKeyConvention.cs new file mode 100644 index 000000000..1c9ef78b4 --- /dev/null +++ b/Src/SharpArch.NHibernate/FluentNHibernate/Conventions/CustomForeignKeyConvention.cs @@ -0,0 +1,28 @@ +namespace SharpArch.NHibernate.FluentNHibernate.Conventions +{ + using System; + using global::FluentNHibernate; + using global::FluentNHibernate.Conventions; + using JetBrains.Annotations; + + + /// + /// Foreign key convention. + /// + /// + [PublicAPI] + public class CustomForeignKeyConvention : ForeignKeyConvention + { + /// + /// Generates Foreign Key name. + /// + protected override string GetKeyName(Member property, Type type) + { + if (property == null) { + return type.Name + "Id"; + } + + return property.Name + "Id"; + } + } +} diff --git a/Src/SharpArch.NHibernate/FluentNHibernate/Conventions/HasManyConvention.cs b/Src/SharpArch.NHibernate/FluentNHibernate/Conventions/HasManyConvention.cs new file mode 100644 index 000000000..486196610 --- /dev/null +++ b/Src/SharpArch.NHibernate/FluentNHibernate/Conventions/HasManyConvention.cs @@ -0,0 +1,48 @@ +namespace SharpArch.NHibernate.FluentNHibernate.Conventions +{ + using global::FluentNHibernate.Conventions; + using global::FluentNHibernate.Conventions.Instances; + using JetBrains.Annotations; + + + /// + /// One-to-many convention. + /// + /// + /// + /// + /// Following conventions are applied: + /// + /// + /// + /// Cascades + /// + /// + /// All, delete orphan. + /// + /// + /// + /// Inverse + /// + /// + /// Foreign Key + /// Entity name + Id. E.g. ColorId + /// + /// + /// + /// + [PublicAPI] + public class HasManyConvention : IHasManyConvention + { + /// + /// Applies convention. + /// + /// The instance. + public void Apply(IOneToManyCollectionInstance instance) + { + instance.Key.Column(instance.EntityType.Name + "Id"); + instance.Cascade.AllDeleteOrphan(); + instance.Inverse(); + } + } +} diff --git a/Src/SharpArch.NHibernate/FluentNHibernate/Conventions/PrimaryKeyConvention.cs b/Src/SharpArch.NHibernate/FluentNHibernate/Conventions/PrimaryKeyConvention.cs new file mode 100644 index 000000000..e78b96814 --- /dev/null +++ b/Src/SharpArch.NHibernate/FluentNHibernate/Conventions/PrimaryKeyConvention.cs @@ -0,0 +1,26 @@ +namespace SharpArch.NHibernate.FluentNHibernate.Conventions +{ + using global::FluentNHibernate.Conventions; + using global::FluentNHibernate.Conventions.Instances; + using JetBrains.Annotations; + + + /// + /// Primary Key convention. + /// + /// + /// Defines Primary Key name as EntityType+Id. E.c. ColorId + /// + /// + [PublicAPI] + public class PrimaryKeyConvention : IIdConvention + { + /// + /// Applies convention. + /// + public void Apply(IIdentityInstance instance) + { + instance.Column(instance.EntityType.Name + "Id"); + } + } +} diff --git a/Src/SharpArch.NHibernate/FluentNHibernate/Conventions/TableNameConvention.cs b/Src/SharpArch.NHibernate/FluentNHibernate/Conventions/TableNameConvention.cs new file mode 100644 index 000000000..c3aafe502 --- /dev/null +++ b/Src/SharpArch.NHibernate/FluentNHibernate/Conventions/TableNameConvention.cs @@ -0,0 +1,24 @@ +namespace SharpArch.NHibernate.FluentNHibernate.Conventions +{ + using global::FluentNHibernate.Conventions; + using global::FluentNHibernate.Conventions.Instances; + using JetBrains.Annotations; + + + /// + /// Table name convention. + /// + /// Defines table name to match entity name. E.g.: Color. + /// + [PublicAPI] + public class TableNameConvention : IClassConvention + { + /// + /// Applies convention. + /// + public void Apply(IClassInstance instance) + { + instance.Table(instance.EntityType.Name); + } + } +} diff --git a/Src/SharpArch.NHibernate/FluentNHibernate/FluentNHibernateExtensions.cs b/Src/SharpArch.NHibernate/FluentNHibernate/FluentNHibernateExtensions.cs new file mode 100644 index 000000000..a996f59aa --- /dev/null +++ b/Src/SharpArch.NHibernate/FluentNHibernate/FluentNHibernateExtensions.cs @@ -0,0 +1,53 @@ +namespace SharpArch.NHibernate.FluentNHibernate +{ + using System; + using System.Linq; + using System.Runtime.CompilerServices; + using global::FluentNHibernate; + using global::FluentNHibernate.Cfg; + using global::FluentNHibernate.Mapping; + using global::FluentNHibernate.Mapping.Providers; + using JetBrains.Annotations; + + + /// + /// Fluent NHibernate mappings extensions. + /// + [PublicAPI] + public static class FluentNHibernateExtensions + { + /// + /// Adds mappings from the assembly and namespace specified by . + /// + /// + /// This method is useful when multiple databases are mapped from the same assembly + /// as it allows to separate mappings by namespace. + /// + /// Type to use as assembly and namespace filter. + /// Mappings container + /// Container + /// is null. + public static FluentMappingsContainer AddFromNamespaceOf(this FluentMappingsContainer mappingsContainer) + { + if (mappingsContainer == null) throw new ArgumentNullException(nameof(mappingsContainer)); + string ns = typeof(T).Namespace!; + var types = typeof(T).Assembly.GetTypes() + .Where(t => !t.IsAbstract && t.Namespace == ns) + .Where(x => IsMappingOf(x) || + IsMappingOf(x) || + IsMappingOf(x) || + IsMappingOf(x)); + + foreach (var t in types) + { + mappingsContainer.Add(t); + } + + return mappingsContainer; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + static bool IsMappingOf(Type type) + => !type.IsGenericType && typeof(T).IsAssignableFrom(type); + } +} diff --git a/Src/SharpArch.NHibernate/FluentNHibernate/GeneratorHelper.cs b/Src/SharpArch.NHibernate/FluentNHibernate/GeneratorHelper.cs new file mode 100644 index 000000000..e32d0740e --- /dev/null +++ b/Src/SharpArch.NHibernate/FluentNHibernate/GeneratorHelper.cs @@ -0,0 +1,32 @@ +namespace SharpArch.NHibernate.FluentNHibernate +{ + using System; + using System.Linq; + using JetBrains.Annotations; + + + /// + /// An optional helper class used to view the mapping file generated from a fluent nhibernate class mapper + /// + /// + /// This is not necessary for Fluent Nhibernate to function properly. + /// + [PublicAPI] + public class GeneratorHelper + { + const string GeneratorInterface = nameof(IMapGenerator); + + /// + /// Scans assembly for IMapGenerator implementers. + /// + /// + public static IMapGenerator[] GetMapGenerators() + { + var assembly = typeof(IMapGenerator).Assembly; + + return (from type in assembly.GetTypes() + where null != type.GetInterface(GeneratorInterface) + select Activator.CreateInstance(type)).OfType().ToArray(); + } + } +} diff --git a/Src/SharpArch.NHibernate/FluentNHibernate/IAutoPersistenceModelGenerator.cs b/Src/SharpArch.NHibernate/FluentNHibernate/IAutoPersistenceModelGenerator.cs new file mode 100644 index 000000000..34b7335fe --- /dev/null +++ b/Src/SharpArch.NHibernate/FluentNHibernate/IAutoPersistenceModelGenerator.cs @@ -0,0 +1,23 @@ +namespace SharpArch.NHibernate.FluentNHibernate +{ + using global::FluentNHibernate.Automapping; + using JetBrains.Annotations; + + + /// + /// Fluent NHibernate auto-mapping model generator. + /// + /// + /// Interface implementors will be automatically executed by TestDatabaseInitializer during test database + /// initialization. + /// + [PublicAPI] + public interface IAutoPersistenceModelGenerator + { + /// + /// Generates persistence model. + /// + + AutoPersistenceModel Generate(); + } +} diff --git a/Src/SharpArch.NHibernate/FluentNHibernate/IMapGenerator.cs b/Src/SharpArch.NHibernate/FluentNHibernate/IMapGenerator.cs new file mode 100644 index 000000000..5f1d76365 --- /dev/null +++ b/Src/SharpArch.NHibernate/FluentNHibernate/IMapGenerator.cs @@ -0,0 +1,31 @@ +namespace SharpArch.NHibernate.FluentNHibernate +{ + using System.Xml; + using JetBrains.Annotations; + + + /// + /// Facilitates the visitor pattern for to spit out the NHibernate + /// XML for the class. + /// To use, have your mapper implement this interface. Then, simply include the following line within + /// Generate(): return CreateMapping(new MappingVisitor()); + /// Now you can call Generate on your mapper class to view the generated XML. + /// + /// + /// This is not necessary for Fluent Nhibernate to function properly. + /// + [PublicAPI] + public interface IMapGenerator + { + /// + /// File name. + /// + string FileName { get; } + + /// + /// Generates XML mapping document. + /// + + XmlDocument Generate(); + } +} diff --git a/Src/SharpArch.NHibernate/INHibernateTransactionManager.cs b/Src/SharpArch.NHibernate/INHibernateTransactionManager.cs new file mode 100644 index 000000000..c40576cb4 --- /dev/null +++ b/Src/SharpArch.NHibernate/INHibernateTransactionManager.cs @@ -0,0 +1,24 @@ +namespace SharpArch.NHibernate +{ + using System.Threading; + using System.Threading.Tasks; + using Domain.PersistenceSupport; + using global::NHibernate; + + + /// + /// NHibernate transaction support. + /// + public interface INHibernateTransactionManager : ITransactionManager + { + /// + /// Returns NHibernate session. + /// + ISession Session { get; } + + /// + /// Flushes everything that has been changed since the last commit. + /// + Task FlushChangesAsync(CancellationToken cancellationToken = default); + } +} diff --git a/Src/SharpArch.NHibernate/ISessionFactoryKeyProvider.cs b/Src/SharpArch.NHibernate/ISessionFactoryKeyProvider.cs new file mode 100644 index 000000000..88f3569b6 --- /dev/null +++ b/Src/SharpArch.NHibernate/ISessionFactoryKeyProvider.cs @@ -0,0 +1,27 @@ +namespace SharpArch.NHibernate +{ + using JetBrains.Annotations; + + + /// + /// Provides the key to retrieve session factory from IoC. + /// + [PublicAPI] + public interface ISessionFactoryKeyProvider + { + /// + /// Gets the session factory key. + /// + /// + + string GetKey(); + + /// + /// Gets the session factory key. + /// + /// An optional object that may have an attribute used to determine the session factory key. + /// + + string GetKeyFrom(object anObject); + } +} \ No newline at end of file diff --git a/Src/SharpArch.NHibernate/LinqRepository.cs b/Src/SharpArch.NHibernate/LinqRepository.cs new file mode 100644 index 000000000..1e63c53ed --- /dev/null +++ b/Src/SharpArch.NHibernate/LinqRepository.cs @@ -0,0 +1,59 @@ +namespace SharpArch.NHibernate +{ + using System; + using System.Linq; + using System.Threading; + using System.Threading.Tasks; + using Domain.DomainModel; + using Domain.PersistenceSupport; + using Domain.Specifications; + using global::NHibernate.Linq; + using JetBrains.Annotations; + + + /// + /// LINQ extensions to NHibernate repository. + /// + /// Entity type. + /// The type of the identifier. + /// + /// + [PublicAPI] + public class LinqRepository : NHibernateRepository, ILinqRepository + where TEntity : class, IEntity + where TId: IEquatable + { + /// + /// Initializes a new instance of the class. + /// + /// The transaction manager. + public LinqRepository(INHibernateTransactionManager transactionManager) + : base(transactionManager) + { + } + + /// + public Task FindOneAsync(TId id, CancellationToken cancellationToken = default) + { + return Session.GetAsync(id, cancellationToken); + } + + /// + public Task FindOneAsync(ILinqSpecification specification, CancellationToken cancellationToken = default) + { + return specification.SatisfyingElementsFrom(Session.Query()).SingleOrDefaultAsync(cancellationToken)!; + } + + /// + public IQueryable FindAll() + { + return Session.Query(); + } + + /// + public IQueryable FindAll(ILinqSpecification specification) + { + return specification.SatisfyingElementsFrom(Session.Query()); + } + } +} diff --git a/Src/SharpArch.NHibernate/LockModeConvertExtensions.cs b/Src/SharpArch.NHibernate/LockModeConvertExtensions.cs new file mode 100644 index 000000000..715612f19 --- /dev/null +++ b/Src/SharpArch.NHibernate/LockModeConvertExtensions.cs @@ -0,0 +1,58 @@ +namespace SharpArch.NHibernate +{ + using System; + using System.Collections.Generic; + using Domain; + using global::NHibernate; + using JetBrains.Annotations; + + + /// + /// Converter between and . + /// + [PublicAPI] + public static class LockModeConvertExtensions + { + static readonly IReadOnlyDictionary _nHibernateToSharpArchMap = new Dictionary(5) + { + [LockMode.None] = Enums.LockMode.None, + [LockMode.Read] = Enums.LockMode.Read, + [LockMode.Upgrade] = Enums.LockMode.Upgrade, + [LockMode.UpgradeNoWait] = Enums.LockMode.UpgradeNoWait, + [LockMode.Write] = Enums.LockMode.Write + }; + + /// + /// Translates a domain layer lock mode into an NHibernate lock mode. + /// This is provided to facilitate developing the domain layer without a direct dependency on the + /// NHibernate assembly. + /// + public static LockMode ToNHibernate(this Enums.LockMode lockMode) + => lockMode switch + { + Enums.LockMode.None => LockMode.None, + Enums.LockMode.Read => LockMode.Read, + Enums.LockMode.Upgrade => LockMode.Upgrade, + Enums.LockMode.UpgradeNoWait => LockMode.UpgradeNoWait, + Enums.LockMode.Write => LockMode.Write, + _ => throw new ArgumentOutOfRangeException(nameof(lockMode), lockMode, + $"The provided lock mode , '{lockMode}', could not be translated into an NHibernate.LockMode. " + + "This is probably because NHibernate was updated and now has different lock modes " + + "which are out of synch with the lock modes maintained in the domain layer.") + }; + + /// + /// Translates an NHibernate lock mode into a domain layer lock mode. + /// This is provided to facilitate developing the domain layer without a direct dependency on the + /// NHibernate assembly. + /// + public static Enums.LockMode ToNHibernate(this LockMode lockMode) + { + if (_nHibernateToSharpArchMap.TryGetValue(lockMode, out var convertedMode)) return convertedMode; + throw new ArgumentOutOfRangeException(nameof(lockMode), lockMode, + $"The provided lock mode , '{lockMode}', could not be translated into an SharpArch.LockMode. " + + "This is probably because NHibernate was updated and now has different lock modes " + + "which are out of synch with the lock modes maintained in the domain layer."); + } + } +} diff --git a/Src/SharpArch.NHibernate/NHibernateQuery.cs b/Src/SharpArch.NHibernate/NHibernateQuery.cs new file mode 100644 index 000000000..0093d5a22 --- /dev/null +++ b/Src/SharpArch.NHibernate/NHibernateQuery.cs @@ -0,0 +1,31 @@ +namespace SharpArch.NHibernate +{ + using System; + using global::NHibernate; + using JetBrains.Annotations; + + /// + /// Base class for NHibernate query objects. + /// + [PublicAPI] + public abstract class NHibernateQuery + { + /// + /// Initializes a new instance of the class. + /// + /// The session. + /// is null. + protected NHibernateQuery(ISession session) + { + if (session == null) throw new ArgumentNullException(nameof(session)); + + this.Session = session; + } + + /// + /// NHibernate . + /// + + protected virtual ISession Session { get; } + } +} diff --git a/Src/SharpArch.NHibernate/NHibernateRepositoryBase.cs b/Src/SharpArch.NHibernate/NHibernateRepositoryBase.cs new file mode 100644 index 000000000..b37bb783c --- /dev/null +++ b/Src/SharpArch.NHibernate/NHibernateRepositoryBase.cs @@ -0,0 +1,176 @@ +namespace SharpArch.NHibernate +{ + using System; + using System.Collections.Generic; + using System.Threading; + using System.Threading.Tasks; + using Contracts.Repositories; + using Domain; + using Domain.DomainModel; + using Domain.PersistenceSupport; + using global::NHibernate; + using global::NHibernate.Criterion; + using JetBrains.Annotations; + + + /// + /// Provides a fully loaded DAO. + /// + /// Entity type. + /// Entity identifier type. + [PublicAPI] + public class NHibernateRepository : INHibernateRepository + where TEntity : class, IEntity + where TId : IEquatable + { + /// + /// Gets NHibernate session. + /// + + protected ISession Session => TransactionManager.Session; + + /// + /// Returns the database context, which provides a handle to application wide DB + /// activities such as committing any pending changes, beginning a transaction, + /// rolling back a transaction, etc. + /// + + protected INHibernateTransactionManager TransactionManager { get; } + + /// + /// Initializes a new instance of the class. + /// + /// The transaction manager. + /// + public NHibernateRepository( + INHibernateTransactionManager transactionManager) + { + TransactionManager = transactionManager ?? throw new ArgumentNullException(nameof(transactionManager)); + } + + /// + public Task GetAsync(TId id, CancellationToken cancellationToken = default) + => Session.GetAsync(id, cancellationToken); + + /// + public Task> GetAllAsync(CancellationToken cancellationToken = default) + { + ICriteria criteria = Session.CreateCriteria(typeof(TEntity)); + return criteria.ListAsync(cancellationToken); + } + + /// + public async Task SaveAsync(TEntity entity, CancellationToken cancellationToken = default) + { + await Session.SaveAsync(entity, cancellationToken).ConfigureAwait(false); + return entity; + } + + /// + public async Task SaveOrUpdateAsync(TEntity entity, CancellationToken cancellationToken = default) + { + await Session.SaveOrUpdateAsync(entity, cancellationToken).ConfigureAwait(false); + return entity; + } + + /// + public Task EvictAsync(TEntity entity, CancellationToken cancellationToken = default) + => Session.EvictAsync(entity, cancellationToken); + + /// + public Task DeleteAsync(TEntity entity, CancellationToken cancellationToken = default) + => Session.DeleteAsync(entity, cancellationToken); + + /// + public async Task DeleteAsync(TId id, CancellationToken cancellationToken = default) + { + var entity = await GetAsync(id, cancellationToken).ConfigureAwait(false); + if (entity != null) await DeleteAsync(entity, cancellationToken).ConfigureAwait(false); + } + + ITransactionManager IRepository.TransactionManager => TransactionManager; + + /// + public virtual Task> FindAllAsync( + IReadOnlyDictionary propertyValuePairs, + int? maxResults = null, + CancellationToken cancellationToken = default) + { + if (propertyValuePairs == null) throw new ArgumentNullException(nameof(propertyValuePairs)); + if (propertyValuePairs.Count == 0) + throw new ArgumentException("No properties specified. Please specify at least one property/value pair.", + nameof(propertyValuePairs)); + + ICriteria criteria = Session.CreateCriteria(typeof(TEntity)); + foreach (string key in propertyValuePairs.Keys) + { + criteria.Add(propertyValuePairs[key] != null + ? Restrictions.Eq(key, propertyValuePairs[key]) + : Restrictions.IsNull(key)); + } + + if (maxResults.HasValue) criteria.SetMaxResults(maxResults.Value); + return criteria.ListAsync(cancellationToken); + } + + /// + public Task> FindAllAsync( + TEntity exampleInstance, string[] propertiesToExclude, int? maxResults = null, CancellationToken cancellationToken = default) + { + ICriteria criteria = Session.CreateCriteria(typeof(TEntity)); + Example example = Example.Create(exampleInstance); + + foreach (string propertyToExclude in propertiesToExclude) example.ExcludeProperty(propertyToExclude); + + criteria.Add(example); + + if (maxResults.HasValue) criteria.SetMaxResults(maxResults.Value); + + return criteria.ListAsync(cancellationToken); + } + + /// + public virtual async Task FindOneAsync(TEntity exampleInstance, CancellationToken ct, params string[] propertiesToExclude) + { + IList foundList = await FindAllAsync(exampleInstance, propertiesToExclude, 2, ct).ConfigureAwait(false); + if (foundList.Count > 1) throw new NonUniqueResultException(foundList.Count); + + return foundList.Count == 1 ? foundList[0] : default; + } + + /// + public async Task FindOneAsync( + IReadOnlyDictionary propertyValuePairs, + CancellationToken cancellationToken = default) + { + var foundList = await FindAllAsync(propertyValuePairs, 2, cancellationToken).ConfigureAwait(false); + if (foundList.Count > 1) throw new NonUniqueResultException(foundList.Count); + + return foundList.Count == 1 ? foundList[0] : default; + } + + /// + public virtual Task GetAsync(TId id, Enums.LockMode lockMode, CancellationToken ct) + => Session.GetAsync(id, lockMode.ToNHibernate(), ct); + + /// + public virtual Task LoadAsync(TId id, CancellationToken ct) + => Session.LoadAsync(id, ct); + + /// + public virtual Task LoadAsync(TId id, Enums.LockMode lockMode, CancellationToken ct) + => Session.LoadAsync(id, lockMode.ToNHibernate(), ct); + + /// + public Task MergeAsync(TEntity entity, CancellationToken cancellationToken = default) + => Session.MergeAsync(entity, cancellationToken); + + /// + public virtual async Task UpdateAsync(TEntity entity, CancellationToken ct) + { + await Session.UpdateAsync(entity, ct).ConfigureAwait(false); + return entity; + } + + } +} diff --git a/Src/SharpArch.NHibernate/NHibernateSessionFactoryBuilder.cs b/Src/SharpArch.NHibernate/NHibernateSessionFactoryBuilder.cs new file mode 100644 index 000000000..414f96d31 --- /dev/null +++ b/Src/SharpArch.NHibernate/NHibernateSessionFactoryBuilder.cs @@ -0,0 +1,300 @@ +namespace SharpArch.NHibernate +{ + using System; + using System.Collections.Generic; + using System.ComponentModel.DataAnnotations; + using System.IO; + using System.Reflection; + using global::FluentNHibernate.Automapping; + using global::FluentNHibernate.Cfg; + using global::FluentNHibernate.Cfg.Db; + using global::NHibernate; + using global::NHibernate.Cfg; + using JetBrains.Annotations; + using NHibernateValidator; + + + /// + /// Creates NHibernate SessionFactory + /// + /// + /// Transient object, session factory must be registered as singleton in DI Container. + /// + [PublicAPI] + public class NHibernateSessionFactoryBuilder + { + /// + /// Default configuration file name. + /// + public const string DefaultNHibernateConfigFileName = @"hibernate.cfg.xml"; + + /// + /// Default NHibernate session factory key. + /// + public static readonly string DefaultConfigurationName = "nhibernate.current_session"; + + readonly List _mappingAssemblies; + + AutoPersistenceModel? _autoPersistenceModel; + string? _configFile; + + Action? _exposeConfiguration; + IPersistenceConfigurer? _persistenceConfigurer; + IDictionary? _properties; + bool _useDataAnnotationValidators; + Action? _cacheSettingsBuilder; + + /// + /// Initializes a new instance of the class. + /// + public NHibernateSessionFactoryBuilder() + { + _mappingAssemblies = new List(8); + } + + /// + /// Creates the session factory. + /// + /// NHibernate session factory . + public ISessionFactory BuildSessionFactory() + { + var configuration = BuildConfiguration(); + return configuration.BuildSessionFactory(); + } + + /// + /// Builds NHibernate configuration. + /// + /// No dependencies were specified + public Configuration BuildConfiguration() + { + var configuration = LoadExternalConfiguration(); + configuration = ApplyCustomSettings(configuration); + + return configuration; + } + + /// + /// Allows to alter configuration before creating NHibernate configuration. + /// + /// + /// Changes to configuration will be persisted in configuration cache, if it is enabled. + /// In case changes must not be persisted in cache, they must be applied after . + /// + public NHibernateSessionFactoryBuilder ExposeConfiguration(Action config) + { + _exposeConfiguration = config ?? throw new ArgumentNullException(nameof(config)); + return this; + } + + bool ShouldExposeConfiguration() + { + return _exposeConfiguration != null; + } + + + /// + /// Allows to specify additional assemblies containing FluentNHibernate mappings. + /// + /// The mapping assemblies. + /// + /// Mapping assemblies are not specified. + + public NHibernateSessionFactoryBuilder AddMappingAssemblies(IEnumerable mappingAssemblies) + { + if (mappingAssemblies == null) throw new ArgumentNullException(nameof(mappingAssemblies), "Mapping assemblies are not specified."); + + _mappingAssemblies.AddRange(mappingAssemblies); + return this; + } + + + /// + /// Allows to specify FluentNhibernate auto-persistence model to use.. + /// + /// The automatic persistence model. + /// + /// + + public NHibernateSessionFactoryBuilder UseAutoPersistenceModel( + AutoPersistenceModel autoPersistenceModel) + { + _autoPersistenceModel = autoPersistenceModel ?? throw new ArgumentNullException(nameof(autoPersistenceModel)); + return this; + } + + /// + /// Allows to specify additional NHibernate properties, see + /// http://nhibernate.info/doc/nhibernate-reference/session-configuration.html. + /// + /// The properties. + /// Builder instance. + /// is null. + + public NHibernateSessionFactoryBuilder UseProperties(IEnumerable> properties) + { + if (properties == null) throw new ArgumentNullException(nameof(properties)); + + if (_properties == null) + _properties = new Dictionary(64); + foreach (var pair in properties) + { + _properties[pair.Key] = pair.Value; + } + return this; + } + + /// + /// Allows to use Data Annotations and to validate entities before insert/update. + /// + /// + /// See https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations%28v=vs.110%29.aspx for details + /// about Data Annotations. + /// + /// . + + public NHibernateSessionFactoryBuilder UseDataAnnotationValidators(bool addDataAnnotationValidators) + { + _useDataAnnotationValidators = addDataAnnotationValidators; + return this; + } + + /// + /// Allows to specify nhibernate configuration file. + /// + /// + /// See http://nhibernate.info/doc/nhibernate-reference/session-configuration.html#configuration-xmlconfig for more + /// details + /// + /// NHibernate config was not specified. + + public NHibernateSessionFactoryBuilder UseConfigFile(string nhibernateConfigFile) + { + if (string.IsNullOrWhiteSpace(nhibernateConfigFile)) + throw new ArgumentException("NHibernate config was not specified.", nameof(nhibernateConfigFile)); + + _configFile = nhibernateConfigFile; + + return this; + } + + /// + /// Allows to configure second-level cache. + /// + /// Cache settings configuration. Use null to clear previous setting. + + public NHibernateSessionFactoryBuilder UseCache(Action? cacheSettingsBuilder) + { + _cacheSettingsBuilder = cacheSettingsBuilder; + return this; + } + + /// + /// Allows to specify custom configuration using . + /// + /// The persistence configurer. + /// + /// + /// var persistenceConfigurer = + /// SQLiteConfiguration.Standard.ConnectionString(c => c.Is("Data Source=:memory:;Version=3;New=True;")); + /// var configuration = new NHibernateSessionFactoryBuilder() + /// .UsePersistenceConfigurer(persistenceConfigurer); + /// + /// + /// is null. + + public NHibernateSessionFactoryBuilder UsePersistenceConfigurer( + IPersistenceConfigurer persistenceConfigurer) + { + _persistenceConfigurer = persistenceConfigurer ?? throw new ArgumentNullException(nameof(persistenceConfigurer)); + return this; + } + + Configuration ApplyCustomSettings(Configuration cfg) + { + var fluentConfig = Fluently.Configure(cfg); + if (_persistenceConfigurer != null) + { + fluentConfig.Database(_persistenceConfigurer); + } + + if (_cacheSettingsBuilder != null) + { + fluentConfig.Cache(_cacheSettingsBuilder); + } + + fluentConfig.Mappings(m => + { + foreach (var mappingAssembly in _mappingAssemblies) + { + m.HbmMappings.AddFromAssembly(mappingAssembly); + m.FluentMappings.AddFromAssembly(mappingAssembly).Conventions.AddAssembly(mappingAssembly); + } + + if (_autoPersistenceModel != null) + { + m.AutoMappings.Add(_autoPersistenceModel); + } + }); + + if (_useDataAnnotationValidators || ShouldExposeConfiguration()) + { + fluentConfig.ExposeConfiguration(AddValidatorsAndExposeConfiguration); + } + + return fluentConfig.BuildConfiguration(); + } + + void AddValidatorsAndExposeConfiguration(Configuration e) + { + if (_useDataAnnotationValidators) + { + var dataAnnotationsEventListener = new DataAnnotationsEventListener(); + e.EventListeners.PreInsertEventListeners = InsertFirst(e.EventListeners.PreInsertEventListeners, dataAnnotationsEventListener); + e.EventListeners.PreUpdateEventListeners = InsertFirst(e.EventListeners.PreUpdateEventListeners, dataAnnotationsEventListener); + } + + if (ShouldExposeConfiguration()) + { + _exposeConfiguration!(e); + } + } + + /// + /// Loads configuration from properties dictionary and from external file if available. + /// + /// + Configuration LoadExternalConfiguration() + { + var cfg = new Configuration(); + if (_properties != null && _properties.Count > 0) + { + cfg.AddProperties(_properties); + } + + if (!string.IsNullOrEmpty(_configFile) && !string.Equals(_configFile, DefaultConfigurationName, StringComparison.OrdinalIgnoreCase)) + { + return cfg.Configure(_configFile); + } + + if (File.Exists(DefaultNHibernateConfigFileName)) + { + return cfg.Configure(); + } + + return cfg; + } + + static T[] InsertFirst(T[]? array, T item) + { + if (array == null) + { + return new[] {item}; + } + + var items = new List(array.Length + 1) {item}; + items.AddRange(array); + return items.ToArray(); + } + } +} diff --git a/Src/SharpArch.NHibernate/NHibernateValidator/DataAnnotationsEventListener.cs b/Src/SharpArch.NHibernate/NHibernateValidator/DataAnnotationsEventListener.cs new file mode 100644 index 000000000..dcc8d62f3 --- /dev/null +++ b/Src/SharpArch.NHibernate/NHibernateValidator/DataAnnotationsEventListener.cs @@ -0,0 +1,76 @@ +namespace SharpArch.NHibernate.NHibernateValidator +{ + using System; + using System.ComponentModel.DataAnnotations; + using System.Threading; + using System.Threading.Tasks; + using global::NHibernate.Event; + + using Domain.DomainModel; + using global::NHibernate; + + /// + /// Performs entity validation using class. + /// + [Serializable] + class DataAnnotationsEventListener : IPreUpdateEventListener, IPreInsertEventListener + { + static readonly Task _false = Task.FromResult(false); + + class SessionProvider : IServiceProvider + { + readonly ISession _session; + + public SessionProvider(ISession session) + { + _session = session; + } + + public object? GetService(Type serviceType) + { + if (serviceType == typeof (ISession)) + { + return _session; + } + return null; + } + } + + public Task OnPreUpdateAsync(PreUpdateEvent @event, CancellationToken cancellationToken) + { + OnPreUpdate(@event); + return _false; + } + + public bool OnPreUpdate(PreUpdateEvent @event) + { + if (@event.Entity is ValidatableObject) + { + var entity = @event.Entity; + Validator.ValidateObject(entity, CreateValidationContext(@event, entity), true); + } + return false; + } + + static ValidationContext CreateValidationContext(IDatabaseEventArgs @event, object entity) + { + return new ValidationContext(entity, new SessionProvider(@event.Session), null); + } + + public Task OnPreInsertAsync(PreInsertEvent @event, CancellationToken cancellationToken) + { + OnPreInsert(@event); + return _false; + } + + public bool OnPreInsert(PreInsertEvent @event) + { + if (@event.Entity is ValidatableObject) + { + var entity = @event.Entity; + Validator.ValidateObject(entity, CreateValidationContext(@event, entity), true); + } + return false; + } + } +} diff --git a/Src/SharpArch.NHibernate/SessionExtensions.cs b/Src/SharpArch.NHibernate/SessionExtensions.cs new file mode 100644 index 000000000..53b47e98c --- /dev/null +++ b/Src/SharpArch.NHibernate/SessionExtensions.cs @@ -0,0 +1,153 @@ +namespace SharpArch.NHibernate +{ + using System; + using System.Threading; + using System.Threading.Tasks; + using global::NHibernate; + using global::NHibernate.Engine; + using JetBrains.Annotations; + + + /// + /// NHibernate extension methods. + /// + [PublicAPI] + public static class SessionExtensions + { + /// + /// Flushes session and evict entity from the session. + /// + /// The session. + /// The entity. + /// + /// or is + /// null. + /// + public static void FlushAndEvict(this ISession session, object entity) + { + if (session == null) throw new ArgumentNullException(nameof(session)); + if (entity == null) throw new ArgumentNullException(nameof(entity)); + // Commits any changes up to this point to the database + session.Flush(); + + // Evicts the entity from the current session so that it can be loaded during testing; + // this gives the test a clean slate, if you will, to work with + session.Evict(entity); + } + + /// + /// Flushes session and evict entity from the session. + /// + /// The session. + /// The entity. + /// Cancellation token. + /// + /// or is null. + /// + public static async Task FlushAndEvictAsync(this ISession session, object entity, CancellationToken cancellationToken) + { + if (session == null) throw new ArgumentNullException(nameof(session)); + if (entity == null) throw new ArgumentNullException(nameof(entity)); + // Commits any changes up to this point to the database + await session.FlushAsync(cancellationToken).ConfigureAwait(false); + + // Evicts the entity from the current session so that it can be loaded during testing; + // this gives the test a clean slate, if you will, to work with + await session.EvictAsync(entity, cancellationToken).ConfigureAwait(false); + } + + /// + /// Flushes session and evict entities from the session. + /// + /// The session. + /// Cancellation token. + /// Entities. + /// + /// or or it's item is null. + /// + public static async Task FlushAndEvictAsync(this ISession session, CancellationToken cancellationToken, params object[] entities) + { + if (session == null) throw new ArgumentNullException(nameof(session)); + if (entities == null) throw new ArgumentNullException(nameof(entities)); + + // Commits any changes up to this point to the database + await session.FlushAsync(cancellationToken).ConfigureAwait(false); + + for (var i = entities.Length - 1; i >= 0; i--) + { + var entity = entities[i]; + + if (entity == null) + throw new ArgumentNullException(nameof(entities), $"Item at index {i} it null."); + await session.EvictAsync(entity, cancellationToken).ConfigureAwait(false); + } + } + + /// + /// Force version increment for versioned entity. + /// + /// + /// + /// + /// Entity to increment version for. + /// Cancellation token + /// is null. + public static Task IncrementVersionAsync(this ISession session, object? entity, CancellationToken cancellationToken) + { + if (session == null) throw new ArgumentNullException(nameof(session)); + if (entity == null) return Task.CompletedTask; + + // don't process deleted entity. + var entry = session.GetSessionImplementation().PersistenceContext.GetEntry(entity); + if (entry == null || entry.Status is Status.Deleted or Status.Gone) return Task.CompletedTask; + return session.LockAsync(entity, LockMode.Force, cancellationToken); + } + + /// + /// Force version increment for versioned entity. + /// + /// + /// + /// + /// Entity to increment version for. + /// is null. + public static void IncrementVersion(this ISession session, object? entity) + { + if (session == null) throw new ArgumentNullException(nameof(session)); + if (entity == null) return; + + // ignore deleted entity + var entry = session.GetSessionImplementation().PersistenceContext.GetEntry(entity); + if (entry == null || entry.Status is Status.Deleted or Status.Gone) return; + session.Lock(entity, LockMode.Force); + } + + /// + /// Checks whether entity is modified. + /// + /// + /// + /// + /// + /// true id entity was modified. + /// + /// or is null. + /// + public static bool IsModified(this ISession session, object entity) + { + if (session == null) throw new ArgumentNullException(nameof(session)); + if (entity == null) throw new ArgumentNullException(nameof(entity)); + var sessionImplementation = session.GetSessionImplementation(); + var entry = sessionImplementation.PersistenceContext.GetEntry(entity); + if (entry == null) return false; + + var persister = entry.Persister; + if (entry.Status == Status.Deleted) return true; + if (!entry.RequiresDirtyCheck(entity)) return false; + + var currentValue = persister.GetPropertyValues(entity); + var dirtyPropertyIndexes = persister.FindDirty(currentValue, entry.LoadedState, entity, sessionImplementation); + return dirtyPropertyIndexes != null; + } + } +} diff --git a/Src/SharpArch.NHibernate/SharpArch.NHibernate.csproj b/Src/SharpArch.NHibernate/SharpArch.NHibernate.csproj new file mode 100644 index 000000000..37c15cc72 --- /dev/null +++ b/Src/SharpArch.NHibernate/SharpArch.NHibernate.csproj @@ -0,0 +1,27 @@ + + + + + + + + Provides NHibernate persistance support for a Sharp Architecture application, providing NHibernate session managment and initialisation, and implementations of core SharpArch data access interfaces. + $(PackageTags);nhibernate;persistance + icon.png + + + + + + + + + + + + + + + + + diff --git a/Src/SharpArch.NHibernate/TransactionManager.cs b/Src/SharpArch.NHibernate/TransactionManager.cs new file mode 100644 index 000000000..e590ab208 --- /dev/null +++ b/Src/SharpArch.NHibernate/TransactionManager.cs @@ -0,0 +1,57 @@ +namespace SharpArch.NHibernate +{ + using System; + using System.Data; + using System.Threading; + using System.Threading.Tasks; + using Domain.PersistenceSupport; + using global::NHibernate; + using JetBrains.Annotations; + + + /// + /// Transaction manager for NHibernate. + /// + [PublicAPI] + public class TransactionManager : INHibernateTransactionManager, ISupportsTransactionStatus + { + static readonly string _noTransactionAvailable = "No transaction is currently active."; + + /// + /// Creates instance of transaction manager. + /// + /// + public TransactionManager(ISession session) + { + Session = session ?? throw new ArgumentNullException(nameof(session)); + } + + /// + public ISession Session { get; } + + /// + /// Returns current transaction or null if no transaction was open. + /// + protected ITransaction? GetTransaction() + => Session.GetCurrentTransaction(); + + /// + public Task CommitTransactionAsync(CancellationToken cancellationToken) + => GetTransaction()?.CommitAsync(cancellationToken) ?? throw new InvalidOperationException(_noTransactionAvailable); + + /// + public Task RollbackTransactionAsync(CancellationToken cancellationToken) + => GetTransaction()?.RollbackAsync(cancellationToken) ?? throw new InvalidOperationException(_noTransactionAvailable); + + /// + public IDisposable BeginTransaction(IsolationLevel isolationLevel) + => Session.BeginTransaction(isolationLevel); + + /// + public Task FlushChangesAsync(CancellationToken cancellationToken) + => Session.FlushAsync(cancellationToken); + + /// + public bool IsActive => GetTransaction()?.IsActive ?? false; + } +} diff --git a/Src/SharpArch.RavenDb/Contracts/Repositories/IRavenDbRepository.cs b/Src/SharpArch.RavenDb/Contracts/Repositories/IRavenDbRepository.cs new file mode 100644 index 000000000..98734813a --- /dev/null +++ b/Src/SharpArch.RavenDb/Contracts/Repositories/IRavenDbRepository.cs @@ -0,0 +1,58 @@ +namespace SharpArch.RavenDb.Contracts.Repositories +{ + using System; + using System.Collections.Generic; + using System.Linq.Expressions; + using System.Threading; + using System.Threading.Tasks; + using Domain.DomainModel; + using Domain.PersistenceSupport; + using JetBrains.Annotations; + + + /// + /// RavenDB-specific repository implementation. + /// + /// + /// The type of the identifier t. + /// + [PublicAPI] + public interface IRavenDbRepository : IRepository + where TEntity : class, IEntity + where TIdT : IEquatable + { + /// + /// Finds all documents satisfying given criteria. + /// + /// The criteria. + /// Cancellation token. + /// Documents + Task FindAllAsync(Expression> @where, CancellationToken cancellationToken = default); + + /// + /// Finds single document satisfying given criteria. + /// + /// The criteria. + /// Cancellation token. + /// The document + /// If more than one document found. + Task FindOneAsync(Expression> @where, CancellationToken cancellationToken = default); + + /// + /// Finds the first document satisfying given criteria. + /// + /// The Criteria. + /// Cancellation token. + /// The document. + /// If no documents found. + Task FirstAsync(Expression> where, CancellationToken cancellationToken = default); + + /// + /// Loads all documents with given IDs. + /// + /// Document IDs. + /// Cancellation token. + /// List of documents. + Task> GetAllAsync(IEnumerable ids, CancellationToken cancellationToken = default); + } +} diff --git a/Src/SharpArch.RavenDb/RavenDbRepository.cs b/Src/SharpArch.RavenDb/RavenDbRepository.cs new file mode 100644 index 000000000..78551f83f --- /dev/null +++ b/Src/SharpArch.RavenDb/RavenDbRepository.cs @@ -0,0 +1,170 @@ +namespace SharpArch.RavenDb +{ + using System; + using System.Collections.Generic; + using System.Linq; + using System.Linq.Expressions; + using System.Threading; + using System.Threading.Tasks; + using Contracts.Repositories; + using Domain.DomainModel; + using Domain.PersistenceSupport; + using Domain.Specifications; + using JetBrains.Annotations; + using Raven.Client.Documents; + using Raven.Client.Documents.Commands.Batches; + using Raven.Client.Documents.Session; + + + /// + /// RavenDB repository base class. + /// Implements repository for given entity type. + /// + /// Entity type + /// Primary Key type. + /// + /// + [PublicAPI] + public class RavenDbRepository : IRavenDbRepository, + ILinqRepository + where TEntity : class, IEntity + where TId : IEquatable + { + /// + /// RavenDB Document Session. + /// + protected IAsyncDocumentSession Session { get; } + + /// + /// Initializes a new instance of the class. + /// + /// The session. + public RavenDbRepository(IAsyncDocumentSession session) + { + Session = session ?? throw new ArgumentNullException(nameof(session)); + TransactionManager = new TransactionManager(session); + } + + /// + public Task FindOneAsync(TId id, CancellationToken cancellationToken = default) + => GetAsync(id, cancellationToken); + + /// + public Task FindOneAsync(ILinqSpecification specification, CancellationToken cancellationToken = default) + { + if (specification == null) throw new ArgumentNullException(nameof(specification)); + return specification.SatisfyingElementsFrom(Session.Query()) + .SingleOrDefaultAsync(cancellationToken)!; + } + + /// + /// Finds all items within the repository. + /// + /// + /// All items in the repository. + /// + public IQueryable FindAll() + => Session.Query(); + + /// + /// Finds all items by a specification. + /// + /// The specification. + /// + /// All matching items. + /// + public IQueryable FindAll(ILinqSpecification specification) + => specification.SatisfyingElementsFrom(FindAll()); + + /// + public async Task FindAllAsync(Expression> @where, CancellationToken cancellationToken = default) + { + var result = await Session.Query().Where(where).ToArrayAsync(cancellationToken).ConfigureAwait(false); + return result; + } + + /// + public async Task FindOneAsync(Expression> @where, CancellationToken cancellationToken = default) + { + var result = await Session.Query().Where(where).SingleOrDefaultAsync(cancellationToken).ConfigureAwait(false); + return result + ?? throw new InvalidOperationException("The query returned more than one result. Please refine your query."); + } + + /// + public async Task FirstAsync(Expression> where, CancellationToken cancellationToken = default) + { + var result = await Session.Query().Where(where).FirstOrDefaultAsync(cancellationToken).ConfigureAwait(false); + return result + ?? throw new InvalidOperationException("The query returned no results. Please refine your query."); + } + + /// + public async Task> GetAllAsync(IEnumerable ids, CancellationToken cancellationToken = default) + { + var all = await Session.LoadAsync(ids.Select(p => p.ToString()), cancellationToken).ConfigureAwait(false); + return all.Select(kvp => kvp.Value).ToList(); + } + + /// + /// Returns the database context, which provides a handle to application wide DB + /// activities such as committing any pending changes, beginning a transaction, + /// rolling back a transaction, etc. + /// + public virtual ITransactionManager TransactionManager { get; } + + /// + public Task GetAsync(TId id, CancellationToken cancellationToken = default) + => Session.LoadAsync(id.ToString(), cancellationToken); + + /// + public async Task> GetAllAsync(CancellationToken cancellationToken = default) + { + var result = await Session.Query().ToListAsync(cancellationToken).ConfigureAwait(false); + return result; + } + + /// + public async Task SaveAsync(TEntity entity, CancellationToken cancellationToken = default) + { + if (entity == null) throw new ArgumentNullException(nameof(entity)); + await Session.StoreAsync(entity, cancellationToken).ConfigureAwait(false); + return entity; + } + + /// + public Task SaveOrUpdateAsync(TEntity entity, CancellationToken cancellationToken = default) + => SaveAsync(entity, cancellationToken); + + /// + public Task EvictAsync(TEntity entity, CancellationToken cancellationToken = default) + { + Session.Advanced.Evict(entity); + return Task.CompletedTask; + } + + /// + public Task DeleteAsync(TEntity entity, CancellationToken cancellationToken = default) + { + cancellationToken.ThrowIfCancellationRequested(); + Session.Delete(entity); + return Task.CompletedTask; + } + + /// + public async Task DeleteAsync(TId id, CancellationToken cancellationToken = default) + { + if (id is ValueType) + { + var entity = await GetAsync(id, cancellationToken).ConfigureAwait(false); + if (entity != null) + await DeleteAsync(entity, cancellationToken).ConfigureAwait(false); + } + else + { + Session.Advanced.Defer(new DeleteCommandData(id.ToString(), null)); + } + } + + } +} diff --git a/Src/SharpArch.RavenDb/SharpArch.RavenDb.csproj b/Src/SharpArch.RavenDb/SharpArch.RavenDb.csproj new file mode 100644 index 000000000..7d397b372 --- /dev/null +++ b/Src/SharpArch.RavenDb/SharpArch.RavenDb.csproj @@ -0,0 +1,26 @@ + + + + + + + + Provides RavenDB persistance support for a Sharp Architecture application, providing implementations of core SharpArch data access interfaces. + $(PackageTags);raven-db;persistance + icon.png + + + + + + + + + + + + + + + + diff --git a/Src/SharpArch.RavenDb/TransactionManager.cs b/Src/SharpArch.RavenDb/TransactionManager.cs new file mode 100644 index 000000000..f79549086 --- /dev/null +++ b/Src/SharpArch.RavenDb/TransactionManager.cs @@ -0,0 +1,96 @@ +namespace SharpArch.RavenDb +{ + using System; + using System.Runtime.CompilerServices; + using System.Threading; + using System.Threading.Tasks; + using System.Transactions; + using Domain.PersistenceSupport; + using JetBrains.Annotations; + using Raven.Client.Documents.Session; + using IsolationLevel = System.Data.IsolationLevel; + + + /// + /// Transaction Manager for RavenDB. + /// + /// + /// This implementation is based on . + /// + /// + [PublicAPI] + public class TransactionManager : ITransactionManager, ISupportsTransactionStatus + { + readonly IAsyncDocumentSession _session; + + TransactionScope? _transaction; + + /// + /// Initializes a new instance of the class. + /// + /// The document session. + public TransactionManager(IAsyncDocumentSession session) + { + _session = session ?? throw new ArgumentNullException(nameof(session)); + } + + /// + public bool IsActive => _transaction != null; + + /// + /// Begins the transaction. + /// + /// Transaction isolation level, see for details. + /// + /// TransactionManager will single TransactionScope, subsequent call to will return + /// same scope + /// until or is called. + /// + /// The transaction instance. + public IDisposable BeginTransaction(IsolationLevel isolationLevel = IsolationLevel.ReadCommitted) + => _transaction ??= new TransactionScope(TransactionScopeOption.Required, + new TransactionOptions + { + IsolationLevel = MapIsolationLevel(isolationLevel) + }, TransactionScopeAsyncFlowOption.Enabled); + + /// + /// Transaction was not started. + public async Task CommitTransactionAsync(CancellationToken cancellationToken = default) + { + if (_transaction == null) + throw new InvalidOperationException("Transaction was not started, make sure there is matching BeginTransaction() call."); + await _session.SaveChangesAsync(cancellationToken).ConfigureAwait(false); + _transaction.Complete(); + ClearTransaction(); + } + + /// + public Task RollbackTransactionAsync(CancellationToken cancellationToken = default) + { + ClearTransaction(); + return Task.CompletedTask; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + static System.Transactions.IsolationLevel MapIsolationLevel(IsolationLevel isolationLevel) + => isolationLevel switch + { + IsolationLevel.Unspecified => System.Transactions.IsolationLevel.Unspecified, + IsolationLevel.Chaos => System.Transactions.IsolationLevel.Chaos, + IsolationLevel.ReadUncommitted => System.Transactions.IsolationLevel.ReadUncommitted, + IsolationLevel.ReadCommitted => System.Transactions.IsolationLevel.ReadCommitted, + IsolationLevel.RepeatableRead => System.Transactions.IsolationLevel.RepeatableRead, + IsolationLevel.Serializable => System.Transactions.IsolationLevel.Serializable, + IsolationLevel.Snapshot => System.Transactions.IsolationLevel.Snapshot, + _ => throw new ArgumentOutOfRangeException(nameof(isolationLevel), isolationLevel, null) + }; + + void ClearTransaction() + { + _transaction?.Dispose(); + _transaction = null; + } + + } +} diff --git a/Src/SharpArch.Testing.NUnit/NHibernate/DatabaseRepositoryTestsBase.cs b/Src/SharpArch.Testing.NUnit/NHibernate/DatabaseRepositoryTestsBase.cs new file mode 100644 index 000000000..bd2e6cbb9 --- /dev/null +++ b/Src/SharpArch.Testing.NUnit/NHibernate/DatabaseRepositoryTestsBase.cs @@ -0,0 +1,131 @@ +namespace SharpArch.Testing.NUnit.NHibernate +{ + using System; +#if NULLABLE_REFERENCE_TYPES + using System.Diagnostics.CodeAnalysis; +#endif + using global::NHibernate; + using global::NHibernate.Cfg; + using global::NUnit.Framework; + using JetBrains.Annotations; + using Testing.NHibernate; + + + /// + /// + /// Initiates a transaction before each test is run and rolls back the transaction after + /// the test completes. Consequently, tests make no permanent changes to the DB. + /// + /// + /// This is appropriate as a base class if you're unit tests run against a live, development + /// database. If, alternatively, you'd prefer to use an in-memory database such as SqlLite, + /// then use as your base class. + /// As the preferred mechanism is in-memory unit testing, this class is provided mainly + /// for backward compatibility. + /// + /// + /// + /// + /// + /// + /// Descendants must have a default constructor which provides . + /// Session factory in initialized once per test fixture. + /// + /// + /// + /// + /// This class expects database structure to be present and up-to-date. + /// It will not run schema export on it. + /// + /// + /// + /// + [PublicAPI] + public abstract class DatabaseRepositoryTestsBase + { + /// + /// Database initializer instance. + /// +#if NULLABLE_REFERENCE_TYPES + [MaybeNull] +#endif + protected TestDatabaseSetup Initializer { get; private set; } = null!; + + /// + /// Returns current NHibernate session. + /// + protected ISession? Session { get; private set; } + + DatabaseRepositoryTestsBase() + { + } + + /// + /// Constructor. + /// + /// + protected DatabaseRepositoryTestsBase(TestDatabaseSetup initializer) + { + Initializer = initializer ?? throw new ArgumentNullException(nameof(initializer)); + } + + /// + /// Creates NHibernate . + /// + [OneTimeSetUp] + public void OneTimeSetUp() + { + if (Initializer == null) throw new InvalidOperationException($"{nameof(Initializer)} is not set."); + UpdateConfiguration(Initializer.GetConfiguration()); + } + + /// + /// Can be used to override Session Factory settings. + /// + /// + protected virtual void UpdateConfiguration(Configuration configuration) + { + } + + /// + /// Creates new . + /// + [SetUp] + public virtual void SetUp() + { + if (Initializer == null) throw new InvalidOperationException($"{nameof(Initializer)} is not set."); + Session = Initializer.GetSessionFactory().OpenSession(); + Session.BeginTransaction(); + } + + /// + /// Rollbacks active transaction and closes . + /// + [TearDown] + public virtual void TearDown() + { + if (Session != null) + { + var currentTransaction = Session.GetCurrentTransaction(); + if (currentTransaction != null && currentTransaction.IsActive) + currentTransaction.Rollback(); + Session.Dispose(); + Session = null; + } + } + + /// + /// Disposes . + /// + [OneTimeTearDown] + public void OneTimeTearDown() + { +#if NULLABLE_REFERENCE_TYPES + Initializer?.Dispose(); +#else + Initializer.Dispose(); +#endif + Initializer = null!; + } + } +} diff --git a/Src/SharpArch.Testing.NUnit/NHibernate/RepositoryTestsBase.cs b/Src/SharpArch.Testing.NUnit/NHibernate/RepositoryTestsBase.cs new file mode 100644 index 000000000..5f08c7514 --- /dev/null +++ b/Src/SharpArch.Testing.NUnit/NHibernate/RepositoryTestsBase.cs @@ -0,0 +1,121 @@ +namespace SharpArch.Testing.NUnit.NHibernate +{ + using System; +#if NULLABLE_REFERENCE_TYPES + using System.Diagnostics.CodeAnalysis; +#endif + using global::NHibernate; + using global::NUnit.Framework; + using JetBrains.Annotations; + using SharpArch.NHibernate; + using SharpArch.NHibernate.FluentNHibernate; + using Testing.NHibernate; + + + /// + /// Provides a base class for running unit tests against an in-memory database created + /// during test execution. This builds the database using the connection details within + /// NHibernate.config. If you'd prefer unit testing against a "live" development database + /// such as a SQL Server instance, then use instead. + /// + [PublicAPI] + public abstract class RepositoryTestsBase + { + /// + /// Transaction manager. + /// + protected TransactionManager TransactionManager { get; private set; } = null!; + + /// + /// Database initializer. + /// +#if NULLABLE_REFERENCE_TYPES + [MaybeNull] +#endif + protected TestDatabaseSetup DbInitializer { get; private set; } = null!; + + /// + /// Current NHibernate session. + /// + protected ISession Session => TransactionManager.Session; + + RepositoryTestsBase() + { + } + + /// + /// Initializes database tests fixture. + /// + /// Database initializer instance. + protected RepositoryTestsBase(TestDatabaseSetup dbInitializer) + { + DbInitializer = dbInitializer ?? throw new ArgumentNullException(nameof(dbInitializer)); + DbInitializer.GetSessionFactory(); + } + + /// + /// Called when [time tear down]. + /// + [OneTimeTearDown] + public void OneTimeTearDown() + { +#if NULLABLE_REFERENCE_TYPES + DbInitializer?.Dispose(); +#else + DbInitializer.Dispose(); +#endif + DbInitializer = null!; + } + + /// + /// Closes NHibernate session. + /// + [TearDown] + public virtual void TearDown() + { + TestDatabaseSetup.Close(Session); + } + + /// + /// Flushes the session and evicts entity from it. + /// + /// The entity instance. + /// is + protected void FlushSessionAndEvict(object instance) + { + if (instance == null) throw new ArgumentNullException(nameof(instance)); + Session.FlushAndEvict(instance); + } + + /// + /// Saves entity then flushes sessions and evicts it. + /// + /// The entity instance. + /// is + protected void SaveAndEvict(object instance) + { + if (instance == null) throw new ArgumentNullException(nameof(instance)); + Session.Save(instance); + FlushSessionAndEvict(instance); + } + + /// + /// Initializes database before each test run. + /// + protected abstract void LoadTestData(); + + /// + /// Initializes session and database before test run. + /// + [SetUp] + protected virtual void SetUp() + { +#if NULLABLE_REFERENCE_TYPES + TransactionManager = new TransactionManager(DbInitializer!.InitializeSession()); +#else + TransactionManager = new TransactionManager(DbInitializer.InitializeSession()); +#endif + LoadTestData(); + } + } +} diff --git a/Src/SharpArch.Testing.NUnit/SharpArch.Testing.NUnit.csproj b/Src/SharpArch.Testing.NUnit/SharpArch.Testing.NUnit.csproj new file mode 100644 index 000000000..54b4ba3d0 --- /dev/null +++ b/Src/SharpArch.Testing.NUnit/SharpArch.Testing.NUnit.csproj @@ -0,0 +1,29 @@ + + + + + + + + + Provides base classes to help with testing applications written with Sharp Architecture and NHibernate. + This is legacy package, for future development xUnit is recommended. + $(PackageTags);testing;nunit + icon.png + + + + + + + + + + + + + + + + + diff --git a/Src/SharpArch.Testing.Xunit.NHibernate/LiveDatabaseTests.cs b/Src/SharpArch.Testing.Xunit.NHibernate/LiveDatabaseTests.cs new file mode 100644 index 000000000..6303e41c7 --- /dev/null +++ b/Src/SharpArch.Testing.Xunit.NHibernate/LiveDatabaseTests.cs @@ -0,0 +1,66 @@ +namespace SharpArch.Testing.Xunit.NHibernate +{ + using System; + using global::NHibernate; + using global::Xunit; + using JetBrains.Annotations; + using SharpArch.NHibernate.FluentNHibernate; + using SharpArch.Testing.NHibernate; + + + /// + /// + /// Initiates a transaction before each test is run and rolls back the transaction after + /// the test completes. Consequently, tests make no permanent changes to the DB. + /// + /// + /// This is appropriate as a base class if you're unit tests run against a live, development + /// database. If, alternatively, you'd prefer to use an in-memory database such as SqlLite, + /// then use as your base class. + /// As the preferred mechanism is in-memory unit testing, this class is provided mainly + /// for backward compatibility. + /// + /// + /// + /// This class expects database structure to be present and up-to-date. + /// It will not run schema export on it. + /// + [PublicAPI] + public abstract class LiveDatabaseTests : IClassFixture, IDisposable + where TDatabaseSetup : TestDatabaseSetup, new() + { + /// + /// Database setup class + /// + protected TDatabaseSetup DbSetup { get; private set; } + + /// + /// Returns current NHibernate session. + /// + protected ISession? Session { get; private set; } + + /// + /// Creates instance of live database tests. + /// + /// Database setup, . + protected LiveDatabaseTests(TDatabaseSetup setup) + { + DbSetup = setup ?? throw new ArgumentNullException(nameof(setup)); + Session = DbSetup.GetSessionFactory().OpenSession(); + Session.BeginTransaction(); + } + + /// + public virtual void Dispose() + { + if (Session != null) { + var currentTransaction = Session.GetCurrentTransaction(); + if (currentTransaction != null && currentTransaction.IsActive) + currentTransaction.Rollback(); + Session.Dispose(); + Session = null; + } + GC.SuppressFinalize(this); + } + } +} diff --git a/Src/SharpArch.Testing.Xunit.NHibernate/SharpArch.Testing.Xunit.NHibernate.csproj b/Src/SharpArch.Testing.Xunit.NHibernate/SharpArch.Testing.Xunit.NHibernate.csproj new file mode 100644 index 000000000..1a96ac0e9 --- /dev/null +++ b/Src/SharpArch.Testing.Xunit.NHibernate/SharpArch.Testing.Xunit.NHibernate.csproj @@ -0,0 +1,33 @@ + + + + + + + + + Provides base classes to help with testing applications written with Sharp Architecture using xUnit. + $(PackageTags);testing;xunit;db-testing;nhibernate + false + icon.png + + + + + + + + + + + + + + + + + + false + + + diff --git a/Src/SharpArch.Testing.Xunit.NHibernate/TransientDatabaseTests.cs b/Src/SharpArch.Testing.Xunit.NHibernate/TransientDatabaseTests.cs new file mode 100644 index 000000000..947525719 --- /dev/null +++ b/Src/SharpArch.Testing.Xunit.NHibernate/TransientDatabaseTests.cs @@ -0,0 +1,100 @@ +namespace SharpArch.Testing.Xunit.NHibernate +{ + using System; + using System.Threading; + using System.Threading.Tasks; + using global::NHibernate; + using global::Xunit; + using JetBrains.Annotations; + using SharpArch.NHibernate; + using Testing.NHibernate; + + + /// + /// Provides a base class for running unit tests against transient database created + /// during test execution. + /// + /// This builds the database using the connection details within NHibernate.config. + /// + /// + /// If you'd prefer unit testing against a "live" development database + /// such as a SQL Server instance, then use instead. + /// + /// + /// Database setup class. + [PublicAPI] + public abstract class TransientDatabaseTests : IClassFixture, IDisposable, IAsyncLifetime + where TDatabaseSetup : TestDatabaseSetup, new() + { + /// + /// Transaction manager. + /// + + protected TransactionManager TransactionManager { get; private set; } + + /// + /// Database initializer. + /// + + protected TestDatabaseSetup DbSetup { get; private set; } + + /// + /// Database session. + /// + + protected ISession Session => TransactionManager.Session; + + /// + /// Constructor. + /// + /// + protected TransientDatabaseTests(TestDatabaseSetup dbSetup) + { + DbSetup = dbSetup ?? throw new ArgumentNullException(nameof(dbSetup)); + TransactionManager = new TransactionManager(DbSetup.InitializeSession()); + } + + /// + public Task InitializeAsync() + => LoadTestData(CancellationToken.None); + + /// + public Task DisposeAsync() + => Task.CompletedTask; + + /// + public virtual void Dispose() + { + TestDatabaseSetup.Close(Session); + } + + /// + /// Flushes the session and evicts entity from it. + /// + /// The entity instance. + /// Cancellation token. + /// is + + protected Task FlushSessionAndEvict(object instance, CancellationToken cancellationToken = default) + => Session.FlushAndEvictAsync(instance, cancellationToken); + + /// + /// Saves entity then flushes sessions and evicts it. + /// + /// The entity instance. + /// Cancellation token. + /// is + protected async Task SaveAndEvict(object instance, CancellationToken cancellationToken = default) + { + if (instance == null) throw new ArgumentNullException(nameof(instance)); + await Session.SaveAsync(instance, cancellationToken).ConfigureAwait(false); + await FlushSessionAndEvict(instance, cancellationToken).ConfigureAwait(false); + } + + /// + /// Initializes database before each test run. + /// + + protected abstract Task LoadTestData(CancellationToken cancellationToken); + } +} diff --git a/Src/SharpArch.Testing.Xunit/SetCultureAttribute.cs b/Src/SharpArch.Testing.Xunit/SetCultureAttribute.cs new file mode 100644 index 000000000..c90b46474 --- /dev/null +++ b/Src/SharpArch.Testing.Xunit/SetCultureAttribute.cs @@ -0,0 +1,81 @@ +namespace SharpArch.Testing.Xunit +{ + using System; + using System.Globalization; + using System.Reflection; + using System.Threading; + using global::Xunit.Sdk; + using JetBrains.Annotations; + + + /// + /// Overrides and + /// with given value. + /// Culture will be restored after method execution. + /// + [PublicAPI] + [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] + public sealed class SetCultureAttribute : BeforeAfterTestAttribute + { + readonly Lazy _culture; + readonly Lazy _uiCulture; + CultureInfo? _originalCulture; + CultureInfo? _originalUiCulture; + + /// + /// Overrides the culture and UI culture of the current thread given culture. + /// + /// The name of the culture to set. + public SetCultureAttribute(string culture) + : this(culture, culture) + { + } + + /// + /// Overrides the culture and UI culture of the current thread with + /// and + /// + /// The name of the culture. + /// The name of the UI culture. + public SetCultureAttribute(string culture, string uiCulture) + { + if (string.IsNullOrWhiteSpace(culture)) throw new ArgumentException("Value cannot be null or whitespace.", nameof(culture)); + if (string.IsNullOrWhiteSpace(uiCulture)) throw new ArgumentException("Value cannot be null or whitespace.", nameof(uiCulture)); + _culture = new Lazy(() => new CultureInfo(culture, false)); + _uiCulture = new Lazy(() => new CultureInfo(uiCulture, false)); + } + + /// + /// Stores the current + /// and + /// and replaces them with the new cultures defined in the constructor. + /// + public override void Before(MethodInfo methodUnderTest) + { + _originalCulture = CultureInfo.CurrentCulture; + _originalUiCulture = CultureInfo.CurrentUICulture; + CultureInfo.CurrentCulture = _culture.Value; + CultureInfo.CurrentUICulture = _uiCulture.Value; + ClearCachedData(); + } + + static void ClearCachedData() + { + CultureInfo.CurrentCulture.ClearCachedData(); + CultureInfo.CurrentUICulture.ClearCachedData(); + } + + /// + /// Restores the original and + /// + /// + public override void After(MethodInfo methodUnderTest) + { + if (_originalCulture != null) + CultureInfo.CurrentCulture = _originalCulture; + if (_originalUiCulture != null) + CultureInfo.CurrentUICulture = _originalUiCulture; + ClearCachedData(); + } + } +} diff --git a/Src/SharpArch.Testing.Xunit/SharpArch.Testing.Xunit.csproj b/Src/SharpArch.Testing.Xunit/SharpArch.Testing.Xunit.csproj new file mode 100644 index 000000000..f795494f3 --- /dev/null +++ b/Src/SharpArch.Testing.Xunit/SharpArch.Testing.Xunit.csproj @@ -0,0 +1,26 @@ + + + + + + + + Provides base classes to help with testing applications written with Sharp Architecture using xUnit. + $(PackageTags);testing;xunit + icon.png + + + + + + + + + + + + + false + + + \ No newline at end of file diff --git a/Src/SharpArch.Testing/Helpers/EntityIdSetter.cs b/Src/SharpArch.Testing/Helpers/EntityIdSetter.cs new file mode 100644 index 000000000..218395a72 --- /dev/null +++ b/Src/SharpArch.Testing/Helpers/EntityIdSetter.cs @@ -0,0 +1,46 @@ +namespace SharpArch.Testing.Helpers +{ + using System; + using System.Reflection; + using JetBrains.Annotations; + using Domain.DomainModel; + + /// + /// For better data integrity, it is imperative that the + /// property is read-only and set only by the ORM. With that said, some unit tests need + /// Id set to a particular value; therefore, this utility enables that ability. This class should + /// never be used outside of the testing project; instead, implement to + /// expose a public setter. + /// + [PublicAPI] + public static class EntityIdSetter + { + /// + /// Uses reflection to set the Id of a . + /// + /// is . + /// Property with name 'Id' could not be found. + public static void SetIdOf(IEntity entity, TId id) + where TId : IEquatable + { + if (entity == null) throw new ArgumentNullException(nameof(entity)); + // Set the data property reflectively + PropertyInfo? idProperty = entity.GetType().GetProperty("Id", BindingFlags.Public | BindingFlags.Instance); + + if (idProperty == null) + throw new InvalidOperationException("Property with name 'Id' could not be found."); + + idProperty.SetValue(entity, id, null); + } + + /// + /// Uses reflection to set the Id of a . + /// + public static IEntity SetIdTo(this IEntity entity, TId id) + where TId : IEquatable + { + SetIdOf(entity, id); + return entity; + } + } +} diff --git a/Src/SharpArch.Testing/SharpArch.Testing.csproj b/Src/SharpArch.Testing/SharpArch.Testing.csproj new file mode 100644 index 000000000..77f3ebd0a --- /dev/null +++ b/Src/SharpArch.Testing/SharpArch.Testing.csproj @@ -0,0 +1,21 @@ + + + + + + + + Provides base classes and extension methods to help with testing applications written with Sharp Architecture library. + $(PackageTags);testing + icon.png + + + + + + + + + + + diff --git a/Src/SharpArch.Web.AspNetCore/SharpArch.Web.AspNetCore.csproj b/Src/SharpArch.Web.AspNetCore/SharpArch.Web.AspNetCore.csproj new file mode 100644 index 000000000..f54f1f5cf --- /dev/null +++ b/Src/SharpArch.Web.AspNetCore/SharpArch.Web.AspNetCore.csproj @@ -0,0 +1,31 @@ + + + + + + + + + $(AppTargetFrameworks) + + + + Provides AspNet.Core MVC extensions. + $(PackageTags);aspnet-core;web-api;aspnet-core-mvc + icon.png + + + + + + + + + + + + + + + + diff --git a/Src/SharpArch.Web.AspNetCore/Transaction/ApplyTransactionFilterBase.cs b/Src/SharpArch.Web.AspNetCore/Transaction/ApplyTransactionFilterBase.cs new file mode 100644 index 000000000..a651da313 --- /dev/null +++ b/Src/SharpArch.Web.AspNetCore/Transaction/ApplyTransactionFilterBase.cs @@ -0,0 +1,49 @@ +namespace SharpArch.Web.AspNetCore.Transaction +{ + using System; + using System.Collections.Generic; + using JetBrains.Annotations; + using Microsoft.AspNetCore.Mvc.Filters; + + + /// + /// Base handler. + /// Caches transaction attribute associated with action. + /// + [PublicAPI] + public abstract class ApplyTransactionFilterBase + { + static readonly object _lock = new(); + + static IReadOnlyDictionary _attributeCache + = new Dictionary(0, StringComparer.Ordinal); + + /// + /// Returns associated with given action. + /// + /// + /// instance or null. + protected TransactionAttribute? GetTransactionAttribute(FilterContext context) + { + var actionId = context.ActionDescriptor.Id; + if (!_attributeCache.TryGetValue(actionId, out var transactionAttribute)) + { + lock (_lock) + { + transactionAttribute = context.FindEffectivePolicy(); + var cache = _attributeCache; + if (!cache.ContainsKey(actionId)) + { + cache = new Dictionary((Dictionary)cache, StringComparer.Ordinal) + { + { actionId, transactionAttribute } + }; + _attributeCache = cache; + } + } + } + + return transactionAttribute; + } + } +} diff --git a/Src/SharpArch.Web.AspNetCore/Transaction/AutoTransactionHandler.cs b/Src/SharpArch.Web.AspNetCore/Transaction/AutoTransactionHandler.cs new file mode 100644 index 000000000..4c2bf0e2a --- /dev/null +++ b/Src/SharpArch.Web.AspNetCore/Transaction/AutoTransactionHandler.cs @@ -0,0 +1,56 @@ +namespace SharpArch.Web.AspNetCore.Transaction +{ + using System.Threading.Tasks; + using Domain.PersistenceSupport; + using JetBrains.Annotations; + using Microsoft.AspNetCore.Mvc.Filters; + using Microsoft.Extensions.DependencyInjection; + using Microsoft.Extensions.Logging; + + + /// + /// Wraps controller actions marked with into transaction. + /// + /// + /// must be registered in IoC in order for this to work. + /// + [PublicAPI] + public class AutoTransactionHandler : ApplyTransactionFilterBase, IAsyncActionFilter + { + /// + /// is not registered in container. + public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) + { + var transactionAttribute = GetTransactionAttribute(context); + ITransactionManager? transactionManager = null; + if (transactionAttribute != null) + { + transactionManager = context.HttpContext.RequestServices.GetRequiredService(); + transactionManager.BeginTransaction(transactionAttribute.IsolationLevel); + } + + var executedContext = await next().ConfigureAwait(false); + + if (transactionManager is ISupportsTransactionStatus tranStatus) + { + if (!tranStatus.IsActive) + { + var logger = context.HttpContext.RequestServices.GetService>(); + logger?.LogDebug("Transaction is already closed"); + return; + } + + if (executedContext.Exception != null || + transactionAttribute!.RollbackOnModelValidationError && context.ModelState.IsValid == false) + { + // don't use cancellation token to ensure transaction is rolled back on error + await transactionManager.RollbackTransactionAsync().ConfigureAwait(false); + } + else + { + await transactionManager.CommitTransactionAsync(context.HttpContext.RequestAborted).ConfigureAwait(false); + } + } + } + } +} diff --git a/Src/SharpArch.Web.AspNetCore/Transaction/TransactionAttribute.cs b/Src/SharpArch.Web.AspNetCore/Transaction/TransactionAttribute.cs new file mode 100644 index 000000000..a70329576 --- /dev/null +++ b/Src/SharpArch.Web.AspNetCore/Transaction/TransactionAttribute.cs @@ -0,0 +1,102 @@ +namespace SharpArch.Web.AspNetCore.Transaction +{ + using System; + using System.Data; + using JetBrains.Annotations; + using Microsoft.AspNetCore.Mvc; + using Microsoft.AspNetCore.Mvc.Filters; + + + /// + /// An attribute that used to indicate that action must be wrapped in transaction. + /// + /// Attribute can be applied globally, at controller or at action level. + /// + /// + /// Note: This is marker attribute only, must be added to filter s + /// collection in order to enable auto-transactions. + /// + /// + /// Transaction is either committed or rolled back after action execution is completed. + /// Note: accessing database from the View is considered as a bad practice. + /// + /// + /// + /// Transaction will be committed after action execution is completed and no unhandled exception occurred, see + /// . + /// Transaction will be rolled back if there was unhandled exception in action or model validation was failed and + /// is true. + /// + [BaseTypeRequired(typeof(ControllerBase))] + [PublicAPI] + [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] + public sealed class TransactionAttribute : Attribute, IFilterMetadata, IEquatable + { + /// + /// Gets or sets a value indicating whether rollback transaction in case of model validation error. + /// + /// + /// true if transaction must be rolled back in case of model validation error; otherwise, false. + /// Defaults to true. + /// + public bool RollbackOnModelValidationError { get; } + + /// + /// Transaction isolation level. + /// + /// Defaults to ReadCommitted. + public IsolationLevel IsolationLevel { get; } + + /// + /// Constructor. + /// + /// Transaction isolation level. + /// + /// indicates that transaction should be rolled back in case of + /// model validation error. + /// + public TransactionAttribute(IsolationLevel isolationLevel = IsolationLevel.ReadCommitted, bool rollbackOnModelValidationError = true) + { + IsolationLevel = isolationLevel; + RollbackOnModelValidationError = rollbackOnModelValidationError; + } + + /// + public bool Equals(TransactionAttribute? other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + return RollbackOnModelValidationError == other.RollbackOnModelValidationError && IsolationLevel == other.IsolationLevel; + } + + /// + public override bool Equals(object? obj) + => ReferenceEquals(this, obj) || obj is TransactionAttribute other && Equals(other); + + /// + public override int GetHashCode() + { + int hashCode = RollbackOnModelValidationError ? 397 : 0; + hashCode ^= (int) IsolationLevel; + return hashCode; + } + + /// + /// Checks whether have same settings. + /// + /// Left operand. + /// Right operand. + /// true if transaction attribute parameters are the same; otherwise false. + public static bool operator ==(TransactionAttribute? left, TransactionAttribute? right) + => Equals(left, right); + + /// + /// Checks whether have different settings. + /// + /// Left operand. + /// Right operand. + /// true if transaction attribute parameters are the different; otherwise false. + public static bool operator !=(TransactionAttribute? left, TransactionAttribute? right) + => !Equals(left, right); + } +} diff --git a/Src/SharpArch.sln b/Src/SharpArch.sln new file mode 100644 index 000000000..94780d055 --- /dev/null +++ b/Src/SharpArch.sln @@ -0,0 +1,133 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29306.81 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SharpArch", "SharpArch", "{B33554BD-5B88-4BB2-96E0-9FD2F47FBA07}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{1E0FC93D-9540-42B7-B639-5F7E0ABC4B75}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{1F1FEDCB-8D3B-4157-A74D-D365BCF2CD07}" + ProjectSection(SolutionItems) = preProject + ..\appveyor.yml = ..\appveyor.yml + ..\build.cake = ..\build.cake + ..\cake.config = ..\cake.config + ..\CONTRIBUTING.md = ..\CONTRIBUTING.md + ..\Directory.Build.props = ..\Directory.Build.props + ..\README.md = ..\README.md + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Docker", "Docker", "{86944ABF-01A1-4A33-B7BF-2945791D8BFD}" + ProjectSection(SolutionItems) = preProject + ..\Docker\create_database.sql = ..\Docker\create_database.sql + ..\Docker\start-mssql.ps1 = ..\Docker\start-mssql.ps1 + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpArch.Domain", "SharpArch.Domain\SharpArch.Domain.csproj", "{8E7A0FBD-F643-4793-B05C-7B740DC98C2A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpArch.Testing.NUnit", "SharpArch.Testing.NUnit\SharpArch.Testing.NUnit.csproj", "{F5DF8FC7-7CFA-48FC-8A3B-6BFBFBEF2362}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpArch.NHibernate", "SharpArch.NHibernate\SharpArch.NHibernate.csproj", "{74B5ABD8-CD58-4D8B-B872-08FFE3F19311}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpArch.Web.AspNetCore", "SharpArch.Web.AspNetCore\SharpArch.Web.AspNetCore.csproj", "{685D5CA7-3492-4386-B8DC-37116BA234CE}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpArch.Testing", "SharpArch.Testing\SharpArch.Testing.csproj", "{1E09DC26-B287-48CE-948D-645C06053474}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpArch.XunitTests", "Tests\SharpArch.XunitTests\SharpArch.XunitTests.csproj", "{D9AF4843-E81B-4E91-84A7-A2326346D1BA}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpArch.Testing.Xunit.NHibernate", "SharpArch.Testing.Xunit.NHibernate\SharpArch.Testing.Xunit.NHibernate.csproj", "{96F50E09-433E-45DA-988E-E4B2E8BE238C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpArch.XunitTests.NHibernate", "Tests\SharpArch.XunitTests.NHibernate\SharpArch.XunitTests.NHibernate.csproj", "{63DA7C82-5552-48A0-8331-96603E9CD635}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpArch.Tests.NHibernate", "Tests\SharpArch.Tests.NHibernate\SharpArch.Tests.NHibernate.csproj", "{8B8D5AF2-DBFB-4470-BAD2-969B3034E88F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpArch.Infrastructure", "SharpArch.Infrastructure\SharpArch.Infrastructure.csproj", "{6E6D8E13-510C-4042-B6EC-1C8DE70CEA72}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpArch.Testing.Xunit", "SharpArch.Testing.Xunit\SharpArch.Testing.Xunit.csproj", "{AC2D2B51-4919-42E0-857C-9A88040EFBA7}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpArch.RavenDb", "SharpArch.RavenDb\SharpArch.RavenDb.csproj", "{17A1F67B-1F41-47EA-A7EE-9D3C678B0864}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpArch.NHibernate.Extensions.DependencyInjection", "SharpArch.NHibernate.DependencyInjection\SharpArch.NHibernate.Extensions.DependencyInjection.csproj", "{575B638F-2B50-4780-9434-00A9476ACE35}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8E7A0FBD-F643-4793-B05C-7B740DC98C2A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8E7A0FBD-F643-4793-B05C-7B740DC98C2A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8E7A0FBD-F643-4793-B05C-7B740DC98C2A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8E7A0FBD-F643-4793-B05C-7B740DC98C2A}.Release|Any CPU.Build.0 = Release|Any CPU + {F5DF8FC7-7CFA-48FC-8A3B-6BFBFBEF2362}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F5DF8FC7-7CFA-48FC-8A3B-6BFBFBEF2362}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F5DF8FC7-7CFA-48FC-8A3B-6BFBFBEF2362}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F5DF8FC7-7CFA-48FC-8A3B-6BFBFBEF2362}.Release|Any CPU.Build.0 = Release|Any CPU + {74B5ABD8-CD58-4D8B-B872-08FFE3F19311}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {74B5ABD8-CD58-4D8B-B872-08FFE3F19311}.Debug|Any CPU.Build.0 = Debug|Any CPU + {74B5ABD8-CD58-4D8B-B872-08FFE3F19311}.Release|Any CPU.ActiveCfg = Release|Any CPU + {74B5ABD8-CD58-4D8B-B872-08FFE3F19311}.Release|Any CPU.Build.0 = Release|Any CPU + {685D5CA7-3492-4386-B8DC-37116BA234CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {685D5CA7-3492-4386-B8DC-37116BA234CE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {685D5CA7-3492-4386-B8DC-37116BA234CE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {685D5CA7-3492-4386-B8DC-37116BA234CE}.Release|Any CPU.Build.0 = Release|Any CPU + {1E09DC26-B287-48CE-948D-645C06053474}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1E09DC26-B287-48CE-948D-645C06053474}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1E09DC26-B287-48CE-948D-645C06053474}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1E09DC26-B287-48CE-948D-645C06053474}.Release|Any CPU.Build.0 = Release|Any CPU + {D9AF4843-E81B-4E91-84A7-A2326346D1BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D9AF4843-E81B-4E91-84A7-A2326346D1BA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D9AF4843-E81B-4E91-84A7-A2326346D1BA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D9AF4843-E81B-4E91-84A7-A2326346D1BA}.Release|Any CPU.Build.0 = Release|Any CPU + {96F50E09-433E-45DA-988E-E4B2E8BE238C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {96F50E09-433E-45DA-988E-E4B2E8BE238C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {96F50E09-433E-45DA-988E-E4B2E8BE238C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {96F50E09-433E-45DA-988E-E4B2E8BE238C}.Release|Any CPU.Build.0 = Release|Any CPU + {63DA7C82-5552-48A0-8331-96603E9CD635}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {63DA7C82-5552-48A0-8331-96603E9CD635}.Debug|Any CPU.Build.0 = Debug|Any CPU + {63DA7C82-5552-48A0-8331-96603E9CD635}.Release|Any CPU.ActiveCfg = Release|Any CPU + {63DA7C82-5552-48A0-8331-96603E9CD635}.Release|Any CPU.Build.0 = Release|Any CPU + {8B8D5AF2-DBFB-4470-BAD2-969B3034E88F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8B8D5AF2-DBFB-4470-BAD2-969B3034E88F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8B8D5AF2-DBFB-4470-BAD2-969B3034E88F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8B8D5AF2-DBFB-4470-BAD2-969B3034E88F}.Release|Any CPU.Build.0 = Release|Any CPU + {6E6D8E13-510C-4042-B6EC-1C8DE70CEA72}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6E6D8E13-510C-4042-B6EC-1C8DE70CEA72}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6E6D8E13-510C-4042-B6EC-1C8DE70CEA72}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6E6D8E13-510C-4042-B6EC-1C8DE70CEA72}.Release|Any CPU.Build.0 = Release|Any CPU + {AC2D2B51-4919-42E0-857C-9A88040EFBA7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AC2D2B51-4919-42E0-857C-9A88040EFBA7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AC2D2B51-4919-42E0-857C-9A88040EFBA7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AC2D2B51-4919-42E0-857C-9A88040EFBA7}.Release|Any CPU.Build.0 = Release|Any CPU + {17A1F67B-1F41-47EA-A7EE-9D3C678B0864}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {17A1F67B-1F41-47EA-A7EE-9D3C678B0864}.Debug|Any CPU.Build.0 = Debug|Any CPU + {17A1F67B-1F41-47EA-A7EE-9D3C678B0864}.Release|Any CPU.ActiveCfg = Release|Any CPU + {17A1F67B-1F41-47EA-A7EE-9D3C678B0864}.Release|Any CPU.Build.0 = Release|Any CPU + {575B638F-2B50-4780-9434-00A9476ACE35}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {575B638F-2B50-4780-9434-00A9476ACE35}.Debug|Any CPU.Build.0 = Debug|Any CPU + {575B638F-2B50-4780-9434-00A9476ACE35}.Release|Any CPU.ActiveCfg = Release|Any CPU + {575B638F-2B50-4780-9434-00A9476ACE35}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {86944ABF-01A1-4A33-B7BF-2945791D8BFD} = {1F1FEDCB-8D3B-4157-A74D-D365BCF2CD07} + {8E7A0FBD-F643-4793-B05C-7B740DC98C2A} = {B33554BD-5B88-4BB2-96E0-9FD2F47FBA07} + {F5DF8FC7-7CFA-48FC-8A3B-6BFBFBEF2362} = {B33554BD-5B88-4BB2-96E0-9FD2F47FBA07} + {74B5ABD8-CD58-4D8B-B872-08FFE3F19311} = {B33554BD-5B88-4BB2-96E0-9FD2F47FBA07} + {685D5CA7-3492-4386-B8DC-37116BA234CE} = {B33554BD-5B88-4BB2-96E0-9FD2F47FBA07} + {1E09DC26-B287-48CE-948D-645C06053474} = {B33554BD-5B88-4BB2-96E0-9FD2F47FBA07} + {D9AF4843-E81B-4E91-84A7-A2326346D1BA} = {1E0FC93D-9540-42B7-B639-5F7E0ABC4B75} + {96F50E09-433E-45DA-988E-E4B2E8BE238C} = {B33554BD-5B88-4BB2-96E0-9FD2F47FBA07} + {63DA7C82-5552-48A0-8331-96603E9CD635} = {1E0FC93D-9540-42B7-B639-5F7E0ABC4B75} + {8B8D5AF2-DBFB-4470-BAD2-969B3034E88F} = {1E0FC93D-9540-42B7-B639-5F7E0ABC4B75} + {6E6D8E13-510C-4042-B6EC-1C8DE70CEA72} = {B33554BD-5B88-4BB2-96E0-9FD2F47FBA07} + {AC2D2B51-4919-42E0-857C-9A88040EFBA7} = {B33554BD-5B88-4BB2-96E0-9FD2F47FBA07} + {17A1F67B-1F41-47EA-A7EE-9D3C678B0864} = {B33554BD-5B88-4BB2-96E0-9FD2F47FBA07} + {575B638F-2B50-4780-9434-00A9476ACE35} = {B33554BD-5B88-4BB2-96E0-9FD2F47FBA07} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {66570DE6-E62E-4899-9B61-57AF560D7F3B} + EndGlobalSection +EndGlobal diff --git a/Src/SharpArch.sln.DotSettings b/Src/SharpArch.sln.DotSettings new file mode 100644 index 000000000..e726a6256 --- /dev/null +++ b/Src/SharpArch.sln.DotSettings @@ -0,0 +1,9 @@ + + True + + True + True + True + True + False + True \ No newline at end of file diff --git a/Src/Tests/SharpArch.Tests.NHibernate/HasUniqieDomainSignatureTestsBase.cs b/Src/Tests/SharpArch.Tests.NHibernate/HasUniqieDomainSignatureTestsBase.cs new file mode 100644 index 000000000..ae8f5ca7d --- /dev/null +++ b/Src/Tests/SharpArch.Tests.NHibernate/HasUniqieDomainSignatureTestsBase.cs @@ -0,0 +1,46 @@ +namespace Tests.SharpArch.NHibernate +{ + using System; + using System.ComponentModel.DataAnnotations; + using global::SharpArch.Domain.PersistenceSupport; + using global::SharpArch.NHibernate; + using global::SharpArch.Testing.NHibernate; + using global::SharpArch.Testing.NUnit.NHibernate; + using Mappings; + using Moq; + using NUnit.Framework; + + + class HasUniqueDomainSignatureTestsBase : RepositoryTestsBase + { + protected Mock ServiceProviderMock = null!; + + public HasUniqueDomainSignatureTestsBase() + : base(new TestDatabaseSetup( + TestContext.CurrentContext.TestDirectory, + typeof(TestsPersistenceModelGenerator), + new[] {typeof(TestsPersistenceModelGenerator).Assembly} + )) + { + } + + protected override void LoadTestData() + { + } + + [SetUp] + protected override void SetUp() + { + base.SetUp(); + + ServiceProviderMock = new Mock(); + ServiceProviderMock.Setup(sp => sp.GetService(typeof(IEntityDuplicateChecker))) + .Returns(new EntityDuplicateChecker(Session)); + } + + protected ValidationContext ValidationContextFor(object objectToValidate) + { + return new ValidationContext(objectToValidate, ServiceProviderMock.Object, null); + } + } +} diff --git a/Src/Tests/SharpArch.Tests.NHibernate/HasUniqueDomainSignatureValidatorTests.cs b/Src/Tests/SharpArch.Tests.NHibernate/HasUniqueDomainSignatureValidatorTests.cs new file mode 100644 index 000000000..7cdca8370 --- /dev/null +++ b/Src/Tests/SharpArch.Tests.NHibernate/HasUniqueDomainSignatureValidatorTests.cs @@ -0,0 +1,44 @@ +namespace Tests.SharpArch.NHibernate +{ + using FluentAssertions; + using NUnit.Framework; + using Domain; + + + [TestFixture] + // ReSharper disable once TestFileNameWarning + class HasUniqueDomainSignatureValidatorTests : HasUniqueDomainSignatureTestsBase + { + [Test] + public void WhenEntityWithDuplicateGuidExists_Should_MarkEntityAsInvalid() + { + var objectWithGuidId = new ObjectWithGuidId {Name = "codai"}; + SaveAndEvict(objectWithGuidId); + var duplicateObjectWithGuidId = new ObjectWithGuidId {Name = "codai"}; + + duplicateObjectWithGuidId.IsValid(ValidationContextFor(duplicateObjectWithGuidId)) + .Should().BeFalse(); + } + + [Test] + public void WhenEntityWithDuplicateIntIdExists_Should_MarkEntityAsInvalid() + { + var contractor = new Contractor {Name = "codai"}; + SaveAndEvict(contractor); + var duplicateContractor = new Contractor {Name = "codai"}; + duplicateContractor.IsValid(ValidationContextFor(duplicateContractor)) + .Should().BeFalse(); + } + + [Test] + public void WhenEntityWithDuplicateStringIdExists_Should_MarkEntityAsInvalid() + { + var user = new User("user1", "123-12-1234"); + SaveAndEvict(user); + var duplicateUser = new User("user2", "123-12-1234"); + + duplicateUser.IsValid(ValidationContextFor(duplicateUser)) + .Should().BeFalse(); + } + } +} diff --git a/Src/Tests/SharpArch.Tests.NHibernate/Mappings/AutoPersistenceModelGenerator.cs b/Src/Tests/SharpArch.Tests.NHibernate/Mappings/AutoPersistenceModelGenerator.cs new file mode 100644 index 000000000..d207fa843 --- /dev/null +++ b/Src/Tests/SharpArch.Tests.NHibernate/Mappings/AutoPersistenceModelGenerator.cs @@ -0,0 +1,41 @@ +namespace Tests.SharpArch.NHibernate.Mappings +{ + using System; + using FluentNHibernate.Automapping; + using FluentNHibernate.Conventions; + using global::SharpArch.Domain.DomainModel; + using global::SharpArch.NHibernate.FluentNHibernate; + using global::SharpArch.NHibernate.FluentNHibernate.Conventions; + using Domain; + + + /// + /// Generates the auto-mapping for test entities. + /// + public class TestsPersistenceModelGenerator : IAutoPersistenceModelGenerator + { + /// + /// Generates persistence model. + /// + /// + public AutoPersistenceModel Generate() + { + var mappings = AutoMap.AssemblyOf(new AutomappingConfiguration()); + mappings.IgnoreBase(typeof(Entity<>)); + mappings.Conventions.Setup(GetConventions()); + mappings.UseOverridesFromAssemblyOf(); + + return mappings; + } + + static Action GetConventions() + { + return c => { + c.Add(); + c.Add(); + c.Add(); + c.Add(); + }; + } + } +} diff --git a/Src/Tests/SharpArch.Tests.NHibernate/NHibernateSessionFactoryBuilderTests.cs b/Src/Tests/SharpArch.Tests.NHibernate/NHibernateSessionFactoryBuilderTests.cs new file mode 100644 index 000000000..07615b112 --- /dev/null +++ b/Src/Tests/SharpArch.Tests.NHibernate/NHibernateSessionFactoryBuilderTests.cs @@ -0,0 +1,136 @@ +namespace Tests.SharpArch.NHibernate +{ + using System; + using System.IO; + using FluentAssertions; + using FluentNHibernate.Cfg.Db; + using global::NHibernate.Cfg; + using global::SharpArch.NHibernate; + using NUnit.Framework; + + + [TestFixture] + class NHibernateSessionFactoryBuilderTests + { + [SetUp] + public void SetUp() + { + _tempFileName = "SharpArch.Tests." + Guid.NewGuid().ToString("D") + ".tmp"; + } + + [TearDown] + public void TearDown() + { + try + { + if (File.Exists(_tempFileName)) File.Delete(_tempFileName); + } + // ReSharper disable once CatchAllClause + catch + { + // ignored + } + } + + string _tempFileName = null!; + + static string GetConfigFullName() + { + const string defaultConfigFile = "sqlite-nhibernate-config.xml"; + return Path.Combine(TestContext.CurrentContext.TestDirectory, defaultConfigFile); + } + + [Test] + public void CanExposeConfiguration() + { + var exposeCalled = false; + + void configure(Configuration c) + { + exposeCalled = true; + } + + new NHibernateSessionFactoryBuilder() + .UseConfigFile(GetConfigFullName()) + .ExposeConfiguration(configure) + .BuildConfiguration(); + + exposeCalled.Should().BeTrue(); + } + + [Test] + public void CanInitializeWithConfigFile() + { + Configuration configuration = new NHibernateSessionFactoryBuilder() + .UseConfigFile(GetConfigFullName()) + .BuildConfiguration(); + + Assert.That(configuration, Is.Not.Null); + + configuration.BuildSessionFactory(); + } + + [Test] + public void CanInitializeWithConfigFileAndConfigurationFileCache() + { + Configuration configuration = new NHibernateSessionFactoryBuilder() + .UseConfigFile(GetConfigFullName()) + .BuildConfiguration(); + + Assert.That(configuration, Is.Not.Null); + + configuration.BuildSessionFactory(); + } + + [Test] + public void CanInitializeWithPersistenceConfigurerAndConfigFile() + { + SQLiteConfiguration persistenceConfigurer = + SQLiteConfiguration.Standard.ConnectionString(c => c.Is("Data Source=:memory:;Version=3;New=True;")); + + Configuration configuration = new NHibernateSessionFactoryBuilder() + .UsePersistenceConfigurer(persistenceConfigurer) + .UseConfigFile(GetConfigFullName()) + .BuildConfiguration(); + + Assert.That(configuration, Is.Not.Null); + configuration.BuildSessionFactory(); + } + + [Test] + public void CanInitializeWithPersistenceConfigurerAndNoConfigFile() + { + SQLiteConfiguration persistenceConfigurer = + SQLiteConfiguration.Standard.ConnectionString(c => c.Is("Data Source=:memory:;Version=3;New=True;")); + + Configuration configuration = new NHibernateSessionFactoryBuilder() + .UsePersistenceConfigurer(persistenceConfigurer) + .BuildConfiguration(); + + Assert.That(configuration, Is.Not.Null); + configuration.BuildSessionFactory(); + } + + [Test] + public void WhenUsingDataAnnotationValidators_ShouldKeepRegisteredPreInsertEventListeners() + { + Configuration configuration = new NHibernateSessionFactoryBuilder() + .UseConfigFile(GetConfigFullName()) + .UseDataAnnotationValidators(true) + .BuildConfiguration(); + + configuration.EventListeners.PreInsertEventListeners.Should().Contain(l => l is PreInsertListener); + } + + [Test] + public void WhenUsingDataAnnotationValidators_ShouldKeepRegisteredPreUpdateEventListeners() + { + Configuration configuration = new NHibernateSessionFactoryBuilder() + .UseConfigFile(GetConfigFullName()) + .UseDataAnnotationValidators(true) + .BuildConfiguration(); + + configuration.EventListeners.PreUpdateEventListeners.Should().Contain(l => l is PreUpdateListener); + } + } +} diff --git a/Src/Tests/SharpArch.Tests.NHibernate/PreInsertlistener.cs b/Src/Tests/SharpArch.Tests.NHibernate/PreInsertlistener.cs new file mode 100644 index 000000000..1543ce668 --- /dev/null +++ b/Src/Tests/SharpArch.Tests.NHibernate/PreInsertlistener.cs @@ -0,0 +1,39 @@ +namespace Tests.SharpArch.NHibernate +{ + using System; + using System.Threading; + using System.Threading.Tasks; + using global::NHibernate.Event; + + + [Serializable] + class PreInsertListener : IPreInsertEventListener + { + public Task OnPreInsertAsync(PreInsertEvent @event, CancellationToken cancellationToken) + { + return PreUpdateListener.True; + } + + public bool OnPreInsert(PreInsertEvent @event) + { + return true; + } + } + + + [Serializable] + public class PreUpdateListener : IPreUpdateEventListener + { + internal static readonly Task True = Task.FromResult(true); + + public Task OnPreUpdateAsync(PreUpdateEvent @event, CancellationToken cancellationToken) + { + return True; + } + + public bool OnPreUpdate(PreUpdateEvent @event) + { + return true; + } + } +} diff --git a/Src/Tests/SharpArch.Tests.NHibernate/RepositoryTests.cs b/Src/Tests/SharpArch.Tests.NHibernate/RepositoryTests.cs new file mode 100644 index 000000000..0b68fc230 --- /dev/null +++ b/Src/Tests/SharpArch.Tests.NHibernate/RepositoryTests.cs @@ -0,0 +1,34 @@ +// ReSharper disable UnusedMember.Local +namespace Tests.SharpArch.NHibernate +{ + using FluentAssertions; + using global::NHibernate; + using global::SharpArch.Domain.DomainModel; + using global::SharpArch.Domain.PersistenceSupport; + using global::SharpArch.NHibernate; + using Moq; + using NUnit.Framework; + + + [TestFixture] + // ReSharper disable once TestFileNameWarning + class RepositoryTests + { + [Test] + public void CanCastConcreteLinqRepositoryToInterfaceILinqRepository() + { + var session = new Mock(); + var transactionManager = new Mock(); + transactionManager.SetupGet(t => t.Session).Returns(session.Object); + var concreteRepository = new LinqRepository(transactionManager.Object); + + concreteRepository.Should().BeAssignableTo>(); + } + } + + + public class MyEntity: Entity + { + string? Name { get; set; } + } +} diff --git a/Src/Tests/SharpArch.Tests.NHibernate/SharpArch.Tests.NHibernate.csproj b/Src/Tests/SharpArch.Tests.NHibernate/SharpArch.Tests.NHibernate.csproj new file mode 100644 index 000000000..ac7452650 --- /dev/null +++ b/Src/Tests/SharpArch.Tests.NHibernate/SharpArch.Tests.NHibernate.csproj @@ -0,0 +1,37 @@ + + + + Tests.SharpArch.NHibernate + + + + + + + + + + + + + + + + + + + + + + + + + + PreserveNewest + + + PreserveNewest + + + + diff --git a/Src/Tests/SharpArch.Tests.NHibernate/hibernate.cfg.xml b/Src/Tests/SharpArch.Tests.NHibernate/hibernate.cfg.xml new file mode 100644 index 000000000..22286b385 --- /dev/null +++ b/Src/Tests/SharpArch.Tests.NHibernate/hibernate.cfg.xml @@ -0,0 +1,20 @@ + + + + + + NHibernate.Connection.DriverConnectionProvider + + + NHibernate.Dialect.SQLiteDialect + + + NHibernate.Driver.SQLite20Driver + + + Data Source=:memory:;Version=3;New=True; + + on_close + create + + \ No newline at end of file diff --git a/Src/Tests/SharpArch.Tests.NHibernate/sqlite-nhibernate-config.xml b/Src/Tests/SharpArch.Tests.NHibernate/sqlite-nhibernate-config.xml new file mode 100644 index 000000000..fcfabf742 --- /dev/null +++ b/Src/Tests/SharpArch.Tests.NHibernate/sqlite-nhibernate-config.xml @@ -0,0 +1,26 @@ + + + + + + + NHibernate.Dialect.SQLiteDialect + + + NHibernate.Driver.SQLite20Driver + + + Data Source=:memory:;Version=3;New=True; + + on_close + true + + + + + + + + + + \ No newline at end of file diff --git a/Src/Tests/SharpArch.XunitTests.NHibernate/HasUniqieDomainSignatureTestsBase.cs b/Src/Tests/SharpArch.XunitTests.NHibernate/HasUniqieDomainSignatureTestsBase.cs new file mode 100644 index 000000000..4f67ebbaf --- /dev/null +++ b/Src/Tests/SharpArch.XunitTests.NHibernate/HasUniqieDomainSignatureTestsBase.cs @@ -0,0 +1,35 @@ +namespace Tests.SharpArch.NHibernate +{ + using System; + using System.ComponentModel.DataAnnotations; + using global::SharpArch.Domain.PersistenceSupport; + using global::SharpArch.NHibernate; + using global::SharpArch.Testing.Xunit.NHibernate; + using Mappings; + using Moq; + + + public abstract class HasUniqueDomainSignatureTestsBase : TransientDatabaseTests + { + protected readonly Mock ServiceProviderMock; + protected ValidationContext? ValidationContext; + + public HasUniqueDomainSignatureTestsBase() + : base(new NHibernateTestsSetup()) + { + ServiceProviderMock = new Mock(); + ServiceProviderMock.Setup(sp => sp.GetService(typeof(IEntityDuplicateChecker))) + .Returns(new EntityDuplicateChecker(Session)); + } + + /// + /// Create validation context for given object. + /// + /// + /// + protected ValidationContext ValidationContextFor(object objectToValidate) + { + return new(objectToValidate, ServiceProviderMock.Object, null); + } + } +} diff --git a/Src/Tests/SharpArch.XunitTests.NHibernate/HasUniqueDomainSignatureValidatorTests.cs b/Src/Tests/SharpArch.XunitTests.NHibernate/HasUniqueDomainSignatureValidatorTests.cs new file mode 100644 index 000000000..146df4abd --- /dev/null +++ b/Src/Tests/SharpArch.XunitTests.NHibernate/HasUniqueDomainSignatureValidatorTests.cs @@ -0,0 +1,48 @@ +namespace Tests.SharpArch.NHibernate +{ + using System.Threading; + using System.Threading.Tasks; + using Domain; + using FluentAssertions; + using Xunit; + + + public class HasUniqueDomainSignatureValidatorTests : HasUniqueDomainSignatureTestsBase + { + /// + protected override Task LoadTestData(CancellationToken cancellationToken) + => Task.CompletedTask; + + [Fact] + public async Task WhenEntityWithDuplicateGuidExists_Should_MarkEntityAsInvalid() + { + var objectWithGuidId = new ObjectWithGuidId {Name = "codai"}; + await SaveAndEvict(objectWithGuidId, CancellationToken.None); + var duplicateObjectWithGuidId = new ObjectWithGuidId {Name = "codai"}; + + duplicateObjectWithGuidId.IsValid(ValidationContextFor(duplicateObjectWithGuidId)) + .Should().BeFalse(); + } + + [Fact] + public async Task WhenEntityWithDuplicateIntIdExists_Should_MarkEntityAsInvalid() + { + var contractor = new Contractor {Name = "codai"}; + await SaveAndEvict(contractor, CancellationToken.None); + var duplicateContractor = new Contractor {Name = "codai"}; + duplicateContractor.IsValid(ValidationContextFor(duplicateContractor)) + .Should().BeFalse(); + } + + [Fact] + public async Task WhenEntityWithDuplicateStringIdExists_Should_MarkEntityAsInvalid() + { + var user = new User("user1", "123-12-1234"); + await SaveAndEvict(user, CancellationToken.None); + var duplicateUser = new User("user2", "123-12-1234"); + + duplicateUser.IsValid(ValidationContextFor(duplicateUser)) + .Should().BeFalse(); + } + } +} diff --git a/Src/Tests/SharpArch.XunitTests.NHibernate/Mappings/TestsPersistenceModelGenerator.cs b/Src/Tests/SharpArch.XunitTests.NHibernate/Mappings/TestsPersistenceModelGenerator.cs new file mode 100644 index 000000000..02baa8313 --- /dev/null +++ b/Src/Tests/SharpArch.XunitTests.NHibernate/Mappings/TestsPersistenceModelGenerator.cs @@ -0,0 +1,42 @@ +namespace Tests.SharpArch.NHibernate.Mappings +{ + using System; + using Domain; + using FluentNHibernate.Automapping; + using FluentNHibernate.Conventions; + using global::SharpArch.Domain.DomainModel; + using global::SharpArch.NHibernate.FluentNHibernate; + using global::SharpArch.NHibernate.FluentNHibernate.Conventions; + + + /// + /// Generates the auto-mapping for test entities. + /// + public class TestsPersistenceModelGenerator : IAutoPersistenceModelGenerator + { + /// + /// Generates persistence model. + /// + /// + public AutoPersistenceModel Generate() + { + var mappings = AutoMap.AssemblyOf(new AutomappingConfiguration()); + mappings.IgnoreBase(typeof(Entity<>)); + mappings.Conventions.Setup(GetConventions()); + mappings.UseOverridesFromAssemblyOf(); + + return mappings; + } + + static Action GetConventions() + { + return c => + { + c.Add(); + c.Add(); + c.Add(); + c.Add(); + }; + } + } +} diff --git a/Src/Tests/SharpArch.XunitTests.NHibernate/NHibernateRepositoryTests.cs b/Src/Tests/SharpArch.XunitTests.NHibernate/NHibernateRepositoryTests.cs new file mode 100644 index 000000000..5819203fe --- /dev/null +++ b/Src/Tests/SharpArch.XunitTests.NHibernate/NHibernateRepositoryTests.cs @@ -0,0 +1,55 @@ +namespace Tests.SharpArch.NHibernate +{ + using System.Threading; + using System.Threading.Tasks; + using Domain; + using FluentAssertions; + using global::SharpArch.NHibernate; + using global::SharpArch.Testing.Xunit.NHibernate; + using Mappings; + using Xunit; + + + public class NHibernateRepositoryTests : TransientDatabaseTests + { + readonly NHibernateRepository _repo; + + /// + public NHibernateRepositoryTests(NHibernateTestsSetup setup): base(setup) + { + _repo = new NHibernateRepository(TransactionManager); + } + + /// + protected override Task LoadTestData(CancellationToken cancellationToken) + => Task.CompletedTask; + + [Fact] + public async Task CanSaveAsync() + { + var entity = new Contractor + { + Name = "John Doe" + }; + + var res = await _repo.SaveAsync(entity).ConfigureAwait(false); + res.IsTransient().Should().BeFalse(); + res.Id.Should().BeGreaterThan(0); + } + + [Fact] + public async Task CanSaveOrUpdate() + { + var entity = new Contractor + { + Name = "John Doe" + }; + var res = await _repo.SaveOrUpdateAsync(entity).ConfigureAwait(false); + res.IsTransient().Should().BeFalse(); + + entity.Name = "John Doe Jr"; + res = await _repo.SaveOrUpdateAsync(entity).ConfigureAwait(false); + res.Name.Should().Be("John Doe Jr"); + } + } +} diff --git a/Src/Tests/SharpArch.XunitTests.NHibernate/NHibernateTestsSetup.cs b/Src/Tests/SharpArch.XunitTests.NHibernate/NHibernateTestsSetup.cs new file mode 100644 index 000000000..78dc44443 --- /dev/null +++ b/Src/Tests/SharpArch.XunitTests.NHibernate/NHibernateTestsSetup.cs @@ -0,0 +1,38 @@ +namespace Tests.SharpArch.NHibernate +{ + using System.Collections.Generic; + using System.Reflection; + using Domain; + using FluentNHibernate.Cfg.Db; + using global::NHibernate.Cfg; + using global::SharpArch.NHibernate; + using global::SharpArch.Testing.NHibernate; + using Mappings; + + + public class NHibernateTestsSetup : TestDatabaseSetup + { + public NHibernateTestsSetup() + : base(Assembly.GetExecutingAssembly().Location, + typeof(TestsPersistenceModelGenerator), + new[] + { + typeof(ObjectWithGuidId).Assembly, + //typeof(TestsPersistenceModelGenerator).Assembly + }) + { + } + + /// + protected override void Customize(NHibernateSessionFactoryBuilder builder) + { + base.Customize(builder); + builder.UsePersistenceConfigurer(new SQLiteConfiguration().InMemory()); + builder.UseProperties(new SortedList + { + [Environment.ReleaseConnections] = "on_close", + [Environment.Hbm2ddlAuto] = "create" + }); + } + } +} diff --git a/Src/Tests/SharpArch.XunitTests.NHibernate/PreInsertlistener.cs b/Src/Tests/SharpArch.XunitTests.NHibernate/PreInsertlistener.cs new file mode 100644 index 000000000..c6a0a4ed9 --- /dev/null +++ b/Src/Tests/SharpArch.XunitTests.NHibernate/PreInsertlistener.cs @@ -0,0 +1,39 @@ +namespace Tests.SharpArch.NHibernate +{ + using System; + using System.Threading; + using System.Threading.Tasks; + using global::NHibernate.Event; + + + [Serializable] + internal class PreInsertListener : IPreInsertEventListener + { + public Task OnPreInsertAsync(PreInsertEvent @event, CancellationToken cancellationToken) + { + return PreUpdateListener.True; + } + + public bool OnPreInsert(PreInsertEvent @event) + { + return true; + } + } + + + [Serializable] + public class PreUpdateListener : IPreUpdateEventListener + { + internal static readonly Task True = Task.FromResult(true); + + public Task OnPreUpdateAsync(PreUpdateEvent @event, CancellationToken cancellationToken) + { + return True; + } + + public bool OnPreUpdate(PreUpdateEvent @event) + { + return true; + } + } +} diff --git a/Src/Tests/SharpArch.XunitTests.NHibernate/RepositoryTests.cs b/Src/Tests/SharpArch.XunitTests.NHibernate/RepositoryTests.cs new file mode 100644 index 000000000..e174b08b7 --- /dev/null +++ b/Src/Tests/SharpArch.XunitTests.NHibernate/RepositoryTests.cs @@ -0,0 +1,32 @@ +// ReSharper disable UnusedMember.Global +namespace Tests.SharpArch.NHibernate +{ + using FluentAssertions; + using global::NHibernate; + using global::SharpArch.Domain.DomainModel; + using global::SharpArch.Domain.PersistenceSupport; + using global::SharpArch.NHibernate; + using Moq; + using Xunit; + + + public class RepositoryTests + { + [Fact] + public void CanCastConcreteLinqRepositoryToInterfaceILinqRepository() + { + var session = new Mock(); + var transactionManager = new Mock(); + transactionManager.SetupGet(t => t.Session).Returns(session.Object); + var concreteRepository = new LinqRepository(transactionManager.Object); + + concreteRepository.Should().BeAssignableTo>(); + } + } + + + public class MyEntity: Entity + { + public string? Name { get; set; } + } +} diff --git a/Src/Tests/SharpArch.XunitTests.NHibernate/SharpArch.XunitTests.NHibernate.csproj b/Src/Tests/SharpArch.XunitTests.NHibernate/SharpArch.XunitTests.NHibernate.csproj new file mode 100644 index 000000000..6162f264b --- /dev/null +++ b/Src/Tests/SharpArch.XunitTests.NHibernate/SharpArch.XunitTests.NHibernate.csproj @@ -0,0 +1,36 @@ + + + + Tests.SharpArch.NHibernate + + + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers + + + + + + + + + + + + + + PreserveNewest + + + + diff --git a/Src/Tests/SharpArch.XunitTests.NHibernate/sqlite-nhibernate-config.xml b/Src/Tests/SharpArch.XunitTests.NHibernate/sqlite-nhibernate-config.xml new file mode 100644 index 000000000..1bfe0f7fa --- /dev/null +++ b/Src/Tests/SharpArch.XunitTests.NHibernate/sqlite-nhibernate-config.xml @@ -0,0 +1,26 @@ + + + + + + + NHibernate.Dialect.SQLiteDialect + + + NHibernate.Driver.SQLite20Driver + + + Data Source=:memory:;Version=3;New=True; + + on_close + true + + + + + + + + + + \ No newline at end of file diff --git a/Src/Tests/SharpArch.XunitTests/Helpers/ITestService.cs b/Src/Tests/SharpArch.XunitTests/Helpers/ITestService.cs new file mode 100644 index 000000000..736e60f92 --- /dev/null +++ b/Src/Tests/SharpArch.XunitTests/Helpers/ITestService.cs @@ -0,0 +1,15 @@ +namespace Tests.Helpers +{ + internal interface ITestService + { + void Do(); + } + + + internal class TestService : ITestService + { + public void Do() + { + } + } +} diff --git a/Src/Tests/SharpArch.XunitTests/SharpArch.Domain/DataAnnotationsValidator/HasUniqueEntitySignatureValidatorTests.cs b/Src/Tests/SharpArch.XunitTests/SharpArch.Domain/DataAnnotationsValidator/HasUniqueEntitySignatureValidatorTests.cs new file mode 100644 index 000000000..188ae9034 --- /dev/null +++ b/Src/Tests/SharpArch.XunitTests/SharpArch.Domain/DataAnnotationsValidator/HasUniqueEntitySignatureValidatorTests.cs @@ -0,0 +1,112 @@ +namespace Tests.SharpArch.Domain.DataAnnotationsValidator +{ + using System; + using System.Collections.Generic; + using System.ComponentModel.DataAnnotations; + using System.Diagnostics; + using FluentAssertions; + using global::SharpArch.Domain.DomainModel; + using global::SharpArch.Domain.PersistenceSupport; + using global::SharpArch.Domain.Validation; + using Moq; + using Xunit; + + + public class HasUniqueObjectSignatureValidatorTests + { + readonly Mock _serviceProviderMock; + + public HasUniqueObjectSignatureValidatorTests() + { + _serviceProviderMock = new Mock(); + _serviceProviderMock.Setup(sp => sp.GetService(typeof(IEntityDuplicateChecker))) + .Returns(new DuplicateCheckerStub()); + } + + ValidationContext ValidationContextFor(object instance) + { + return new ValidationContext(instance, _serviceProviderMock.Object, null); + } + + + [HasUniqueDomainSignature] + class Contractor : Entity + { + [DomainSignature] + public string Name { get; set; } = null!; + } + + + class DuplicateCheckerStub : IEntityDuplicateChecker + { + public bool DoesDuplicateExistWithTypedIdOf(IEntity entity) + => entity switch + { + Contractor contractor => !string.IsNullOrEmpty(contractor.Name) && + string.Equals(contractor.Name, @"codai", StringComparison.OrdinalIgnoreCase), + User user => !string.IsNullOrEmpty(user.Ssn) && user.Ssn == "123-12-1234", + ObjectWithGuidId objectWithGuidId => !string.IsNullOrEmpty(objectWithGuidId.Name) && + string.Equals(objectWithGuidId.Name, @"codai", StringComparison.OrdinalIgnoreCase), + // By default, simply return false for no duplicates found + _ => false + }; + } + + + [HasUniqueDomainSignature] + class ObjectWithGuidId : Entity + { + [DomainSignature] + public string? Name { get; set; } + } + + + [HasUniqueDomainSignature] + class User : Entity + { + [DomainSignature] + public string? Ssn { get; set; } + } + + + [Fact] + public void CanVerifyThatDuplicateExistsDuringValidationProcess() + { + var contractor = new Contractor {Name = @"Codai"}; + ValidationContext validationContext = ValidationContextFor(contractor); + IEnumerable invalidValues = contractor.ValidationResults(validationContext); + foreach (ValidationResult invalidValue in invalidValues) + { + Debug.WriteLine(invalidValue.ErrorMessage); + } + + contractor.IsValid(validationContext).Should().BeFalse(); + } + + [Fact] + public void CanVerifyThatDuplicateExistsOfEntityWithGuidIdDuringValidationProcess() + { + var objectWithGuidId = new ObjectWithGuidId {Name = "codai"}; + + objectWithGuidId.IsValid(ValidationContextFor(objectWithGuidId)).Should().BeFalse(); + + objectWithGuidId = new ObjectWithGuidId {Name = "whatever"}; + objectWithGuidId.IsValid(ValidationContextFor(objectWithGuidId)).Should().BeTrue(); + } + + [Fact] + public void CanVerifyThatDuplicateExistsOfEntityWithStringIdDuringValidationProcess() + { + var user = new User {Ssn = "123-12-1234"}; + user.IsValid(ValidationContextFor(user)).Should().BeFalse(); + } + + [Fact] + public void CanVerifyThatNoDuplicateExistsDuringValidationProcess() + { + var contractor = new Contractor {Name = "Some unique name"}; + contractor.IsValid(ValidationContextFor(contractor)).Should().BeTrue(); + } + + } +} diff --git a/Src/Tests/SharpArch.XunitTests/SharpArch.Domain/DomainModel/BaseObjectEqualityComparerTests.cs b/Src/Tests/SharpArch.XunitTests/SharpArch.Domain/DomainModel/BaseObjectEqualityComparerTests.cs new file mode 100644 index 000000000..499ac0db9 --- /dev/null +++ b/Src/Tests/SharpArch.XunitTests/SharpArch.Domain/DomainModel/BaseObjectEqualityComparerTests.cs @@ -0,0 +1,158 @@ +// ReSharper disable UnusedAutoPropertyAccessor.Local +namespace Tests.SharpArch.Domain.DomainModel +{ + using System.Collections.Generic; + using System.Linq; + using System.Reflection; + using FluentAssertions; + using global::SharpArch.Domain.DomainModel; + using global::SharpArch.Testing.Helpers; + using Xunit; + + + public class BaseObjectEqualityComparerTests + { + class ConcreteBaseObject : BaseObject + { + public string Name { get; set; } = null!; + + protected override PropertyInfo[] GetTypeSpecificSignatureProperties() + { + return GetType().GetProperties(); + } + } + + + class ConcreteEntityWithDomainSignatureProperties : Entity + { + [DomainSignature] + public string Name { get; set; } = null!; + } + + + class ConcreteEntityWithNoDomainSignatureProperties : Entity + { + public string Name { get; set; } = null!; + } + + + class ConcreteValueObject : ValueObject + { + public string Name { get; set; } = null!; + } + + + [Fact] + public void CanBeUsedByLinqSetOperatorsSuchAsIntersect() + { + IList objects1 = + new List(); + var obj1 = new ConcreteEntityWithDomainSignatureProperties {Name = @"Billy McCafferty"}; + EntityIdSetter.SetIdOf(obj1, 2); + objects1.Add(obj1); + + IList objects2 = + new List(); + var obj2 = new ConcreteEntityWithDomainSignatureProperties {Name = @"Jimi Hendrix"}; + EntityIdSetter.SetIdOf(obj2, 1); + objects2.Add(obj2); + var obj3 = new ConcreteEntityWithDomainSignatureProperties + { + Name = + "Doesn't Matter since the Id will match and the presence of the domain signature will go overridden" + }; + EntityIdSetter.SetIdOf(obj3, 2); + objects2.Add(obj3); + + objects1.Intersect( + objects2, new BaseObjectEqualityComparer()) + .Should().HaveCount(1); + + objects1.Intersect( + objects2, new BaseObjectEqualityComparer()).First() + .Equals(obj1).Should().BeTrue(); + + objects1.Intersect( + objects2, new BaseObjectEqualityComparer()).First() + .Equals(obj3).Should().BeTrue(); + } + + [Fact] + public void CanCompareBaseObjects() + { + var comparer = new BaseObjectEqualityComparer(); + + var obj1 = new ConcreteBaseObject {Name = "Whatever"}; + var obj2 = new ConcreteBaseObject {Name = "Whatever"}; + comparer.Equals(obj1, obj2).Should().BeTrue(); + + obj2.Name = "Mismatch"; + comparer.Equals(obj1, obj2).Should().BeFalse(); + } + + [Fact] + public void CanCompareEntitiesWithDomainSignatureProperties() + { + var comparer = new BaseObjectEqualityComparer>(); + + var obj1 = new ConcreteEntityWithDomainSignatureProperties {Name = "Whatever"}; + var obj2 = new ConcreteEntityWithDomainSignatureProperties {Name = "Whatever"}; + + comparer.Equals(obj1, obj2).Should().BeTrue(); + + obj2.Name = "Mismatch"; + comparer.Equals(obj1, obj2).Should().BeFalse(); + + EntityIdSetter.SetIdOf(obj1, 1); + EntityIdSetter.SetIdOf(obj2, 1); + comparer.Equals(obj1, obj2).Should().BeTrue(); + } + + [Fact] + public void CanCompareEntitiesWithNoDomainSignatureProperties() + { + var comparer = new BaseObjectEqualityComparer(); + + var obj1 = new ConcreteEntityWithNoDomainSignatureProperties {Name = "Whatever"}; + var obj2 = new ConcreteEntityWithNoDomainSignatureProperties {Name = @"asdf"}; + comparer.Equals(obj1, obj2).Should().BeFalse(); + + EntityIdSetter.SetIdOf(obj1, 1); + EntityIdSetter.SetIdOf(obj2, 1); + comparer.Equals(obj1, obj2).Should().BeTrue(); + } + + [Fact] + public void CanCompareNulls() + { + var comparer = new BaseObjectEqualityComparer(); + comparer.Equals(null, null).Should().BeTrue(); + comparer.Equals(null, new ConcreteBaseObject()).Should().BeFalse(); + comparer.Equals(new ConcreteBaseObject(), null).Should().BeFalse(); + } + + [Fact] + public void CanCompareValueObjects() + { + var comparer = new BaseObjectEqualityComparer(); + + var obj1 = new ConcreteValueObject {Name = "Whatever"}; + var obj2 = new ConcreteValueObject {Name = "Whatever"}; + comparer.Equals(obj1, obj2).Should().BeTrue(); + + obj2.Name = "Mismatch"; + comparer.Equals(obj1, obj2).Should().BeFalse(); + } + + [Fact] + public void CannotSuccessfullyCompareDifferentlyTypedObjectsThatDeriveFromBaseObject() + { + var comparer = new BaseObjectEqualityComparer(); + + var obj1 = new ConcreteBaseObject {Name = "Whatever"}; + var obj2 = new ConcreteValueObject {Name = "Whatever"}; + + comparer.Equals(obj1, obj2).Should().BeFalse(); + } + } +} diff --git a/Src/Tests/SharpArch.XunitTests/SharpArch.Domain/DomainModel/EntityTests.cs b/Src/Tests/SharpArch.XunitTests/SharpArch.Domain/DomainModel/EntityTests.cs new file mode 100644 index 000000000..98c9625c7 --- /dev/null +++ b/Src/Tests/SharpArch.XunitTests/SharpArch.Domain/DomainModel/EntityTests.cs @@ -0,0 +1,649 @@ +// ReSharper disable UnusedAutoPropertyAccessor.Local +// ReSharper disable UnusedMember.Local +// ReSharper disable UnusedAutoPropertyAccessor.Global +namespace Tests.SharpArch.Domain.DomainModel +{ + using System; + using FluentAssertions; + using global::SharpArch.Domain.DomainModel; + using global::SharpArch.Testing.Helpers; + using Xunit; + + + public class EntityTests + { + readonly MockEntityObjectWithDefaultId _diffObj; + + readonly MockEntityObjectWithSetId _diffObjWithId; + + readonly MockEntityObjectWithDefaultId _obj; + + readonly MockEntityObjectWithSetId _objWithId; + + readonly MockEntityObjectWithDefaultId _sameObj; + + readonly MockEntityObjectWithSetId _sameObjWithId; + + public EntityTests() + { + _obj = new MockEntityObjectWithDefaultId + { + FirstName = "FName1", + LastName = "LName1", + Email = @"testus...@mail.com" + }; + _sameObj = new MockEntityObjectWithDefaultId + { + FirstName = "FName1", + LastName = "LName1", + Email = @"testus...@mail.com" + }; + _diffObj = new MockEntityObjectWithDefaultId + { + FirstName = "FName2", + LastName = "LName2", + Email = @"testuse...@mail.com" + }; + _objWithId = new MockEntityObjectWithSetId + { + FirstName = "FName1", + LastName = "LName1", + Email = @"testus...@mail.com" + }; + _sameObjWithId = new MockEntityObjectWithSetId + { + FirstName = "FName1", + LastName = "LName1", + Email = @"testus...@mail.com" + }; + _diffObjWithId = new MockEntityObjectWithSetId + { + FirstName = "FName2", + LastName = "LName2", + Email = @"testuse...@mail.com" + }; + } + + + public abstract class MockEntityObjectBase : Entity + where T : IEquatable + { + public string? Email { get; set; } + + [DomainSignature] + public string FirstName { get; set; } = null!; + + [DomainSignature] + public string LastName { get; set; } = null!; + } + + + public class ObjectWithOneDomainSignatureProperty : Entity + { + [DomainSignature] + public int Age { get; set; } + + public string? Name { get; set; } + } + + + class AddressBeingDomainSignatureComparable : Entity + { + [DomainSignature] + public string Address1 { get; set; } = null!; + + public string? Address2 { get; set; } + + [DomainSignature] + public int ZipCode { get; set; } + } + + + class InheritedObjectWithExtraDomainSignatureProperty : ObjectWithOneDomainSignatureProperty + { + public string? Address { get; set; } + + [DomainSignature] + public bool IsLiving { get; set; } + } + + + class MockEntityObjectBase : MockEntityObjectBase + { + } + + + class MockEntityObjectWithDefaultId : MockEntityObjectBase, IHasAssignedId + { + public void SetAssignedIdTo(int assignedId) + { + Id = assignedId; + } + } + + + class MockEntityObjectWithSetId : MockEntityObjectBase, IHasAssignedId + { + public void SetAssignedIdTo(string assignedId) + { + Id = assignedId; + } + } + + + class Entity1 : Entity + { + } + + + class Entity2 : Entity + { + } + + + class ObjectWithAllDomainSignatureProperty : Entity + { + [DomainSignature] + public int Age { get; set; } + + [DomainSignature] + public string? Name { get; set; } + } + + + class ObjectWithAssignedId : Entity, IHasAssignedId + { + [DomainSignature] + public string? Name { get; set; } + + public void SetAssignedIdTo(string assignedId) + { + Id = assignedId; + } + } + + + class ObjectWithComplexProperties : Entity + { + [DomainSignature] + public AddressBeingDomainSignatureComparable? Address { get; set; } + + [DomainSignature] + public string? Name { get; set; } + + [DomainSignature] + public PhoneBeingNotDomainObject? Phone { get; set; } + } + + + class ObjectWithIdenticalTypedProperties : Entity + { + [DomainSignature] + public string? Address { get; set; } + + [DomainSignature] + public string? Name { get; set; } + } + + + class ObjectWithIntId : Entity + { + [DomainSignature] + public string? Name { get; set; } + } + + + /// + /// This is a nonsense object; i.e., it doesn't make sense to have + /// an entity without a domain signature. + /// + class ObjectWithNoDomainSignatureProperties : Entity + { + public int Age { get; set; } + + public string? Name { get; set; } + } + + + class PhoneBeingNotDomainObject + { + public string? Extension { get; set; } + + public string PhoneNumber { get; set; } = null!; + } + + + class PhoneBeingNotDomainObjectButWithOverriddenEquals : PhoneBeingNotDomainObject + { + public override bool Equals(object? obj) + { + return obj is PhoneBeingNotDomainObject compareTo && PhoneNumber.Equals(compareTo.PhoneNumber); + } + + public override int GetHashCode() + { + // ReSharper disable once BaseObjectGetHashCodeCallInGetHashCode + return base.GetHashCode(); + } + } + + + [Fact] + public void CanCompareDomainObjectsWithAllPropertiesBeingPartOfDomainSignature() + { + var obj1 = new ObjectWithAllDomainSignatureProperty(); + var obj2 = new ObjectWithAllDomainSignatureProperty(); + obj1.Equals(obj2).Should().BeTrue(); + + obj1.Age = 13; + obj2.Age = 13; + obj1.Name = "Foo"; + obj2.Name = "Foo"; + obj1.Equals(obj2).Should().BeTrue(); + + obj1.Name = "Bar"; + obj1.Equals(obj2).Should().BeFalse(); + + obj1.Name = null; + obj1.Equals(obj2).Should().BeFalse(); + + obj2.Name = null; + obj1.Equals(obj2).Should().BeTrue(); + } + + [Fact] + public void CanCompareDomainObjectsWithOnlySomePropertiesBeingPartOfDomainSignature() + { + var obj1 = new ObjectWithOneDomainSignatureProperty(); + var obj2 = new ObjectWithOneDomainSignatureProperty(); + obj1.Equals(obj2).Should().BeTrue(); + + obj1.Age = 13; + obj2.Age = 13; + + // Name property isn't included in comparison + obj1.Name = "Foo"; + obj2.Name = "Bar"; + obj1.Equals(obj2).Should().BeTrue(); + + obj1.Age = 14; + obj1.Equals(obj2).Should().BeFalse(); + obj1.Equals(obj2).Should().BeFalse(); + } + + [Fact] + public void CanCompareEntities() + { + var obj1 = new ObjectWithIntId {Name = "Acme"}; + var obj2 = new ObjectWithIntId {Name = "Anvil"}; + + obj1.Equals(null).Should().BeFalse(); + obj1!.Equals(obj2).Should().BeFalse(); + + EntityIdSetter.SetIdOf(obj1, 10); + EntityIdSetter.SetIdOf(obj2, 10); + + // Even though the "business value signatures" are different, the persistent Ids + // were the same. Call me crazy, but I put that much trust into persisted Ids. + obj1.Equals(obj2).Should().BeTrue(); + obj1.GetHashCode().Should().Be(obj2.GetHashCode()); + + var obj3 = new ObjectWithIntId {Name = "Acme"}; + + // Since obj1 has an Id but obj3 doesn't, they won't be equal + // even though their signatures are the same + obj1.Equals(obj3).Should().BeFalse(); + + var obj4 = new ObjectWithIntId {Name = "Acme"}; + + // obj3 and obj4 are both transient and share the same signature + obj3.Equals(obj4).Should().BeTrue(); + } + + [Fact] + public void CanCompareEntitiesWithAssignedIds() + { + var obj1 = new ObjectWithAssignedId {Name = "Acme"}; + var obj2 = new ObjectWithAssignedId {Name = "Anvil"}; + + obj1.Equals(null).Should().BeFalse(); + obj1!.Equals(obj2).Should().BeFalse(); + + obj1.SetAssignedIdTo("AAAAA"); + obj2.SetAssignedIdTo("AAAAA"); + + // Even though the "business value signatures" are different, the persistent Ids + // were the same. Call me crazy, but I put that much trust into persisted Ids. + obj1.Equals(obj2).Should().BeTrue(); + + var obj3 = new ObjectWithAssignedId {Name = "Acme"}; + + // Since obj1 has an Id but obj3 doesn't, they won't be equal + // even though their signatures are the same + obj1.Equals(obj3).Should().BeFalse(); + + var obj4 = new ObjectWithAssignedId {Name = "Acme"}; + + // obj3 and obj4 are both transient and share the same signature + obj3.Equals(obj4).Should().BeTrue(); + } + + [Fact] + public void CanCompareInheritedDomainObjects() + { + var obj1 = new InheritedObjectWithExtraDomainSignatureProperty(); + var obj2 = new InheritedObjectWithExtraDomainSignatureProperty(); + obj1.Equals(obj2).Should().BeTrue(); + + obj1.Age = 13; + obj1.IsLiving = true; + obj2.Age = 13; + obj2.IsLiving = true; + + // Address property isn't included in comparison + obj1.Address = "123 Oak Ln."; + obj2.Address = "Nightmare on Elm St."; + obj1.Equals(obj2).Should().BeTrue(); + + obj1.IsLiving = false; + obj1.Equals(obj2).Should().BeFalse(); + } + + [Fact] + public void CanCompareObjectsWithComplexProperties() + { + var obj1 = new ObjectWithComplexProperties(); + var obj2 = new ObjectWithComplexProperties(); + + obj1.Equals(obj2).Should().BeTrue(); + + obj1.Address = new AddressBeingDomainSignatureComparable + { + Address1 = "123 Smith Ln.", + Address2 = "Suite 201", + ZipCode = 12345 + }; + obj1.Equals(obj2).Should().BeFalse(); + + // Set the address of the 2nd to be different to the address of the first + obj2.Address = new AddressBeingDomainSignatureComparable + { + Address1 = "123 Smith Ln.", + + // Address2 isn't marked as being part of the domain signature; + // therefore, it WON'T be used in the equality comparison + Address2 = "Suite 402", + ZipCode = 98765 + }; + obj1.Equals(obj2).Should().BeFalse(); + + // Set the address of the 2nd to be the same as the first + obj2.Address.ZipCode = 12345; + obj1.Equals(obj2).Should().BeTrue(); + + obj1.Phone = new PhoneBeingNotDomainObject {PhoneNumber = "(555) 555-5555"}; + obj1.Equals(obj2).Should().BeFalse(); + + // IMPORTANT: Note that even though the phone number below has the same value as the + // phone number on obj1, they're not domain signature comparable; therefore, the + // "out of the box" equality will be used which shows them as being different objects. + obj2.Phone = new PhoneBeingNotDomainObject {PhoneNumber = "(555) 555-5555"}; + obj1.Equals(obj2).Should().BeFalse(); + + // Observe as we replace the obj1.Phone with an object that isn't domain-signature + // comparable, but DOES have an overridden Equals which will return true if the phone + // number properties are equal. + obj1.Phone = new PhoneBeingNotDomainObjectButWithOverriddenEquals {PhoneNumber = "(555) 555-5555"}; + obj1.Equals(obj2).Should().BeTrue(); + } + + [Fact] + public void CanHaveEntityWithoutDomainSignatureProperties() + { + var invalidEntity = new ObjectWithNoDomainSignatureProperties(); + + invalidEntity.GetSignatureProperties().Should().BeEmpty(); + } + + [Fact] + public void CannotEquateObjectsWithSameIdButDifferentTypes() + { + var obj1 = new Entity1(); + var obj2 = new Entity2(); + + EntityIdSetter.SetIdOf(obj1, 1); + EntityIdSetter.SetIdOf(obj2, 1); + + // ReSharper disable once SuspiciousTypeConversion.Global + obj1.Equals(obj2).Should().BeFalse(); + } + + [Fact] + public void DoDefaultEntityEqualsOverrideWorkWhenIdIsAssigned() + { + _obj.SetAssignedIdTo(1); + _diffObj.SetAssignedIdTo(1); + _obj.Equals(_diffObj).Should().BeTrue(); + } + + [Fact] + public void DoEntityEqualsOverrideWorkWhenIdIsAssigned() + { + _objWithId.SetAssignedIdTo("1"); + _diffObjWithId.SetAssignedIdTo("1"); + _objWithId.Equals(_diffObjWithId).Should().BeTrue(); + } + + [Fact] + public void DoEqualDefaultEntitiesWithMatchingIdsGenerateDifferentHashCodes() + { + _obj.GetHashCode().Should().NotBe(_diffObj.GetHashCode()); + } + + [Fact] + public void DoEqualDefaultEntitiesWithNoIdsGenerateSameHashCodes() + { + _obj.GetHashCode().Should().Be(_sameObj.GetHashCode()); + } + + [Fact] + public void DoEqualEntitiesWithMatchingIdsGenerateDifferentHashCodes() + { + _objWithId.GetHashCode().Should().NotBe(_diffObjWithId.GetHashCode()); + } + + [Fact] + public void DoEqualEntitiesWithNoIdsGenerateSameHashCodes() + { + _objWithId.GetHashCode().Should().Be(_sameObjWithId.GetHashCode()); + } + + [Fact] + public void DoesDefaultEntityEqualsOverrideWorkWhenNoIdIsAssigned() + { + _obj.Equals(_sameObj).Should().BeTrue(); + _obj.Equals(_diffObj).Should().BeFalse(); + _obj.Equals(new MockEntityObjectWithDefaultId()).Should().BeFalse(); + } + + [Fact] + public void DoesEntityEqualsOverrideWorkWhenNoIdIsAssigned() + { + _objWithId.Equals(_sameObjWithId).Should().BeTrue(); + _objWithId.Equals(_diffObjWithId).Should().BeFalse(); + _objWithId.Equals(new MockEntityObjectWithSetId()).Should().BeFalse(); + } + + [Fact] + public void Entity_with_domain_signature_preserves_hashcode_when_transitioning_from_transient_to_persistent() + { + var obj = new ObjectWithOneDomainSignatureProperty {Age = 1}; + obj.IsTransient().Should().BeTrue(); + + int hashcodeWhenTransient = obj.GetHashCode(); + obj.SetIdTo(1); + + obj.IsTransient().Should().BeFalse(); + obj.GetHashCode().Should().Be(hashcodeWhenTransient); + } + + [Fact] + public void + Entity_with_no_signature_properties_preserves_hashcode_when_transitioning_from_transient_to_persistent() + { + var obj = new ObjectWithNoDomainSignatureProperties(); + obj.IsTransient().Should().BeTrue(); + + int hashcodeWhenTransient = obj.GetHashCode(); + obj.SetIdTo(1); + + obj.IsTransient().Should().BeFalse(); + obj.GetHashCode().Should().Be(hashcodeWhenTransient); + } + + [Fact] + public void KeepsConsistentHashThroughLifetimeOfPersistentObject() + { + var obj = new ObjectWithOneDomainSignatureProperty(); + EntityIdSetter.SetIdOf(obj, 1); + int initialHash = obj.GetHashCode(); + + obj.Age = 13; + obj.Name = "Foo"; + obj.GetHashCode().Should().Be(initialHash); + + obj.Age = 14; + obj.GetHashCode().Should().Be(initialHash); + } + + [Fact] + public void KeepsConsistentHashThroughLifetimeOfTransientObject() + { + var obj = new ObjectWithOneDomainSignatureProperty(); + int initialHash = obj.GetHashCode(); + + obj.Age = 13; + obj.Name = "Foo"; + + obj.GetHashCode().Should().Be(initialHash); + + obj.Age = 14; + obj.GetHashCode().Should().Be(initialHash); + } + + [Fact] + public void + Transient_entity_with_domain_signature_preserves_hashcode_temporarily_when_its_domain_signature_changes() + { + var obj = new ObjectWithOneDomainSignatureProperty {Age = 1}; + int initialHash = obj.GetHashCode(); + + obj.Age = 2; + obj.GetHashCode().Should().Be(initialHash); + } + + [Fact] + public void Transient_entity_with_domain_signature_should_return_consistent_hashcode() + { + var obj = new ObjectWithOneDomainSignatureProperty {Age = 1}; + obj.GetHashCode().Should().Be(obj.GetHashCode()); + } + + [Fact] + public void Transient_entity_without_domain_signature_should_return_consistent_hashcode() + { + var obj = new ObjectWithNoDomainSignatureProperties(); + obj.GetHashCode().Should().Be(obj.GetHashCode()); + } + + [Fact] + public void Two_persistent_entities_with_different_domain_signature_and_equal_ids_generate_equal_hashcodes() + { + IEntity obj1 = new ObjectWithOneDomainSignatureProperty {Age = 1}.SetIdTo(1); + IEntity obj2 = new ObjectWithOneDomainSignatureProperty {Age = 2}.SetIdTo(1); + + obj1.GetHashCode().Should().Be(obj2.GetHashCode()); + } + + [Fact] + public void Two_persistent_entities_with_equal_domain_signature_and_different_ids_generate_different_hashcodes() + { + IEntity obj1 = new ObjectWithOneDomainSignatureProperty {Age = 1}.SetIdTo(1); + IEntity obj2 = new ObjectWithOneDomainSignatureProperty {Age = 1}.SetIdTo(2); + + obj1.GetHashCode().Should().NotBe(obj2.GetHashCode()); + } + + [Fact] + public void Two_persistent_entities_with_no_signature_properties_and_different_ids_generate_different_hashcodes( + ) + { + IEntity obj1 = new ObjectWithNoDomainSignatureProperties().SetIdTo(1); + IEntity obj2 = new ObjectWithNoDomainSignatureProperties().SetIdTo(2); + + obj1.GetHashCode().Should().NotBe(obj2.GetHashCode()); + } + + [Fact] + public void Two_persistent_entities_with_no_signature_properties_and_equal_ids_generate_equal_hashcodes() + { + IEntity obj1 = new ObjectWithNoDomainSignatureProperties().SetIdTo(1); + IEntity obj2 = new ObjectWithNoDomainSignatureProperties().SetIdTo(1); + + obj1.GetHashCode().Should().Be(obj2.GetHashCode()); + } + + [Fact] + public void Two_transient_entities_with_different_values_of_domain_signature_generate_different_hashcodes() + { + var obj1 = new ObjectWithOneDomainSignatureProperty {Age = 1}; + var obj2 = new ObjectWithOneDomainSignatureProperty {Age = 2}; + obj1.GetHashCode().Should().NotBe(obj2.GetHashCode()); + } + + [Fact] + public void Two_transient_entities_with_equal_values_of_domain_signature_generate_equal_hashcodes() + { + var obj1 = new ObjectWithOneDomainSignatureProperty {Age = 1}; + var obj2 = new ObjectWithOneDomainSignatureProperty {Age = 1}; + obj1.GetHashCode().Should().Be(obj2.GetHashCode()); + } + + [Fact] + public void Two_transient_entities_without_signature_properties_generate_different_hashcodes() + { + var obj1 = new ObjectWithNoDomainSignatureProperties(); + var obj2 = new ObjectWithNoDomainSignatureProperties(); + obj1.GetHashCode().Should().NotBe(obj2.GetHashCode()); + } + + [Fact] + public void WontGetConfusedWithOutsideCases() + { + var obj1 = new ObjectWithIdenticalTypedProperties(); + var obj2 = new ObjectWithIdenticalTypedProperties(); + + obj1.Address = "Henry"; + obj1.Name = "123 Lane St."; + obj2.Address = "123 Lane St."; + obj2.Name = "Henry"; + obj1.Equals(obj2).Should().BeFalse(); + + obj1.Address = "Henry"; + obj1.Name = null; + obj2.Address = "Henri"; + obj2.Name = null; + obj1.Equals(obj2).Should().BeFalse(); + + obj1.Address = null; + obj1.Name = @"Supercalifragilisticexpialidocious"; + obj2.Address = null; + obj2.Name = @"Supercalifragilisticexpialidocious"; + obj1.Equals(obj2).Should().BeTrue(); + + obj1.Name = @"Supercalifragilisticexpialidocious"; + obj2.Name = @"Supercalifragilisticexpialidociouz"; + obj1.Equals(obj2).Should().BeFalse(); + } + } +} diff --git a/Src/Tests/SharpArch.XunitTests/SharpArch.Domain/DomainModel/ValueObjectTests.cs b/Src/Tests/SharpArch.XunitTests/SharpArch.Domain/DomainModel/ValueObjectTests.cs new file mode 100644 index 000000000..f87bc3c0f --- /dev/null +++ b/Src/Tests/SharpArch.XunitTests/SharpArch.Domain/DomainModel/ValueObjectTests.cs @@ -0,0 +1,138 @@ +namespace Tests.SharpArch.Domain.DomainModel +{ + using System; + using System.Diagnostics.CodeAnalysis; + using FluentAssertions; + using global::SharpArch.Domain.DomainModel; + using Xunit; + + + public class ValueObjectTests + { + public class AnotherDummyValueType : ValueObject + { + public int Id { get; set; } + + public string? Name { get; set; } + } + + + public class DummyValueType : ValueObject + { + public int Id { get; set; } + + public string? Name { get; set; } + } + + + /// + /// This is a nonsense object; i.e., it doesn't make sense to have + /// a value object with a domain signature. + /// + public class ValueObjectWithDomainSignature : ValueObject + { + [DomainSignature] + public string? Name { get; set; } + } + + + [Fact] + public void CannotHaveValueObjectWithDomainSignatureProperties() + { + var invalidValueObject = new ValueObjectWithDomainSignature(); + + Assert.Throws(() => invalidValueObject.GetSignatureProperties()); + } + + [Fact] + public void Equality_DifferentReferences_SameValues_True() + { + var valueObj1 = new DummyValueType {Id = 1, Name = "Luis"}; + var valueObj2 = new DummyValueType {Id = 1, Name = "Luis"}; + valueObj1.Should().NotBeSameAs(valueObj2); + valueObj1.Equals(valueObj2).Should().BeTrue(); + (valueObj1 == valueObj2).Should().BeTrue(); + + valueObj2.Name = "Billy"; + (valueObj1 == valueObj2).Should().BeFalse(); + } + + [Fact] + public void ShouldBeEqualSameReferenceWithNonNullValues() + { + var val1 = new DummyValueType {Id = 1, Name = "Luis"}; + // ReSharper disable once EqualExpressionComparison + val1.Equals(val1).Should().BeTrue(); + } + + [Fact] + public void ShouldBeEqualWithDifferentReferences() + { + var val1 = new DummyValueType {Id = 1, Name = "Luis"}; + var val2 = new DummyValueType {Id = 1, Name = "Luis"}; + val1.Equals(val2).Should().BeTrue(); + } + + [Fact] + public void ShouldBeEqualWithSameReference() + { + var val1 = new DummyValueType(); + // ReSharper disable once EqualExpressionComparison + val1.Equals(val1).Should().BeTrue(); + } + + [Fact] + public void ShouldCompareAndReturnNotEqualWithOperators() + { + var val1 = new DummyValueType {Id = 10, Name = @"jose"}; + var val2 = new DummyValueType {Id = 20, Name = @"Rui"}; + + (val1 == val2).Should().BeFalse(); + (val1 != val2).Should().BeTrue(); + } + + [Fact] + public void ShouldGenerateSameHashcodeWhenEquals() + { + var val1 = new DummyValueType {Id = 10, Name = "Miguel"}; + var val2 = new DummyValueType {Id = 10, Name = "Miguel"}; + val1.GetHashCode().Should().Be(val2.GetHashCode()); + } + + [Fact] + public void ShouldNotBeEqualToNull() + { + var val1 = new DummyValueType {Id = 1, Name = "Luis"}; + val1.Equals(null).Should().BeFalse(); + } + + [Fact] + [SuppressMessage("ReSharper", "ConditionIsAlwaysTrueOrFalse", Justification = "unit tests")] + public void ShouldNotBeEqualToNullWithOperators() + { + var val1 = new DummyValueType {Id = 1, Name = "Luis"}; + + (null == val1).Should().BeFalse(); + (val1 == null).Should().BeFalse(); + (null! != val1).Should().BeTrue(); + (val1 != null).Should().BeTrue(); + } + + [Fact] + public void ShouldNotBeEqualWhenComparingDifferentTypes() + { + var val1 = new DummyValueType {Id = 1, Name = "Luis"}; + var val2 = new AnotherDummyValueType {Id = 1, Name = "Luis"}; + // ReSharper disable once SuspiciousTypeConversion.Global + val2.Equals(val1).Should().BeFalse(); + } + + [Fact] + public void ShouldNotBeEqualWithDifferentReferencesAndDifferentIds() + { + var val1 = new DummyValueType {Id = 1, Name = "Luis"}; + var val2 = new DummyValueType {Id = 10, Name = "Luis"}; + val2.Equals(val1).Should().BeFalse(); + } + } +} diff --git a/Src/Tests/SharpArch.XunitTests/SharpArch.Domain/Reflection/TypePropertyDescriptorCacheTests.cs b/Src/Tests/SharpArch.XunitTests/SharpArch.Domain/Reflection/TypePropertyDescriptorCacheTests.cs new file mode 100644 index 000000000..e215c3029 --- /dev/null +++ b/Src/Tests/SharpArch.XunitTests/SharpArch.Domain/Reflection/TypePropertyDescriptorCacheTests.cs @@ -0,0 +1,40 @@ +namespace Tests.SharpArch.Domain.Reflection +{ + using System; + using FluentAssertions; + using global::SharpArch.Domain.Reflection; + using Xunit; + + + public class TypePropertyDescriptorCacheTests + { + readonly TypePropertyDescriptorCache _cache; + + public TypePropertyDescriptorCacheTests() + { + _cache = new TypePropertyDescriptorCache(); + } + + [Fact] + public void Clear_Should_ClearTheCache() + { + _cache.GetOrAdd(GetType(), t => new TypePropertyDescriptor(t, null)); + _cache.Clear(); + _cache.Find(GetType()).Should().BeNull(); + } + + [Fact] + public void Find_Should_ReturnNullForMissingDescriptor() + { + _cache.Find(typeof(TypePropertyDescriptorCache)).Should().BeNull(); + } + + [Fact] + public void GetOrAdd_Should_AddMissingItemToCache() + { + Type type = GetType(); + var descriptor = new TypePropertyDescriptor(type, null); + _cache.GetOrAdd(type, _ => descriptor).Should().BeSameAs(descriptor); + } + } +} diff --git a/Src/Tests/SharpArch.XunitTests/SharpArch.Domain/TestEntities.cs b/Src/Tests/SharpArch.XunitTests/SharpArch.Domain/TestEntities.cs new file mode 100644 index 000000000..496666711 --- /dev/null +++ b/Src/Tests/SharpArch.XunitTests/SharpArch.Domain/TestEntities.cs @@ -0,0 +1,150 @@ +// ReSharper disable VirtualMemberCallInConstructor +namespace Tests.SharpArch.Domain +{ + using System; + using System.ComponentModel.DataAnnotations; + using global::SharpArch.Domain.DomainModel; + using global::SharpArch.Domain.Validation; + + + [HasUniqueDomainSignature] + public class Contractor : Entity + { + [DomainSignature] + public virtual string Name { get; set; } = null!; + } + + + [HasUniqueDomainSignature] + public class ObjectWithGuidId : Entity + { + [DomainSignature] + public virtual string Name { get; set; } = null!; + } + + + [HasUniqueDomainSignature] + class ObjectWithStringIdAndValidatorForIntId : Entity + { + [DomainSignature] + public virtual string Name { get; set; } = null!; + } + + + [HasUniqueDomainSignature] + public class User : Entity + { + [DomainSignature] + public virtual string Ssn { get; set; } = null!; + + public User(string id, string ssn) + { + Id = id; + Ssn = ssn; + } + + public User() + { + } + } + + + class EntityWithNoDomainSignatureProperties : Entity + { + public virtual string Property1 { get; set; } = null!; + + public virtual int Property2 { get; set; } + } + + + class EntityWithAllPropertiesPartOfDomainSignature : Entity + { + [DomainSignature] + public virtual string Property1 { get; set; } = null!; + + [DomainSignature] + public virtual int Property2 { get; set; } + + [DomainSignature] + public virtual bool Property3 { get; set; } + } + + + class EntityWithSomePropertiesPartOfDomainSignature : Entity + { + [DomainSignature] + public virtual string Property1 { get; set; } = null!; + + public virtual int Property2 { get; set; } + + [DomainSignature] + public virtual bool Property3 { get; set; } + } + + + class EntityWithAnotherEntityAsPartOfDomainSignature : Entity + { + [DomainSignature] + public virtual string Property1 { get; set; } = null!; + + [DomainSignature] + public virtual EntityWithAllPropertiesPartOfDomainSignature Property2 { get; set; } + + public EntityWithAnotherEntityAsPartOfDomainSignature() + { + Property2 = new EntityWithAllPropertiesPartOfDomainSignature(); + } + } + + + [HasUniqueDomainSignature] + public class Song : Entity + { + [DomainSignature] + public virtual string? SongTitle { get; set; } + + [DomainSignature] + public virtual Band? Performer { get; set; } + } + + + [HasUniqueDomainSignature(ErrorMessage = "Band already exists")] + public class Band : Entity + { + [DomainSignature] + [Required] + public virtual string BandName { get; set; } = null!; + + public virtual DateTime DateFormed { get; set; } + } + + + [HasUniqueDomainSignature(ErrorMessage = "Album already exists")] + public class Album : Entity + { + [DomainSignature] + [Required] + public virtual string Title { get; set; } = null!; + + public virtual Band? Author { get; set; } + } + + + public class Address : ValueObject + { + public virtual string? StreetAddress { get; set; } + + public virtual string? PostCode { get; set; } + } + + + [HasUniqueDomainSignature] + public class Customer : Entity + { + [DomainSignature] + public virtual string? Name { get; set; } + + [DomainSignature] + public virtual Address? Address { get; set; } + } +} diff --git a/Src/Tests/SharpArch.XunitTests/SharpArch.Infrastructure/CodeBaseLocatorTests.cs b/Src/Tests/SharpArch.XunitTests/SharpArch.Infrastructure/CodeBaseLocatorTests.cs new file mode 100644 index 000000000..4980bb116 --- /dev/null +++ b/Src/Tests/SharpArch.XunitTests/SharpArch.Infrastructure/CodeBaseLocatorTests.cs @@ -0,0 +1,30 @@ +namespace Tests.SharpArch.Infrastructure +{ + using System; + using System.IO; + using System.Reflection; + using FluentAssertions; + using global::SharpArch.Infrastructure; + using Xunit; + using Xunit.Abstractions; + + + public class CodeBaseLocatorTests + { + readonly ITestOutputHelper _output; + + public CodeBaseLocatorTests(ITestOutputHelper output) + { + _output = output ?? throw new ArgumentNullException(nameof(output)); + } + + [Fact] + public void CanResolveAssemblyPath() + { + var path = CodeBaseLocator.GetAssemblyCodeBasePath(Assembly.GetExecutingAssembly()); + _output.WriteLine("Assembly path: '{0}'", path); + path.Should().NotBeNullOrEmpty(); + Directory.Exists(path).Should().BeTrue(); + } + } +} diff --git a/Src/Tests/SharpArch.XunitTests/SharpArch.XunitTests.csproj b/Src/Tests/SharpArch.XunitTests/SharpArch.XunitTests.csproj new file mode 100644 index 000000000..4b6849798 --- /dev/null +++ b/Src/Tests/SharpArch.XunitTests/SharpArch.XunitTests.csproj @@ -0,0 +1,30 @@ + + + + Tests + $(NoWarn);1701;1702;EPS06 + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers + + + + + + + + + + + + + + diff --git a/Src/dupFinder.config b/Src/dupFinder.config new file mode 100644 index 000000000..193d94cce --- /dev/null +++ b/Src/dupFinder.config @@ -0,0 +1,23 @@ + + + false + 70 + false + false + false + false + false + + + + SharpArch.sln + + + **\obj\**\*.cs + + + false + ..\Drops\Inspections\DuplicateReport.xml + false + true + \ No newline at end of file diff --git a/Src/global.json b/Src/global.json new file mode 100644 index 000000000..ede0b282d --- /dev/null +++ b/Src/global.json @@ -0,0 +1,5 @@ +{ + "sdk": { + "version": "6.0.100-rc.1.21463.6" + } +} \ No newline at end of file diff --git a/VersionHistory.txt b/VersionHistory.txt index c8028709f..834ae8194 100644 --- a/VersionHistory.txt +++ b/VersionHistory.txt @@ -1,640 +1,1197 @@ ----------------------------------------------- ----------------------------------------------- -S#arp Architecture 1.0 RTM ----------------------------------------------- ----------------------------------------------- - -New and exciting in this release: -* Compatible with ASP.NET MVC 1.0 -* All upgraded dependencies including NHibernate 2.1 CR 1 -* We now have a community site at http://www.sharparchitecture.net, still a work in progress (a flippin' ginormous thank you to Kyle Baley for setting this up) -* S#arp Architecture documentation may now be found at http://wiki.sharparchitecture.net, still a work in progress (a huge thanks to Joe Lowrance for migrating the docs) -* Strongly typed action link for areas (SharpArch.Web.Areas.ActionLinkForAreas<> and BuildUrlFromExpressionForAreas<> - thanks Brad Buhrkuhl!) -* Fluent NHibernate now using configuration classes -* (Re)Introduced support for IIS 7 integrated mode -* Support for WCF has been added as SharpArch.Wcf for server support and SharpArch.WcfClient.Castle for auto-closing of the connection on the client (thanks Frank Laub!) -* SharpModelBinder has been introduced for much better form binding, including support for all association types; e.g., one-to-one, one-to-many, and many-to-one Entity associations -* Support for multiple databases outside of WCF communications (thanks Russell Thatcher, David Longnecker, James Broome and Howard van Rooijen for suggestions and input!) - -------- - -Assembly Dependencies: -* ASP.NET MVC 1.0 -* ASP.NET MVC 1.0 Futures -* Castle Windsor 2.0 -* Fluent NHibernate 0.1 (rev 539) built against NHibernate 2.1 CR 1 -* jQuery 1.3.2 -* Json.NET 3.5 Beta 4 -* log4net 1.2.10.0 -* Microsoft.Practices.ServiceLocation 1.0 (aka, "Common Service Locator") -* MvcContrib for MVC 1.0 (rev 959) -* NHibernate 2.1.0.3001 (2.1 CR 1) -* NHibernate.Linq 1.0 (rev 935) -* NHibernate.Validator 1.2.0.1004 (rev 935) -* NUnit 2.5.0.9122 (Installer in /tools) -* Rhino.Mocks 3.5.0.1337 -* System.Data.SQLite.DLL 1.0.60.0 -* T4 Toolbox 9.5.20.1 (Installer in /tools) - -------- - -Required Upgrade Steps - -Upgrading to S#arp Architecture 1.0 RTM from RC 2 requires a few steps to accommodate upgraded dependencies (steps also reflected in the Northwind sample project and VS generated projects). For reference, each of the following steps is prefixed with the dependency that that the upgrade step is associated with: - -#) ASP.NET MVC: If you have any previous versions of ASP.NET MVC installed, you must uninstall them and optionally may install ASP.NET MVC 1.0 - -#) NUnit: Install NUnit 2.5 using the installer found within /tools (optionally uninstalling previous versions) - -#) NUnit: Drop any usings of "using NUnit.Framework.SyntaxHelpers;" - this namespace no longer exists and has been merged into the NUnit.Framework namespace - -#) NUnit: Change any use of ExpectedException attributes to use Assert.Throws instead; see http://mint.litemedia.se/2009/05/30/new-expectedexception-model-in-nunit-25/ for details - -#) T4 Toolbox: Uninstall any previous version of T4 Toolbox and install T4 Toolbox 9.5.20.1 (installer found in /tools) - -#) T4 Toolbox: Replace your version of CrudScaffolding/EntityScaffoldingDetails.tt and CrudScaffolding/Templates/ScaffoldingGenerator.tt with updated versions from http://sharp-architecture.googlecode.com/svn/trunk/src/NorthwindSample/tools/CrudScaffolding/ - -#) SharpArch: To easily update all the assembly references in your existing project, create a new project using the S#arp Architecture VS project template and copy the assemblies from /lib and /tools/lib to your project's respective folders (You could also copy them from the trunk's /bin folder, but using a generated project is simpler.) - -#) SharpArch: Within YourProject.Tests/YourProject.Data/NHibernateMaps/MappingIntegrationTests.cs, add a reference to "using SharpArch.Testing.NHibernate;" to accommodate the move of RepositoryTestsHelper to the new namespace. - -#) SharpArch: Upgrade YourProject.Tests/YourProject.Data/NHibernateMaps/MappingIntegrationTests.cs to accommodate the changes that were made to support multiple databases (if not done, you will likely have breaking unit tests). To do so, compare your MappingIntegrationTests.cs to the one at http://sharp-architecture.googlecode.com/svn/trunk/src/NorthwindSample/tests/Northwind.Tests/Northwind.Data/NHibernateMaps/MappingIntegrationTests.cs. The necessary change is the introduction of the session factory key. - -#) SharpArch: Within YourProject.Web/Global.asax.cs, migrate the call to NHibernateSession.Init() from the Global.asax.cs class' Init() method to its Application_BeginRequest() method using the following as an example: http://sharp-architecture.googlecode.com/svn/trunk/src/NorthwindSample/app/Northwind.Web/Global.asax.cs - -#) Fluent NHibernate: Within Fluent NHibernate class maps and overrides, replace .WithKeyColumn("YourColumnName") with .KeyColumnNames.Add("YourColumnName") - -#) Fluent NHibernate: If you're using Fluent NHibernate Auto Mapping, upgrade to Fluent NHibernate class conventions within YourProject.Data (You can look at the Northwind sample project for implementation examples but the Northwind DB is far from consistent and so there's an assortment of conventions and overrides in the Northwind sample project; accordingly, you'll have better luck having VS generate a S#arp Architecture project and then look at the internals of the generated project.): - *) Add a folder under /NHibernateMaps and add convention classes (see VS generated project for examples) - *) Within /NHibernateMaps/AutoPersistenceModelGenerator.cs, modify mappings setup to use new convention-per-class approach (see VS generated project for example) - *) See http://wiki.fluentnhibernate.org/show/ConvertingToNewStyleConventions for further guidance - -#) NHibernate: Within YourProject.Tests.YourProject.Data.NHibernateMaps.MappingIntegrationTests.cs, modify CanConfirmDatabaseMatchesMappings() to reflect the following: - [Test] - public void CanConfirmDatabaseMatchesMappings() { - IDictionary allClassMetadata = - NHibernateSession.SessionFactory.GetAllClassMetadata(); - - foreach (KeyValuePair entry in allClassMetadata) { - NHibernateSession.Current.CreateCriteria(entry.Value.GetMappedClass(EntityMode.Poco)) - .SetMaxResults(0).List(); - } - } - -#) NHibernate: Within YourProject.Tests, add a reference to NHibernate.ByteCode.Castle.dll - -#) NHibernate: Within YourProject.Web, add a reference to NHibernate.ByteCode.Castle.dll - -#) Castle: Within YourProject.Tests/App.config, configure assemly redirects to reflect the following: - - - - - - - - - - -#) Castle: Within YourProject.Web/Web.config, configure assemly redirects to reflect the following: - - - - - - - - - - -#) NHibernate: Within YourProject.Tests/Hibernate.cfg.xml, add the following property: - NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle - -#) NHibernate: Within YourProject.Web/NHibernate.config, add the following property: - NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle - -------- - -Change Log - -Solution Wide Changes: - -* Updated all dependencies; only NHibernate and Fluent NHibernate had breaking changes, which were addresed in the upgrade steps above - -======= -Changes to SharpArch: - -SharpArch.Core: -* Possibly BREAKING CHANGE (but not likely) ~ /DomainModel/BaseObject.cs: Changed HasSameObjectSignatureAs() to be public instead of protected since GetSignatureProperties() is also public and is a useful method to expose. This will cause a build error if you've overridden this method; to fix, simply change the visibility of the overridden method to public. -* /DomainModel/BaseObjectEqualityComparer.cs: Added this class to provide support for LINQ set operators, such as Intersect. -* /DomainModel/Entity.cs: Modified the GetHashCode to cache the hashcode calculation and to use the object's Id in the calculation for persistent objects. This was done because GetHashCode() was previously ignoring the Id property for Entities; therefore, two Entity instances which didn't have any domain signature properties were returning different hashcode values even if they had the same Id. - -SharpArch.Data: -* Possibly BREAKING CHANGE (but not likely) ~ /NHibernate/DbContext.cs: Removed singleton behavior and added constructor parameter for session factory key to support multiple databases. -* /NHibernate/EntityDuplicateChecker.cs: Added factory key lookup for support of multiple databases. -* Possibly BREAKING CHANGE (but not likely) ~ /NHibernate/ISessionStorage.cs: Added FactoryKey property to support look-up for multiple database support and also moved this interface to its own file - I prefer having one class/interface per file. -* /NHibernate/NHibernateInitializer.cs: Added this class to assist with initializing the NHibernate session once and only once; this was introduced to help support running in IIS 7 integrated mode. -* Possibly BREAKING CHANGE (but not likely) ~ /NHibernate/NHibernateSession.cs: Changed SessionFactory and Storage to be Dictionary objects to support multiple databases; added plural named properties of each, accordingly. The singular version remain for backward compatibility and to make it easier to maintain a single database application. -* /NHibernate/NHibernateSession.cs: Within CreateSessionFactoryFor(), added ".ConventionDiscovery.AddAssembly(assembly);" calls after "m.FluentMappings.AddFromAssembly(assembly)" for altering non-automapped conventions. (Issue-101) -* /NHibernate/Repository.cs: Added factory key lookup for support of multiple databases. Also now passing factory key to DB context, accordingly. -* /NHibernate/SessionFactoryAttribute.cs: Introduced this attribute to be used on repositories to designate which session factory its associated with. It does not need to be used for single database scenarios or for your "default" database. - -SharpArch.Testing.NUnit/MbUnit: -* /NHibernate/RepositoryTestsHelper.cs: Dropped the previously 4th parameter, a bool for formatting, to support the modified signature of NHibernate's SchemaExport.Execute() -* BREAKING CHANGE ~ /NHibernate/RepositoryTestsHelper.cs: Moved this helper class to SharpArch.Testing.NHibernate as it does not have dependencies on NUnit nor on MbUnit - -SharpArch.Web: -* /CommonValidator/MvcValidationAdapter.cs: Added method overload to allow custom prefix to model state errors instead of the class name. -* /ModelBinder/EntityValueProviderResult.cs: Added support for Guid Ids - -SharpArch.Wcf: -* Added this class library to support WCF. WCF does NOT currently support multiple databases. - -SharpArch.Web -* /Areas/LinkForAreasExtensions.cs: Added this class to provide the strongly typed ActionLinkForAreas<> and BuildUrlFromExpressionForAreas<>. -* /Areas/LinkForAreasExtensions.cs: Added this class to provide the strongly typed ActionLinkForAreas<> and BuildUrlFromExpressionForAreas<>. Accordingly, you can now replace hardcoded links to areas with Html.ActionLinkForAreas<>. You'll also likely want to add the following to your web.config's namespaces tag so that you don't have to import it for every ActionLinkForAreas: -* /CommonValidator/ValidatableModelBinder.cs: Marked this as obsolete in favor of using SharpModelBinder (referenced next) -* /ModelBinder/SharpModelBinder.cs: Added this model binder to replace the use of DefaultModelBinder (see documentation for details) -* /ModelBinder/EntityValueProviderResult.cs: Added this support class for SharpModelBinder (see documentation for details) -* /NHibernate/WebSessionStorage: Added overloaded constructor to accept a factory key to support multiple database sessions. -* /NHibernate/TransactionAttribute: Added option for passing in factory key to support multiple database. Also modified this transaction to rollback the transaction if a problem is encountered. - -======= -Changes to Northwind (all changes also made to VS project template and Employee CRUD pages): - -CrudScaffolding -* /Templates/Tests/Web/Controllers/ControllerTestsTemplate.tt: Modified CanEnsureEntityNameCreationIsValid() to account for fact that ModelState is not being modified during testing (it'll redirect due to invalid entity, but it won't show errors in the ModelState by default) -* /Templates/Web/Controllers/ControllerTemplate.tt: - - Added an EntityNameFormViewModel as a DTO between the controller and the entity form in both the Create/Edit (GET) action methods - - Modified Create/Edit (POST) to account for SharpModelBinder behavior -* /Templates/Web/Views/DomainObjectFormTemplate.tt: - - Replaced "id" hidden input id to be "EntityName.Id" to support SharpModelBinder - - Now inherits from ViewUserControl with a generic parameter of a form view model DTO to make it easier to send other items to the form such as lists for drop down boxes - - Changed hidden "id" input to be named "EntityName.Id" to support binding within SharpModelBinder - - Changed cancel button to use Html.BuildUrlFromExpression instead of hardcoding the back link -* /Templates/Web/Views/EditTemplate.tt: - - Got rid of redundant passing of ViewData to user control - - Added use of enum for looking for page message so that the ViewData index is strongly typed -* /Templates/Web/Views/IndexTemplate.tt: Now using Html.BuildUrlFromExpression for the URL behind the cancel button (more strongly typed) -* /Templates/Web/Views/Show.tt: Wrapped all outputs within Server.HtmlEncode() to protect against JavaScript injection attacks -* /Templates/Web/Views/*.tt: Changed

            to

            at top of pages since they're primary page titles - -Northwind.Tests -* /Northwind.Data/NHibernateMaps/MappingIntegrationTests.cs: Introduced factory key to isolate the integration tests session factory from the other tests. Also set the SessionFactory and Storage to null before and after running the test for backwards compatibility reasons; in this way, existing tests that assume a single database don't have to be modified to account for the fact that a different session factory is being used by the MappingIntegrationTests class. - -Northwind.Web -* /Global.asax.cs: - - Added SharpModelBinder as the default binder with "ModelBinders.Binders.DefaultBinder = new SharpModelBinder();" - - Moved initialization of NHibernate session to Application_BeginRequest with new NHibernateInitializer to support IIS 7 integrated mode - -Northwind.Web.Controllers -* /ControllerEnums.cs: Added this class to hold, at the very least, a strongly typed enum for global items added to ViewData. - ----------------------------------------------- ----------------------------------------------- -S#arp Architecture 1.0.48.410 RC 2 with ASP.NET MVC RC 2 and NHibernate 2.0.1 ----------------------------------------------- ----------------------------------------------- - -Version Acknowledgements: -* A huge thanks goes out to Kyle Baley and Simone Busoli who have been tremendously assistive to the #Arch community and the project during this recent push - -New and exciting in this release: -* Compatible with ASP.NET MVC RC 2 -* VS template project includes Fluent NHibernate auto persistence mapping by default -* Much more complete and extensible CRUD scaffolding generator - it's completely touch-up free for many scenarios -* Performance of unit tests using SQLite has been improved 20% (thanks Jay Oliver!) -* Added crazy cool anti-forgery voodoo magic to the CRUD scaffolding generator for creating, editing and deleting items (uh, thanks MVC team!) -* New empty class library, called YourProject.ApplicationServices, now gets added to VS generated projects -* S#arp Architecture now has a CI home with http://teamcity.codebetter.com/overview.html (thanks Kyle and Simone!) - -------- - -Assembly Dependencies: -* ASP.NET MVC RC 2 -* ASP.NET MVC RC 1 Futures -* Castle 1.0 RC3 (rev 1038) -* Fluent NHibernate 0.1 (rev 381 - Does NOT include very recent Fluent NHibernate convention interfaces) -* jQuery 1.3.2 -* Json.NET 3.5 Beta 2 -* Microsoft.Practices.ServiceLocation 1.0 (aka, "Common Service Locator") -* MvcContrib for MVC RC (rev 903) -* NHibernate 2.0.1 GA -* NHibernate.Validator 1.2.0 (rev 809) -* NUnit 2.4.8 -* Rhino.Mocks 3.5.0.1337 -* System.Data.SQLite.DLL 1.0.60.0 -* T4 Toolbox 9.1.20.1 - -------- - -Upgrading to S#arp Architecture RC 2 from Beta (steps also reflected in the Northwind sample project): -#) If you have any previous versions of ASP.NET MVC installed, uninstall them and install ASP.NET MVC RC 2 -#) Install NUnit 2.4.8 -#) Upgrade T4 Toolbox to 9.1.20.1 AND PATCH IT, following the instructions in the "Installing and Configuring Prerequisites" of the documentation -#) Update assembly dependencies from trunk/bin into your application's lib and /tools/lib folders -#) Modify using statements from "using NHibernate.Validator;" to "using NHibernate.Validator.Constraints;" -#) Change all reference to anyEntity.ID to anyEntity.Id. -#) Add the following assembly redirect to YourProject.Web/web.config and YourProject.Tests/App.config (since some dependencies will be looking for an older version of Iesi.Collections): - - - - -#) Within your Fluent NHibernate mapping files, rename .IsInverse() to .Inverse() -#) If you're using Fluent NHibernate auto mapping persistence, do the following account for the fact that you can no longer inherit from AutoMap: - 1) For each class that inherits from AutoMap, remove the AutoMap inheritance and implement IAutoMappingOverride instead. - 2) Move the contents of the constructor, which sets up the overrides, to the body of the following, prefixing each line with "map.": - public void Override(AutoMap mapping) { - // Your mapping overrides; e.g., mapping.Id(...); - } - 3) Within YourProject.Data.NHibernateMaps.AutoPersistenceModelGenerator, append the following extension method to the mappings creation: - .MapConventionOverridesFromAssemblyOf(); -#) Update YourProject.Web/Scripts/jquery*.js with 1.3.2 versions available in Northwind sample project -#) Update YourProject.Web/Views/web.config to reflect the respective content from the Northwind sample project -#) Within YourProject.Web/Global.asax.cs, change the following line: - container.RegisterControllersByArea(typeof(HomeController).Assembly); - to: - container.RegisterControllers(typeof(HomeController).Assembly); -#) Within YourProject.Web/Global.asax.cs, modify the Init() to reflect the locking mechanism shown within -#) Within YourProject.Tests/App.config, update the nunit assembly redirect to go to version 2.4.8.0 -#) Change calls to EntityIdSetter<>.SetIdOf() to EntityIdSetter.SetIdOf<>() -#) Update your Site.master to provide an overwritable title and to account for a known bug in MVC RC 1, described at http://haacked.com/archive/2009/01/27/controls-collection-cannot-be-modified-issue-with-asp.net-mvc-rc1.aspx -#) Either replace your CrudScaffolding project with a duplicate of the one from the Northwind project or use the guidance discussed in the below change log for modifications -#) (Optional) Add the following line to Global.asax.cs to Application_Start if you're client side code looks for dot-notation in generated input names: - HtmlHelper.IdAttributeDotReplacement = "."; -#) (Optional) Add Northwind.Web/Scripts/jquery-1.2.6.min-vsdoc.js and jquery-1.2.6-vsdoc.js to your project to enable jQuery IntelliSense -#) (Optional) Get rid of the code behind pages in favor of ViewMasterPage, ViewPage, ViewUserControl inheritance in the view's Master/Page/Control declaration. E.g.: Inherits="System.Web.Mvc.ViewPage". Be sure to include System.Web.Mvc before ViewPage and either move your domain imports ABOVE the page declaration or fully qualify the namespaces of your model object. -#) (Optional) Add MvcBuildViews to YourProject.Web.csproj and alter the Target/AfterBuild, following the details in the ASP.NET MVC RC release notes - -------- - -Changes to /src: - -Solution Wide: -* BREAKING CHANGE ~ Changed Entity.ID to Entity.Id for compliance with naming conventions (When you upgrade, don't do a simple find and replace as you'll change IDictionary, GUID and other such items; also pay attention when updating your IAutoPersistenceModelGenerator) - -VS Project Template: -* A CommonAssemblyInfo.cs is now included and added to all projects -* A YourProject.ApplicationServices class libraries now comes automatically with VS generated projects - -CrudScaffolding Generator: -* ScaffoldingGeneratorCommand.tt: Commented out "generator.Run()" by default to avoid inadvertent code generation -* Added reference to SharpArch.Core to have design by contract capablities -* Added reference to Inflector.Net.Inflector for pluralizing words -* Added assembly inclusion at the top of /Templates/BaseTemplate.tt and ScaffoldingGenerator.tt -* Replaced all references to "Pluralizer.ToPlural" with "Inflector.Net.Inflector.Pluralize" -* Modified /Templates/Web/Views/*.tt page/control declarations, and added imports where necessary, to support removal of code-behind pages -* Deleted Pluralizer.tt in favor of using Inflector.Net -* Deleted /Templates/Data/NHibernateMaps/ClassMapTemplate.tt due to VS project template and Northwind now using Fluent NHibernate auto persistence model -* Deleted /Templates/Web/Views/GeneralCodeBehindTemplate.tt and GeneralDesignerTemplate.tt because they're no longer necessary (nor recommended) -* Deleted /ScaffoldingEnums.tt as the enum has been moved to the newly added /EntityScaffoldingDetails.tt; had to also drop the include of this file from /Templates/ScaffoldingGenerator.tt -* Within /Templates/ScaffoldingGenerator.tt: - - Dropped import of GeneralCodeBehindTemplate.tt, GeneralDesignerTemplate.tt and Pluralizer.tt - - Dropped move of code behind and designer pages from MoveViewFilesTo() - - Dropped GenerateGeneralCodeBehindAndDesignerForViewPage() and all calls to it - - Dropped all calls to GeneralCodeBehindTemplate and GeneralDesignerTemplate -* Added /EntityScaffoldingDetails.tt to have a more expressive and complete means of generating entities -* Replaced all use of namespaceHierarchy, domainObjectName, properties, and artifactsToGenerate with instance of entityScaffoldingDetails; e.g., - - Replaced parameter set "domainObjectName, properties, namespaceHierarchy" with "entityScaffoldingDetails" - - Replaced "domainObjectName" with "entityScaffoldingDetails.EntityName" - - Replaced "namespaceHierarchy" with "entityScaffoldingDetails.NamespaceHierarchy" - - Replaced "artifactsToGenerate" with "entityScaffoldingDetails.ArtifactsToGenerate" - - Replaced "DomainObjectNamePlural" with "entityScaffoldingDetails.EntityNamePlural" -* Moved plural and camel case helper methods from /Templates/BaseTemplate.tt to EntityScaffoldingDetails.tt -* Added BaseTemplate.EntityBaseUrl to be able to retrieve the base URL of the entity being generated -* In each template, changed each constructor to accept EntityScaffoldingDetails and pass it to the constructor of BaseTemplate.tt -* Changed constructor of BaseTemplate.tt to accept EntityScaffoldingDetails and share it as a protected value to subclass templates -* Changed templates as follows (in this order): - - Replaced "DomainObjectNamePluralCamelCase" with "EntityScaffoldingDetails.EntityNamePluralCamelCase" - - Replaced "DomainObjectNamePlural" with "EntityScaffoldingDetails.EntityNamePlural" - - Replaced "DomainObjectNameCamelCase" with "EntityScaffoldingDetails.EntityNameCamelCase" - - Replaced "DomainObjectName" with "EntityScaffoldingDetails.EntityName" - - Carefully replaced "NamespaceHierarchy" with "EntityScaffoldingDetails.NamespaceHierarchy" - - Replaced "foreach (string propertyName in Properties.AllKey)" with "foreach (EntityProperty property in EntityScaffoldingDetails.EntityProperties)" and adjusted loop accordingly -* Within /Templates/Tests/Core/Web/Controllers/ControllerTestsTemplate.tt, deleted CanEnsureEntityCreationIsValid() method; it's doesn't prove anything with the new use of ModelState.IsValid on form submissions - -SharpArch.Core -* /DomainModel/BaseObject.cs: Modified Equals() to account for the fact that an object may be proxied by NHibernate when compared. -* /DomainModel/Entity.cs: Id is now excluded for XML serialization; see documentation FAQ for work around for Id serialization. -* /DomainModel/ValueObject.cs: == and != operator overloads have been added. -* /DomainModel/ValidatableObject.cs: This new class extracts the concrete validation that was being performed in Entity into a reusable superclass. (Entity now inherits from it.) -* BREAKING CHANGE ~ /PersistenceSupport/IRepository.cs: Changed GetAll and FindAll to return an IList rather than a List to be more loosely coupled. -* BREAKING CHANGE ~ /PersistenceSupport/NHibernate/INHibernateRepository.cs: Changed FindAll to return an IList rather than a List to be more loosely coupled. - -SharpArch.Data -* Between RC 1 and 2, added and then removed /NHibernate/FluentNHibernate/IAutoPeristenceModelConventionOverride.cs: In the RC 1 compatible code, I added this interface to serve as a base class for any Fluent NHibernate override classes; this was introduced because it's no longer allowed to inherit from AutoMap<> for overriding conventions. For RC 2, James Gregory, developer of Fluent NHibernate, was kind enough to port these capabilities into Fluent NHibernate itself; so this interface has been dropped in RC 2. -* Between RC 1 and 2, added and then removed /NHibernate/FluentNHibernate/AutoPersistenceModelExtensions.cs: In the RC 1 compatible code, I added this extension to AutoPersistenceModel to automatically apply any override classes from a specific assembly. With James Gregory's port of this functionality to Fluent NHibernate, this class has been dropped in the RC 2 compatible code. -* /NHibernate/Repository.cs: Changed GetAll and FindAll to return an IList rather than a List to be more loosely coupled. -* /NHibernate/NHibernateRepository.cs: Changed FindAll to return an IList rather than a List to be more loosely coupled. - -SharpArch.Testing -* BREAKING CHANGE ~ /EntityIdSetter.cs: Changed use of EntityIdSetter from EntityIdSetter<>.SetIdOf() to EntityIdSetter.SetIdOf<>() - -SharpArch.Web -* /Areas/AreaViewEngine.cs: Added a needed "useCache" variable to FindPartialView() and FindView() for RC compatibility -* /CommonValidator/ValidatableModelBinder.cs: This new class inherits DefaultModelBinder to introduce domain driven validation to the binding process. (This is in contrast to the MVC IDataErrorInfo which uses exceptions for raising validation issues. See the class comments for more information.) - -SharpArch.Web.Castle -* WindsorExtensions.cs: Dropped RegisterController() and RegisterControllersByArea() extension methods; MvCContrib has this fixed now - so need need for the extensions anymore. - -Northwind - All Projects -* Added CommonAssemblyInfo.cs to all projects and removed duplicate assembly info attributes. - -Northwind.ApplicationServices -* New class library to hold application services (see Evans' Domain Driven Design for more info about application services) - -Northwind.Web -* Within Northwind.Web.csproj (and VS project template), added post compiler step as outlined in http://webdevdotnet.blogspot.com/2009/02/aspnet-mvc-rc-compiler-post-build-step.html* Renamed Hibernate.cfg.xml to NHibernate.config so that you can't browse to it on the web server -* Global.asax.cs: - - Passed location of NHibernate.config to NHibernateSession.Init() - - For RC 1, I had within Application_Start, I added "ModelBinders.Binders.DefaultBinder = new ValidatableModelBinder();" to replace the default binder with one that seamlessly integrates CommonValidator capabilities; for RC 2 (the current release), I've removed this again to have more consistent post behavior between Create and Edit -* /Scripts/jquery*.js: Updated to 1.3.2 -* /Views/Organization/Employees/Index.aspx: Changed the delete link to an input button within a form which includes an anti-forgery token; deletes should only happen via POST requests for better security - -Northwind.Web.Controllers -* /Organization/EmployeesController.cs: - - Replaced validation mechanism with ModelState.IsValid which now leverages ValidatableModelBinder - - Moved transfer of form properties to persistent object to within ModelState.IsValid path - - Dropped RollbackTransaction since it's no longer necessary - - Dropped use of MvcValidationAdapter.TransferValidationMessagesTo since it's done via ValidatableModelBinder - - Added ValidateAntiForgeryToken to the post actions - -Northwind.Tests -* /Northwind.Data/NHibernateMaps/MappingIntegrationTests.cs: Renamed "Hibernate.cfg.xml" parameter to "NHibernate.config" (discussed under Northwind.Web changes) - ----------------------------------------------- ----------------------------------------------- -1.0 Beta (rev 337) - S#arp Architecture for ASP.NET MVC Beta with NHibernate 2.0.1 ----------------------------------------------- ----------------------------------------------- - -New and exciting in this release: -* CRUD Scaffolding generation is now available -* Added CommonServiceLocator to provide IoC agnosticism to the non-web layers -* You no longer need to register custom repositories to Castle Windsor...it's now done with voodoo magic (thanks Kyle Baley for the voodoo magic!) -* Added formal solution structure to help organize applications -* View "areas" are seamlessly supported as subfolders under the Views folder -* You no longer need to install ASP.NET MVC to create and edit S#arp Architecture projects -* NHibernate auto mapping is now available (thanks Jay Oliver!) -* Validation is now abstracted, similarly to CommonServiceLocator...use NHibernate Validator out of the box or supply your own! (thanks Luis Abreu for being a pain in the arse until this change was made! ;) - -------- - -Assembly Dependencies: -* ASP.NET MVC Beta -* Castle 1.0 RC3 -* Fluent NHibernate 0.1 (rev 207) -* Json.NET 3.5 Beta 2 -* Microsoft.Practices.ServiceLocation 1.0 (CommonServiceLocator) -* NHibernate 2.0.1 -* NHibernate.Validator 1.0 -* MvcContrib Beta (rev 697) -* Rhino.Mocks 3.5.0.1337 -* System.Data.SQLite.DLL 1.0.60.0 - -------- - -Changes to /src: - -SharpArch Solution -* All projects are now strongly signed with exception of SharpArch.Web.Castle (The MvcContrib dependency isn't signed; there's only one class in this SharpArch library, so you can move it to your project to sign everything.) -* Added support for Fluent NHibernate automapping (see http://groups.google.com/group/sharp-architecture/browse_thread/thread/ef799cfe75835cb4/468c6c18ae1cd239 for patch details which have been applied) - -SharpArch.Core -* BaseObject.cs ~ Introduced this base class to consolidate object comparison functionality used by both DomainObject and ValueObject -* BREAKING CHANGE ~ EnumDescription.cs: This class has been dropped from the library; it doesn't have anything to do with S#arp Architecture; if you miss it dearly, you can find it described at http://devlicio.us/blogs/billy_mccafferty/archive/2006/10/16/Show-User_2D00_Friendly-enum-Translations.aspx -* BREAKING CHANGE ~ Renamed IDomainObject.cs to IValidatable.cs to reflect what it's really doing; also simplified IValidatable to contain simply IsValid() -* BREAKING CHANGE ~ Dropped DomainObject.cs and PersistentObject.cs and replaced them with Entity.cs which now exists in /DomainModel namespace. Here are steps to take to accommodate: - 1) Do a solution wide find and replace of "PersistentObject" with "Entity" - 2) Change every call to ".ValidationMessages" to ".ValidationResults()" - 3) Manually add "using SharpArch.Core.DomainModel;" onto every page having an Entity -* ValueObject.cs: Added this value-object base class to support this missing base class for DDD -* See http://groups.google.com/group/sharp-architecture/browse_thread/thread/6c8e626535a47219 for a more thorough summary of the changes to SharpArch.Core and the validation infrastructure - -SharpArch.Data -* BREAKING CHANGE ~ Renamed Repository.GetByProperties(), Repository.GetUniqueByProperties(), Repository.GetByExample(), Repository.GetUniqueByExample() to FindAll(properties/example) and FindOne(properties/example) -* BREAKING CHANGE ~ Repository.cs: This now implements the simpler IRepository<> instead of INHibernateRepository<>; Moved the NHibernate specific methods Get(id, lockMode), Load(id), Load(id, lockMode), FindAll(exampleInstance), FindOne(exampleInstance), Save(entity), Update(entity), Evict(entity) to NHibernateRepository<>; If you write a custom repository which needs to implement methods from INHibernateRepository<>, you'll want to inherit from this new NHibernateRepository<> class -* /NHibernate/NHibernateSession.cs: Added RegisterInterceptor(IInterceptor) to be optionally invoked after you've initialized NHibernate configuration - -SharpArch.Web -* /Areas/AreaRouteHelper.cs: New class for supporting controller/view "areas" -* /Areas/AreaViewEngine.cs: New class for replacing the default view engine for supporting use of areas -* /JsonNet/JsonNetResult.cs: New ActionResult for returning Json.NET result -* BREAKING CHANGE ~ /CommonValidator/MvcValidationAdapter.cs: Moved from /NHibernate/Validator/MvcValidationAdapter.cs - -SharpArch.Web.Castle -* Added this library to house extension methods for Castle related to registering controllers and custom repositories - -Northwind Solution -* Modified solution structure to reflect the following - /MyProject - Contains MyProject.sln - /app - Contains the core project layers. - /MyProject.Core - /MyProject.Data - /MyProject.Web - /MyProject.Web.Controllers - /lib - Contains the solution items for the deployable application. - /db - Contains database schema information; e.g., the result of scaffolding and/or NHibernate's schema export. - /docs - Project documents. - /logs - Output location for log files. - /tests - /MyProject.Tests - /tools - /build - Empty folder for housing build related stuff. - /lib - Contains the solution items for the tests project and all other non-deployable assemblies. - /CrudScaffolding - Customizable CRUD, scaffolding generation code. -* Modified solution to accommodate controller/view "areas"; the change were numerous and should be reviewed within the patch associated with http://code.google.com/p/sharp-architecture/issues/detail?id=27 -* Moved all employee related artifacts (controller, domain, views, etc.) under a namespace of "Organization" to show how areas are used - -Northwind.Web.Controllers (formerly Northwind.Controllers) -* Added a reference to Microsoft.Practices.ServiceLocation.dll -* RouteRegistrar.cs: Registered map for "Root"; added ignore for favicon.ico -* Renamed this project from Northwind.Controllers to Northwind.Web.Controllers. To migrate this change to your own project: - In your project: - 0) Before starting this, clear out all your compiled bin directories to avoid NHibernate getting confused with obsolete DLLs lying around - 1) Renamed YourProject.Controllers to YourProject.Web.Controllers - 2) In YourProject.Web.Controllers' project properties, renamed Assembly name and Default namespace of "YourProject.Controllers" with "YourProject.Web.Controllers" - 3) Did a solution wide find and replace of "YourProject.Controllers" to "YourProject.Web.Controllers" - 4) Via VS, added the folder "YourProject.Web/Controllers" under YourProject.Tests and moved the contents of YourProject.Tests to this new folder; finally deleted the YourProject.Controllers folder from the YourProject.Tests project - 5) Successfully compiled all changes and closed VS - 6) Renamed the YourProject.Controllers folder to YourProject.Web.Controllers - 7) Reopened the SLN and replaced the missing project with the one from the renamed folder and then added a reference to YourProject.Tests and YourProject.Web - - In CrudScaffolding: - 1) Moved Templates/Controllers to Templates/Web/Controllers - 2) Moved Templates/Tests/Controllers to Templates/Tests/Web/Controllers - 3) Modified paths within Templates/ScaffoldingGenerator.tt to account for the moved files - 4) Did a *project* wide find and replace of ".Controllers" to ".Web.Controllers" - 5) Within ScaffoldingGenerator.tt, modified the third line under the GenerateControllerAndTests() method to be the following: - string targetPathRoot = testsRootFolder + solutionName + ".Tests\\" + solutionName + ".Web\\Controllers\\"; - 6) Within ScafolldingGenerator.tt, modified the third line under the AddFileToProject() method to be the following: - if (pathOfProjectFileToAddTo.IndexOf(project.Name + ".csproj") > -1) { - -Northwind.Core -* Added a reference to Microsoft.Practices.ServiceLocation.dll - -Northwind.Data -* Added a reference to Microsoft.Practices.ServiceLocation.dll - -Northwind.Tests -* Moved project to /NorthwindSample/tests/Northwind.Tests -* Added a reference to Microsoft.Practices.ServiceLocation.dll, Castle.Core.dll, Castle.MicroKernel.dll, Castle.Windsor.dll to support configuring IoC from the tests layer -* /Northwind.Controllers/RouteRegistrarTests.cs: Added call to "Clear()" the RouteTable during SetUp() -* /Northwind.Data/NHibernateMaps/MappingIntegrationTests.cs: Changed relative path to account for new solution structure; e.g., "../../../../app/Northwind.Web/Hibernate.cfg.xml" - -Northwind.Web -* Added a reference to Microsoft.Practices.ServiceLocation.dll -* Default.aspx.cs: Modified RewritePath to pass in false for the rebasePath parameter -* Global.asax.cs: Added CommonServiceLocator support and removed implementation of IContainerAccessor (use CSL instead) -* Northwind.Web.csproj: Removed "{603c0e0b-db56-11dc- -be95-000d561079b0};" from top to remove dependency on ASP.NET MVC being installed -* web.config: Changed relative path to log4net output file to reflect new solution structure; e.g., -* /CastleWindsor/CastleExtensions.cs: Added extension to find interfaces for custom repositories -* /CastleWindsor/ComponentRegistrar.cs: Replaced manual custom repository registrations with auto-registration of custom repositories; Added registration of IRepositoryWithTypedId and INHibernateRepositoryWithTypedId; Modified auto-bindings to account for the new NHibernateRepository<> and NHibernateRepositoryWithTypedId<,> classes - -Northwind Solution Items -* Added NorthwindSample/Solution Items/CommonServiceLocator.WindsorAdapter.dll -* Added NorthwindSample/Solution Items/Microsoft.Practices.ServiceLocation.dll - ----------------------------------------------- ----------------------------------------------- -0.9.114 - ASP.NET MVC Beta, NH 2.0.1, NHibernate.Validator, Fluent NHibernate, Castle Windsor ----------------------------------------------- ----------------------------------------------- - -New and exciting: -* A Visual Studio 2008 template project has been added under /TemplatesAndCodeGen to get your own S#arp Architecture project up and running quickly -* Replaced Ninject with Castle Windsor -* Added support for behavior driven unit testing -* Unit tests now use an in-memory SQLite database for testing data access methods along with providing an integration verification mechanism to check mappings against a live database - -------- - -Assembly Dependencies: -* ASP.NET MVC Beta -* Castle 1.0 RC3 -* Fluent NHibernate 0.1 -* NHibernate 2.0.1 -* NHibernate.Validator 1.0 -* MvcContrib Revision 635 (later than 0.0.1.137 release from CodePlex) -* Rhino.Mocks 3.5.0.1337 -* System.Data.SQLite.DLL 1.0.60.0 - -------- - -Changes to /src: - -** Search for "BREAKING CHANGE" below to find each of the breaking changes ** - -SharpArch.Data -* BREAKING CHANGE ~ Moved NHibernate/RepositoryUnitTestsBase.cs to SharpArch.Testing.NUnit/NHibernate and renamed it to be DatabaseRepositoryTestsBase. To fix, simply add a "using SharpArch.Testing.NUnit.NHibernate;" to any test fixture class which inherits from RepositoryUnitTestsBase and rename the parent to DatabaseRepositoryTestsBase - -SharpArch.Testing -* Added this new, stand-alone library to consolidate general, unit testing utilities -* PersistentObjectIdSetter.cs: Used to set the ID of a persistent object for unit testing purposes; this class was originally in Northwind.Tests - -SharpArch.Testing.NUnit -* Added this new, stand-alone library to support NUnit -* BehaviorSpecificiationTestsBase.cs: This optional text fixture base class provides a base class for BDD unit tests, as described at http://flux88.com/blog/the-transition-from-tdd-to-bdd/. -* SyntaxHelpers.cs: This optional extensions class adds a number of fluent NUnit syntax capabilities. To use, simply add a reference to SharpArch.Testing.NUnit to have them available from your unit tests. -* NHibernate/DatabaseRepositoryTestsBase.cs: This is the old SharpArch.Data/NHibernate/RepositoryUnitTestsBase.cs class provided for backwards compatibility. The preferred mechanism for database unit testing is using an in-memory database, described next. -* NHibernate/RepositoryBehaviorSpecificationTestsBase.cs: Provides an optional base class for developing behavior driven unit tests against an auto-generated database, suggested to be in-memory, SqlLite database. (See Northwind.Tests for an example.) -* NHibernate/RepositoryTestsBase.cs: Behaves similarly to the old SharpArch.Data/NHibernate/RepositoryUnitTestsBase.cs but auto-generates the database, suggested to be in-memory, SqlLite database. (See Northwind.Tests for an example.) - -SharpArch.Web -* BREAKING CHANGE ~ Ninject/ControllersAutoBindModule.cs: This class has been deleted. If you need it for backwards compatibility, you can get the code for this class from version 0.9.72 and put it into your application. - -SharpArch Solution Items -* BREAKING CHANGE ~ Deleted Ninject.Conditions.dll and Ninject.Core.dll. If you need them for backwards compatibility, you can get them from version 0.9.72 and add them to your application. -* Updated MvcContrib*.dll dependencies - -Northwind.Controllers: -* RouteRegistrar.cs: Added this class to pull route registration into the controllers layer. - -Northwind.Web -* /CastleWindsor/: Added support for Castle Windsor configuration within the class ComponentRegistrar.cs -* /NinjectModuldes/: Deleted this folder and replaced it with /CastleWindsor/ -* Hibernate.cfg.xml: Extracted NHibernate settings to this file and set the "Copy to Output Directory" to "Copy always" -* Global.asax.cs: Modified Global.asax.cs to pass in path to the HBM dll using "~" for the relative path; dropped the optional path to the Hibernate.cfg.xml now that it's being copied to the output directory (i.e., to the /bin directory); moved route registration to /Northwind.Controllers/RouteRegistrar.cs; added Castle Windsor configuration. -* web.config: Dropped assembly redirect for Ninject and added log4net configuration - -Northwind.Tests -* App.config: Removed "nhibernate.config.path" from appSettings; it now uses Hibernate.cfg.xml, discussed next -* Hibernate.cfg.xml: Added this file and set its "Copy to Output Directory" to "Copy always"; this now uses an in-memory SqlLite database for DB tests -* All DB test fixtures now inherit from either RepositoryTestsBase or RepositoryBehaviorSpecificationTestsBase using the in-memory database -* Northwind.Data/NHibernateMaps/MappingIntegrationTests.cs: Test fixture which tests every mapping file against the database sepcified in the application's "live" database NHibernate configuration file (e.g., the one found within the Northwind.Web project); this ensures that the "live" database is compliant with the mapping files since the unit tests are now using an in-memory database. - -Northwind.TestsUsingDevelopmentDatabase -* Added this new, stand-alone library to demonstrate unit testing against a "live" development database. The preferred mechanism is to use an in-memory database, as demonstrated within Northwind.Tests, but this is here to show backward compatibility for the previous approach. - -Northwind Solution Items -* Deleted Ninject.Conditions.dll, Ninject.Core.dll and MvcContrib.Ninject.dll -* Added Castle.MicroKernel.dll, Castle.Windsor.dll and MvcContrib.Castle.dll - -** Version Acknowledgements ** -* A big thanks goes out to Lee Carter for providing code for running DB unit tests within an in-memory SQLLite database. - ----------------------------------------------- ----------------------------------------------- -0.9.72 - ASP.NET MVC Beta, NH 2.0.1, Ninject 1.0, NHibernate.Validator 1.0, Fluent NHibernate 0.1 ----------------------------------------------- ----------------------------------------------- - -Migrating from 0.8.1 to 0.9.0 (see the Northwind sample code for implementation examples): -* Follow instructions for upgrading to ASP.NET MVC Beta. There were respective modifications made to web.config and assembly dependencies. Also included changes to Global.asax.cs and the inclusion of Default.aspx.cs -* Change the name of the "web.config" AppSetting within Northwind.Tests/App.config to "nhibernate.config.path" -* Add a new AppSetting within Northwind.Tests/App.config called "nhibernate.mapping.assembly" which contains the name of the assembly which holds the mapping artifacts -* Add an assembly redirect for NHibernate to app.config and web.config; Fluent NHibernate is a little behind -* Change any calls to myDao.CommitChanges() to myDao.DbContext.CommitChanges() -* Change any references to DomainSignatureComparable to DomainObject -* If you've overridden HasSameDomainObjectSignatureAs, changes the parameter type to IDomainObject (instead of DomainSignatureComparable) -* Rename references to SharpArch.Core.PersistenceSupport.IDao/IDaoWithTypedId to IRepository/IRepositoryWithTypedId (as a number of developers have rightly indicated is more inline with DDD) -* Rename references to SharpArch.Data.NHibernate.GenericDao/GenericDaoWithTypedId to Repository/RepositoryWithTypedId -* Rename references to SharpArch.Data/NHibernate/DaoTests.cs to RepositoryUnitTestsBase.cs -* Greatly simplified IRepository and moved NHibernate specific methods to SharpArch.Core/PersistenceSupport/NHibernate/INHibernateRepository.cs; consequently, SharpArch.Core/PersistenceSupport/IRepository.cs, which was IDao.cs, now contains the following breaking changes: - - LoadAll was changed to GetAll (changed to standardize "Get" as the retrieval keyword); - - Get(id, lockMode), GetByExample, GetUniqueByExample, Load(id), Load(id, lockMode), Save, Update and Evict were all moved to SharpArch.Core.PersistenceSupport.NHibernate.INHibernateRepository. -IRepository was simplified to provide a simpler mechanism that is more NHibernate agnostic and is simpler to understand and use. You may still wish to use the NHibernate-specific one. Consequently, decide if you'd like to use SharpArch.Core.PersistenceSupport.IRepository/IRepositoryWithTypedId or SharpArch.Core.PersistenceSupport.NHibernate.INHibernateRepository/INHibernateRepositoryWithTypedId and adjust your code, accordingly. There's nothing to stop you from using IRepository most of the time and INHibernateRepository on occassion...but I'd only recommend using it when absolutely necessary. For example, the only time the Northwind sample uses it is to support Save vs. Update for objects with assigned IDs (which are a bad practice to use anyway). -* Optionally rename your *Dao.cs classes to *Repository.cs to be consistent with the IRepository base interface. -* Optionally move NHibernate settings out of web.config into Hibernate.cfg.xml (the Northwind contains an example); if you do so, be sure to change the path in MyProject.Tests/app.config to point to the externalized file -* Optionally migrate your HBM files to Fluent NHibernate class maps within MyProject.Data. If you do so, be sure to delete the HBMs (or simply set their compile behavior to "Content" rather than "Embedded Resource" during the migration. You'll then need to change the mapping assembly information for NHibernate. REGARDLESS, you'll need to remove the assembly mapping property from your NHibernate configuration settings and modify the NHibernate session initialization within Global.asax.cs; see Northwind.Web/Global.asax.cs for an example. Currently, you have to provide the full path to the requested resources; I'm looking to simplify this if possible. - -*** Non Breaking Changes *** - -The documentation within /docs has been completely updated; I highly recommend you review it to see changes in action, particularly with respect to Fluent NHibernate. - -Modifications to /bin: -* All dependencies needed for your own project are now included in the bin folder - -Modifications to SharpArch: -* SharpArch.Core/PersistenceSupport: Added IPersistentObject and IDomainSignatureComparable to provide your own implementation, if you feel so inclined -* SharpArch.Data/NHibernate/NHibernateSession.cs: Inclusion of NHibernate.Validator. Optional NHibernate.Validator config file may be passed to NHibernateSession.Init within Global.asax.cs -* SharpArch.Data/NHibernate/NHibernateSession.cs: Init has been overloaded to to accept ISessionStorage without config file info. -* Marked both DomainSignatureAttribute and DomainSignatureComparable as Serializable (thanks athmer!) -* The Equals/GetHashCode has been split; Equals no longer uses the result of GetHashCode for the basis of equality checking. The affected classes include SharpArch.Core/DomainSignatureComparable.cs and SharpArch.Core/PersistenceSupport/PersistentObject.cs. Although the underlying mechanism for these methods were altered, it should introduce no breaking changes. -* The methods GetByProperties(IDictionary, propertyValuePairs) and GetUniqueByProperties have been added to IRepository and Repository. A unit test using this feature has been added to Northwind.Tests/Northwind.Data/CustomerDaoTests.cs -* IRepository now exposes IDbContext which provides capabilities such as CommitChanges, Begin/Commit/RollbackTransaction -* Added validation support methods to DomainObject - -Modifications to Northwind sample: -* Added full CRUD with validation for employee objects -* Modified Northwind.Core/Order.cs to show an example of overriding HasSameDomainObjectSignatureAs() -* Updated dynamic links to use Html.ActionLink -* Added a many-to-many example; specifically: - - Northwind.Core - * Employee has a many-to-many relationship to Territory objects. - * Territory has a many-to-many relationship back to Employee objects. This is the inverse side of the relationship. - * Region has a one-to-many relationship to Territory; the relationship is defined in the Territory HBM. - - - Northwind.Tests - * Northwind.Core/RegionTests.cs, TerritoryTests.cs, and EmployeeTests.cs test the domain model of the new classes. - * Northwind.Data/EmployeeDaoTests.cs and TerritoryDaoTests.cs test the many-to-many relationships in the database along with the many-to-one from Territory to Region. -* Made general clean ups to make the code simpler and with less typing (e.g., changed "<%= (ViewData.Model as Customer).CompanyName%>" to simply "<%= ViewData.Model.CompanyName%>") - ----------------------------------------------- ----------------------------------------------- -0.8.1 - MVC Preview 5, NH 2.0.1 and Ninject 1.0 ----------------------------------------------- ----------------------------------------------- - -Baseline history record +======================== +vNext +======================== + +8.0.1 +======================== +* .NET 6 support (upgrade from RC to release) + + +8.0.0 +======================== +BREAKING: +* Drop NetCoreApp 2.1 support. +* NHibernate test setup will not search and execute IAutoPersistenceModelGenerator. +* + +NEW FEATURES: +* Add .NET 6 preview support + +BUILD: +* Move common dependencies and attributes to Directory.Build.props. +* Tests are executed on both Linux and Windows now. + +BUGS: +* TestDatabaseSetup failure on Linux. + +PERFORMANCE: +* Improved performance of ApplyTransactionFilterBase.GetTransactionAttribute. + + +7.0.0 +======================== + +BREAKING: +* Removed EntityWithTypedId<> replaced with Entity<>, removed old entity class. Fix: replace `Entity` with `Entity`. +* Renamed IAsyncRepository to IRepository. +* Added IEquatable constraint on IEntity. +* IRavenDbRepository.FindAllAsync now returns Task, not Task>. +* Removed IRavenDbRepository.Session. + +IMPROVEMENTS: +* TransactionAttribute now implements Equitable<> + +S#arp 6.1.1 +======================== + +FIXES: + * #245: Exception in DependencyList on .NET 5/Linux + +======================== +S#arp 6.1 +======================== +NEW FEATURES: +* .NET 5 support. + +IMPROVEMENTS: +* Debug information now published as a symbol package to reduce build time and space used. +* Use tokens instead of credentials in build script. + + +======================== +S#arp 6.0 +======================== + +BREAKING CHANGES: +* Removed HasUniqueDomainSignatureWithGuidIdAttribute. +* Removed HasUniqueDomainSignatureWithStringIdAttribute. +* Added IEquatable constraint on IEntityWithTypedId. +* Removed synchronous methods from repositories. + +NEW FEATURES: +* SharpArch.NHibernate.DependencyInjection package. +* Asynchronous Transaction Manager. +* ASP.NET Core 3 / NetStandard2.1 support. + +IMPROVEMENTS: +* More control over NHibernate configuration. + +NEW FEATURES: +* SharpArch.NHibernate.DependencyInjection package; +* ASP.NET 3 / NetStandard2.1 support; + + +======================== +S#arp 5.0 +======================== + +BREAKING CHANGES: +* NetStandard2.0 support. +* Dropped Castle.Windsor integration for ASP.NET. +* New package SharpArch.Testing extracted from SharpArch.Testing.NUnit. +* SharpArch.NHibernate: NHibernateRepository.FindAll() now accepts IReadOnlyDictionary<> instead of IDictionary<>. +* SharpArch.Testing.NUnit renamed to SharpArch.Testing.NUnit.NHibernate: + * ISession.FlushAndEvict moved to SharpArch.NHibernate; +* Removed class SharpArch.Domain.FileCache; + * Binary serialization does not work for Type objects, see https://github.com/dotnet/corefx/issues/23213 - using FluentNHibernate for serialization + * TODO: introduce ISessionCache to support file and distributed caches (e.g. Redis) + +NEW MODULES +* SharpArch.Testing.Xunit.NHibernate - xUnit test helper for NHibernate; + * TransitentDatabaseTests (RepositoryTestsBase) - base class for tests on transient database (in-memory SQLite database which is created + and initialized for every test); + * LiveDatabaseTests (DatabaseRepositoryTests) - run tests using shared database, every test runs in separate transaction, which is rolled back + after test execution completes. + +======================== +S#arp 4.0 +======================== + +SharpArch.Web.Http.Castle + * [BREAKING] WindsorControllerExtensions renamed to WindsorHttpExtensions. + * [BREAKING] WindsorPropertyInjectionKernelExtensions replaced with internal SharpArch.Castle.Extensions.WindsorPropertyInjectionExtensions + (shared with SharpArch.Web.Mvc). + +SharpArch.Web.Mvc + * [BREAKING] WindsorExtensions renamed to WindsorMvcExtensions. + * [BREAKING] TransactionAttribute will commit Transaction in OnActionExecuted, not in OnResultExecuted(). + Recommended approach to access database in Controller, not View. + + +SharpArch.Testing.NUnit + * RepositoryTestsHelper refactored to TestDatabaseInitializer. + +BREAKING CHANGES: + * target platform changed to .NET 4.5. + * #124 removed Command/Query infrastructure + * Now uses C# 6.0 syntax. + * NHibernateSession replaced with ISession constructor injection. + * #145 Removed Design by Contract, TestSyntaxHelpers and CommonServiceLocator code and deoendencies. + + +FIXES: + * #54 - NHibernate event listeners registered through xml gets removed. + + +NEW FEATURES: + * ASP.NET MVC Filter property injection with Castle. + * WebAPI Filter property injection (for singleton dependencies only). + + +SAMPLES: + * Samples are now part of main repository; + + +INTERNALS: + * Builds moved to Appveyour; + * Use GitVersion (https://github.com/GitTools/GitVersion) to maintain SemVer; + + + +======================== +S#arp Architecture 2.1.0 +======================== + +* #60: Updated dependencies + +------ +Castle.Core 3.2.2^ +Castle.Windsor 3.2.1^ +FluentNHibernate 1.4^ +NHibernate 3.3.3.4001^ +RavenDB.Client 2.5.2750^ +Iesi.Collections 3.3.3.4001^ +Newtonsoft.Json 5.0.8^ +Machine.Specifications 0.6.1^ +System.Data.SQLite 1.0.90^ +NUnit 2.6.3^ +Moq 4.2.1312.1622^ +------ + +================================================== +S#arp Architecture 2.1.0RC for Visual Studio 2010 +================================================== + +* #40: RavenDb support completed +* #44: Add IRepository.Delete(id) + +------- + +Assembly Dependencies ("^" notes upgraded dependencies): ++ Castle.Core 3.1.0^ ++ Castle.Windsor 3.1.0^ ++ FluentNHibernate 1.3.0.733^ ++ NHibernate 3.3.2.4000^ ++ NewtonSoft.Json 4.5.11^ ++ RavenDB.Client 2.0.2230+ ++ NUnit 2.6.2^ +------- + + +================================================== +S#arp Architecture 2.0.3 for Visual Studio 2010 +================================================== + +Issues: +* #42: Show the expected/requested TResult in the exception message (Thanks Joel Purra @joelpurra). +* #41: Decorated the attribute classes with the AttributeUsageAttribute, to restrict usage of the attributes to their intended targets. (Thanks Sandor Drienhuizen @sandord) + +------- + +Assembly Dependencies ("^" notes upgraded dependencies): ++ NHibernate 3.3^ ++ FluentNHibernate 1.3.0.727 + +------- + + +================================================== +S#arp Architecture 2.0.0 for Visual Studio 2010 +================================================== + +Changes: +* Update solution structure and namespaces changed. + (SharpArch.Core => SharpArch.Domain) + (SharpArch.Data => SharpArch.Infrastructure) + (SharpArch.Web => SharpArch.Web.Mvc) +* Improved NuGet packaging. +* CQRS with ICommandHandler, IHandles and DomainEvents and NHibernateQuery abstract class +* Add ILinqRepository<> and query Specifications with implementation SharpArch.NHibernate.LinqRepository<> +* NHibernate runs DataAnnotations validation before persisting. +* EntityIdSetter and RepositoryTestsHelper moved to SharpArch.Testing.NUnit (Thanks Shatel) +* Remove ILMerging, seperate SharpArch packages for different features. +* Changes in the handling of NHibernateSessionFactory keys to allow for multi tenancy. + +Issues: +* #36: HasUniqueDomainSignature overrides specified error message. +* #35: ModelBinder does not bind child entities +* #14: EntityDuplicateChecker does not check ValueObject properties with DomainSignature attribute +* #26: Allow the Id field of a form model to be nullable (Thanks @ZekeLv) +* #15: Explicit cast to Entity made on PreUpdate NHibernate listener +* #31: Explicit cast to Entity made on PreInsert NHibernate listener (Thanks @MartinHornagold) + + +------- + +Assembly Dependencies ("^" notes upgraded dependencies): ++ CastleWindsor 3.0^ ++ NHibernate 3.2^ ++ FluentNHibernate 1.3^ ++ NewtonSoft.Json 4.0^ + +------- + +================================================== +S#arp Architecture 1.6.0 for Visual Studio 2008 and Visual Studio 2010 +================================================== + +New and exciting in this release: +* Added Configuration Caching for NHibernate (thanks Dan - SonOfMofo) +* Fluent NHibernate upgraded to 1.1.0.635. (thanks Seif) +* Added jquery.Validate.js and MicrosoftMvcJQueryValidation.js to generated web project and added references to them in master page. (thanks Igor) +* Generated CRUD forms enable client side validation. (thanks Igor) +* Updated factory assembly qualifier .svc file for Northwind sample Wcf.Web +* Updated invalid config sections in web.config for 2008 and 2010 templates +* Added NHibernateValidatorClientProvider and NHibernateValidatorProvider (thanks Igor) +* Added Parameter to rollback transaction when ModelState is invalid (thanks Inventti) +* Updated model binder to deal correctly with binding empty string to GUID Id types +* Updated the WcfSessionStorage class to automatically fall back to either a default (SimpleSessionStorage) or a session storage implementation of choice + whenever OperationContext.Current is null. This enables usage of NHibernate sessions in WCF host applications outside of WCF Operation methods without hassle. + whenever OperationContext.Current is null. This enables usage of NHibernate sessions in WCF host applications outside of WCF Operation methods without hassle. + +------- + +Assembly Dependencies ("^" notes upgraded dependencies) ++ FluentNhibernate.dll v1.1.0.635 +- FluentNHibernate.dll v1.0.0.636 + +------- + +Required Upgrade Steps and Changes: + +Upgrading to S#arp Architecture 1.6 from 1.5.2 RTM requires the following steps: + +#) SharpArch: Add the SharpArch.dll to your projects /lib and /tools/lib folders. + +#) SharpArch: Add the FluentNHibernate.dll from the /bin to your /lib and /tools/lib folders. + +#) SharpArch: Update the references in your project as needed + +================================================== +S#arp Architecture 1.5.2 for Visual Studio 2008 and Visual Studio 2010 +================================================== + +New and exciting in this release: +* Merged the SharpArch.* assemblies into a single assembly (SharpArch.dll) +* Updated both VS 2008 and 2010 templates to reflect the use of the merged assembly +* Updated SharpArch.build with custom script that allows the merging of the assemblies. Copys new merged assembly in to the root /bin folder. +* Updated VS 2010 template to account for changes in T4 Toolbox. It is no longer neccessary to build the CrudScaffolding projects prior to their use. (thanks Igor) +* Updated CRUD scaffolding (both normal and enterprise) to use Html.LabelFor, Html.TextBoxFor, and Html.ValidationMessageFor crud templates. (thanks Igor) +* Updated Northwind sample to use merged assembly +* Fixed issues with BuildUrlFromExpressionForAreas (thanks Dan) +* Fixed issue with NHibernateSession.Init - it was possible to encounter a NullReferenceException. (thanks Dan) +* Added new Build bat file. ClickToBuildAndMerge.bat will build the solution and then merge the assemblies into one. +* Added Moq back to bin +* Updated the VS templates to reflect the proper tools reference in the cs.proj files. VS 2008 is now 3.5 and VS 2010 is now 4.0. + +------- + +Assembly Dependencies ("^" notes upgraded dependencies): ++ SharpArch.dll +- SharpArch.*.dll + +------- + +Required Upgrade Steps and Changes: + +Upgrading to S#arp Architecture 1.5.2 from 1.5 RTM requires a few steps to accommodate upgraded dependencies (steps also reflected in the Northwind sample project and VS generated projects). For reference, each of the following steps is prefixed with the dependency that that the upgrade step is associated with: + +#) SharpArch: Remove the SharpArch.*.dll from your projects /lib and /tools folders. + +#) SharpArch: Add the SharpArch.dll to your projects /lib and /tools folders. + +#) SharpArch: Remove the references to SharpArch.*.dll from all of your projects. + +#) SharpArch: Add reference to SharpArch.dll to the projects that need references to any SharpArch.*.dll + + +================================================== +S#arp Architecture 1.5 for Visual Studio 2008 and Visual Studio 2010 +================================================== + +New and exciting in this release: +* Compatible with ASP.NET MVC 2.0 RTM +* Compatible with both Visual Studio 2008 and 2010 (Separate Templates) +* Upgraded dependencies including NHibernate 2.1.2.4, Fluent NHibernate 1.0.0.636, Castle.Core 1.2, Castle Windsor 2.1. See complete list below +* Added Enterprise CRUD scaffolding (thanks Billy) +* Updated CRUD scaffolding (both normal and enterprise) to make use of MVC Areas +* Updated Northwind sample to MVC 2 and updated assemblies. +* New SharpModelBinder.cs (thanks Michael Aird) +* Updated target platform to x86 from Any so that the SQL lite tests will pass +* Upgraded jQuery to 1.4.2 + +------- + +Assembly Dependencies ("^" notes upgraded dependencies): +^ ASP.NET MVC 2.0 +^ ASP.NET MVC 2.0 Futures +^ Castle Windsor 2.1 +^ Fluent NHibernate 1.0.0.636 built against NHibernate 2.1.2 +^ jQuery 1.4.2 +* Json.NET 3.5 Beta 4 +* log4net 1.2.10.0 +* Microsoft.Practices.ServiceLocation 1.0 (aka, "Common Service Locator") +^ MvcContrib 2.0.36.0 +^ NHibernate 2.1.2.4000 +^ NHibernate.Linq 1.1.0.1001 +^ NHibernate.Validator 1.2.0.3001 +^ NUnit 2.5.0.9122 (Installer in /tools) +^ Rhino.Mocks 3.6.0.0 +* System.Data.SQLite.DLL 1.0.60.0 +* T4 Toolbox 10.3 (Installer in /tools) + +------- + +Required Upgrade Steps and Changes: + +#) T4 Toolbox: Uninstall your current version and install the latest found in the /tools directory. + +#) Grab the latest dependencies from /bin and copy them to YourProject/lib and YourProject/tools/lib. To make it easy to figure out which DLLs go into which folder, create a new project with the included VS Project Template and copy the DLLs out of the lib folders, respectively. + +#) Follow the instructions at http://www.asp.net/learn/whitepapers/aspnet-mvc2-upgrade-notes/ (skip steps 7 and 8) for upgrading your web project to an MVC 2 application. + + +Upgrading to S#arp Architecture 1.5 RTM from 1.0 RTM requires a few steps to accommodate upgraded dependencies (steps also reflected in the Northwind sample project and VS generated projects). For reference, each of the following steps is prefixed with the dependency that that the upgrade step is associated with: + +#) ASP.NET MVC: If you have any previous versions of ASP.NET MVC 2 installed, you must uninstall them and optionally may install ASP.NET MVC 2.0 + +#) T4 Toolbox: Uninstall any previous version of T4 Toolbox and install T4 Toolbox 10.3 (installer found in /tools) + +#) T4 Toolbox: Replace your version of CrudScaffolding with updated version from http://github.com/codai/Sharp-Architecture/tree/master/src/NorthwindSample/tools/CrudScaffolding/ + +#) Enterprise Crud Scaffolding: Create a new project from the updated templates and add the CrudScaffoldingForEnterpriseApps project located at //Tools/CrudScaffoldingForEnterpriseApp to your project. You will then need to create a folder named "schema" under the /db folder. + +#) SharpArch: To easily update all the assembly references in your existing project, create a new project using the S#arp Architecture VS project template and copy the assemblies from /lib and /tools/lib to your project's respective folders (You could also copy them from the trunk's /bin folder, but using a generated project is simpler.) + +#) SharpArch: Within YourProject.Web/Global.asax.cs, add AreaRegistration.RegisterAllAreas(); just above RouteRegistrar.RegisterRoutesTo(RouteTable.Routes); + +#) Castle: Within YourProject.Tests/App.config, configure assemly redirects to reflect the following: + + + + + + + + + + +#) Castle: Within YourProject.Web/Web.config, configure assemly redirects to reflect the following: + + + + + + + + + +#) Areas: If you currently use areas, you will need to add an AreaRegistration file. The naming convention is AreaRegistration. To see an example file please go here: + http://github.com/codai/Sharp-Architecture/tree/master/src/NorthwindSample/app/Northwind.Web.Controllers/Organization/OrganizationAreaRegistration.cs + + You will need to convert your YourProject.Web.Controllers/RouteRegistrar.cs to use normal MVC 2 Map Routes. If my existing file looks as such: + + using System.Web.Mvc; + using System.Web.Routing; + using SharpArch.Web.Areas; + + namespace MyProject.Web.Controllers + { + public class RouteRegistrar + { + public static void RegisterRoutesTo(RouteCollection routes) + { + routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); + routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" }); + routes.IgnoreRoute("{*xsd}", new { xsd = @"(.*/)?.xsd(/.*)?" }); + routes.IgnoreRoute("{*css}", new { css = @"(.*/)?.css(/.*)?" }); + + routes.CreateArea("Administration/Scaffolding", "MyProject.Web.Controllers.Administration.Scaffolding", + routes.MapRoute(null, "Administration/Scaffolding/{controller}/{action}/{id}", new { action = "Index", id = "" }) + ); + + routes.CreateArea("Administration", "MyProject.Web.Controllers.Administration", + routes.MapRoute(null, "Administration/FacilityOperations/{action}/{id}", new{ controller = "FacilityOperations", action = "Index", id = ""}), + routes.MapRoute(null, "Administration/{controller}/{action}/{id}", new { controller = "Administration", action = "Index", id = "" }) + ); + + //Root Area + routes.CreateArea("Default", "MyProject.Web.Controllers", + routes.MapRoute(null, "Fax/Refax/{faxNumber}/{id}/{message}", new { controller="Fax", action="Refax", faxNumber = "", id = "", message = "" }), + routes.MapRoute("ScheduleGrid", "Schedule/Show/{encId}/{departmentId}", new { controller = "Schedule", action = "Show", encId="", departmentId="" }), + routes.MapRoute("SchedulePopUp", "Schedule/PopUp/{encId}/{departmentId}", new { controller = "Schedule", action = "PopUp", encId = "", departmentId = "" }), + routes.MapRoute(null, "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = "" }) + ); + } + } + } + + It would look like this after my conversion: + + using System.Web.Mvc; + using System.Web.Routing; + using SharpArch.Web.Areas; + + namespace MyProject.Web.Controllers + { + public class RouteRegistrar + { + public static void RegisterRoutesTo(RouteCollection routes) + { + routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); + routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" }); + routes.IgnoreRoute("{*xsd}", new { xsd = @"(.*/)?.xsd(/.*)?" }); + routes.IgnoreRoute("{*css}", new { css = @"(.*/)?.css(/.*)?" }); + + + routes.MapRoute(null, "Fax/Refax/{faxNumber}/{id}/{message}", new { controller="Fax", action="Refax", faxNumber = "", id = UrlParameter.Optional, message = "" }); + routes.MapRoute("ScheduleGrid", "Schedule/Show/{encId}/{departmentId}", new { controller = "Schedule", action = "Show", encId=UrlParameter.Optional, departmentId=UrlParameter.Optional }); + routes.MapRoute("SchedulePopUp", "Schedule/PopUp/{encId}/{departmentId}", new { controller = "Schedule", action = "PopUp", encId = UrlParameter.Optional, departmentId = UrlParameter.Optional }); + routes.MapRoute(null, "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional }); + } + } + } + +------- + +Change Log + +Due to the amount of changes that occured with the conversion to MVC 2, an accurate record was not kept. This upgrade should be considered as volatile when upgrading a previous version. In most cases, there will be no issues, +while others with large customized projects could encounter issues. + +================================================== +S#arp Architecture 1.0 Q3 2009 for Visual Studio 2008 +================================================== + +New and exciting in this release: +* Upgraded dependencies including NHibernate 2.1.1 GA, Fluent NHibernate 1.0 and NHibernate LINQ 1.0 +* New Many-to-Many convention added to VS project template (thanks John Ledger!) +* New DB schema generation (as a unit test) added to VS project template (thanks indomitablehef!) +* VS generated project now uses the HiLo algorithm for identity generation +* S#arp Architecture is now HornGet compatible (http://preview.tinyurl.com/ydoolwh) +* S#arp Architecture has moved to GitHub (http://github.com/codai/Sharp-Architecture) +* The wiki documentation has gotten much more complete (http://wiki.sharparchitecture.net) +* A contrib project, led by Tom Cabanski, is well underway (http://wiki.sharparchitecture.net/SharpArchContrib.ashx) +* WCF support within S#arp Architecture has been deprecated...it's moving to Sharp Contrib + +------- + +Assembly Dependencies ("^" notes upgraded dependencies): +* ASP.NET MVC 1.0 +* ASP.NET MVC 1.0 Futures +^ Castle Windsor 2.0 +^ Fluent NHibernate 1.0.0.594 built with NHibernate 2.1.1 GA +* jQuery 1.3.2 +^ Json.NET 3.5 Release 5 +* log4net 1.2.10.0 +* Microsoft.Practices.ServiceLocation 1.0 (aka, "Common Service Locator") +^ MvcContrib 1.0.0.9 +^ NHibernate 2.1.1 GA +^ NHibernate.Linq 1.0.0.4000 (rev 1101) built with NHibernate 2.1.1 GA +^ NHibernate.Validator 1.2.0.2003 (rev 1101) built with NHibernate 2.1.1 GA +^ NUnit NUnit-2.5.2.9222.msi (Installer in /tools) +^ Rhino.Mocks 3.6 +* System.Data.SQLite.DLL 1.0.60.0 +* T4 Toolbox 9.5.20.1 (Installer in /tools - not upgraded to latest available) + +------- + +Required Upgrade Steps and Changes: + +#) Grab the latest dependencies from /bin and copy them to YourProject/lib and YourProject/tools/lib. To make it easy to figure out which DLLs go into which folder, create a new project with the included VS Project Template and copy the DLLs out of the lib folders, respectively. + +#) Fluent NHibernate: Some breaking changes were introduced with the latest Fluent NHibernate. With many kudos to Tom Cabanski, he has written three blog posts describing upgrade steps from 1.0 RTM and changes made to the code: + 1) http://tomcabanski.spaces.live.com/blog/cns!E0D3617496209F45!124.entry + 2) http://tomcabanski.spaces.live.com/blog/cns!E0D3617496209F45!125.entry + 3) http://tomcabanski.spaces.live.com/blog/cns!E0D3617496209F45!166.entry + +#) NUnit: Install NUnit 2.5.2 using the installer found in /tools (optionally uninstalling previous versions) + +#) Castle: Within YourProject.Tests/App.config, you may drop the following assembly redirect if it exists: + + + + + + + + + + +------- + +Change Log + +SharpArch.Core: +* /PersistenceSupport/IDbContext.cs: Modified BeginTransaction to return an IDisposable for use with the "using" statment. (Issue 17) + +SharpArch.Data: +* /NHibernate/DbContext.cs: Now returns the ITransaction as IDisposable for use with "using" statements. (Issue 17) +* /NHibernate/NHibernateSession.cs: + - Modified ConfigureNHibernate() to allow configuration of NHibernate without a config file; allows you to use FNH exclusively. (Patch from Kyle) + - GetSessionFactoryFor() now returns null if the supplied factory key was not found; this would previously blow up. + +SharpArch.Tests: +* /SharpArch.Data/NHibernateSessionTests.cs: Added this set of tests to demonstrate how to initialize NHibernate with and without a config file. + +SharpArch.VsSharpArchTemplate +* Added MvcContrib.FluentHtml to YourProject.Web along with namespace inclusion in its web.config +* Removed WCF assemblies from VS generated project (these are moving to the Contrib project) +* /SharpArchApplicationTemplate/SharpArchProject.Data/NHibernateMaps/Conventions/PrimaryKeyConvention.cs: Changed default Id generation to use the HiLo algorithm. Requires a hibernate_unique_key table with a next_hi int column. (Issue 5) +* /SharpArchApplicationTemplate/SharpArchProject.Data/NHibernateMaps/Conventions/ForeignKeyConvention.cs, HasManyToManyConvention.cs, ManyToManyTableNameConvention.cs: Added classes to support Many-to-Many convention. +* /SharpArchApplicationTemplate/SharpArchProject.Data/NHibernateMaps/AutoPersistenceModelGenerator.cs: Modified GetConventions() to account for new Many-to-Many convention. +* /SharpArchApplicationTemplate/SharpArchProject.Tests/SharpArchProject.Data/NHibernateMaps/MappingIntegrationTests.cs: Added CanGenerateDatabaseSchema() test to output database schema SQL to console. + +SharpArch.Web: +* /ModelBinder/EntityCollectionValueProviderResult.cs: Fixed problem with GUID Ids. (Issue 12) + +---------------------------------------------- +---------------------------------------------- +S#arp Architecture 1.0 RTM +---------------------------------------------- +---------------------------------------------- + +New and exciting in this release: +* Compatible with ASP.NET MVC 1.0 +* All upgraded dependencies including NHibernate 2.1 CR 1 +* We now have a community site at http://www.sharparchitecture.net, still a work in progress (a flippin' ginormous thank you to Kyle Baley for setting this up) +* S#arp Architecture documentation may now be found at http://wiki.sharparchitecture.net, still a work in progress (a huge thanks to Joe Lowrance for migrating the docs) +* Strongly typed action link for areas (SharpArch.Web.Areas.ActionLinkForAreas<> and BuildUrlFromExpressionForAreas<> - thanks Brad Buhrkuhl!) +* Fluent NHibernate now using configuration classes +* (Re)Introduced support for IIS 7 integrated mode +* Support for WCF has been added as SharpArch.Wcf for server support and SharpArch.WcfClient.Castle for auto-closing of the connection on the client (thanks Frank Laub!) +* SharpModelBinder has been introduced for much better form binding, including support for all association types; e.g., one-to-one, one-to-many, and many-to-one Entity associations +* Support for multiple databases outside of WCF communications (thanks Russell Thatcher, David Longnecker, James Broome and Howard van Rooijen for suggestions and input!) + +------- + +Assembly Dependencies: +* ASP.NET MVC 1.0 +* ASP.NET MVC 1.0 Futures +* Castle Windsor 2.0 +* Fluent NHibernate 0.1 (rev 539) built against NHibernate 2.1 CR 1 +* jQuery 1.3.2 +* Json.NET 3.5 Beta 4 +* log4net 1.2.10.0 +* Microsoft.Practices.ServiceLocation 1.0 (aka, "Common Service Locator") +* MvcContrib for MVC 1.0 (rev 959) +* NHibernate 2.1.0.3001 (2.1 CR 1) +* NHibernate.Linq 1.0 (rev 935) +* NHibernate.Validator 1.2.0.1004 (rev 935) +* NUnit 2.5.0.9122 (Installer in /tools) +* Rhino.Mocks 3.5.0.1337 +* System.Data.SQLite.DLL 1.0.60.0 +* T4 Toolbox 9.5.20.1 (Installer in /tools) + +------- + +Required Upgrade Steps + +Upgrading to S#arp Architecture 1.0 RTM from RC 2 requires a few steps to accommodate upgraded dependencies (steps also reflected in the Northwind sample project and VS generated projects). For reference, each of the following steps is prefixed with the dependency that that the upgrade step is associated with: + +#) ASP.NET MVC: If you have any previous versions of ASP.NET MVC installed, you must uninstall them and optionally may install ASP.NET MVC 1.0 + +#) NUnit: Install NUnit 2.5 using the installer found within /tools (optionally uninstalling previous versions) + +#) NUnit: Drop any usings of "using NUnit.Framework.SyntaxHelpers;" - this namespace no longer exists and has been merged into the NUnit.Framework namespace + +#) NUnit: Change any use of ExpectedException attributes to use Assert.Throws instead; see http://mint.litemedia.se/2009/05/30/new-expectedexception-model-in-nunit-25/ for details + +#) T4 Toolbox: Uninstall any previous version of T4 Toolbox and install T4 Toolbox 9.5.20.1 (installer found in /tools) + +#) T4 Toolbox: Replace your version of CrudScaffolding/EntityScaffoldingDetails.tt and CrudScaffolding/Templates/ScaffoldingGenerator.tt with updated versions from http://sharp-architecture.googlecode.com/svn/trunk/src/NorthwindSample/tools/CrudScaffolding/ + +#) SharpArch: To easily update all the assembly references in your existing project, create a new project using the S#arp Architecture VS project template and copy the assemblies from /lib and /tools/lib to your project's respective folders (You could also copy them from the trunk's /bin folder, but using a generated project is simpler.) + +#) SharpArch: Within YourProject.Tests/YourProject.Data/NHibernateMaps/MappingIntegrationTests.cs, add a reference to "using SharpArch.Testing.NHibernate;" to accommodate the move of RepositoryTestsHelper to the new namespace. + +#) SharpArch: Upgrade YourProject.Tests/YourProject.Data/NHibernateMaps/MappingIntegrationTests.cs to accommodate the changes that were made to support multiple databases (if not done, you will likely have breaking unit tests). To do so, compare your MappingIntegrationTests.cs to the one at http://sharp-architecture.googlecode.com/svn/trunk/src/NorthwindSample/tests/Northwind.Tests/Northwind.Data/NHibernateMaps/MappingIntegrationTests.cs. The necessary change is the introduction of the session factory key. + +#) SharpArch: Within YourProject.Web/Global.asax.cs, migrate the call to NHibernateSession.Init() from the Global.asax.cs class' Init() method to its Application_BeginRequest() method using the following as an example: http://sharp-architecture.googlecode.com/svn/trunk/src/NorthwindSample/app/Northwind.Web/Global.asax.cs + +#) Fluent NHibernate: Within Fluent NHibernate class maps and overrides, replace .WithKeyColumn("YourColumnName") with .KeyColumnNames.Add("YourColumnName") + +#) Fluent NHibernate: If you're using Fluent NHibernate Auto Mapping, upgrade to Fluent NHibernate class conventions within YourProject.Data (You can look at the Northwind sample project for implementation examples but the Northwind DB is far from consistent and so there's an assortment of conventions and overrides in the Northwind sample project; accordingly, you'll have better luck having VS generate a S#arp Architecture project and then look at the internals of the generated project.): + *) Add a folder under /NHibernateMaps and add convention classes (see VS generated project for examples) + *) Within /NHibernateMaps/AutoPersistenceModelGenerator.cs, modify mappings setup to use new convention-per-class approach (see VS generated project for example) + *) See http://wiki.fluentnhibernate.org/show/ConvertingToNewStyleConventions for further guidance + +#) NHibernate: Within YourProject.Tests.YourProject.Data.NHibernateMaps.MappingIntegrationTests.cs, modify CanConfirmDatabaseMatchesMappings() to reflect the following: + [Test] + public void CanConfirmDatabaseMatchesMappings() { + IDictionary allClassMetadata = + NHibernateSession.SessionFactory.GetAllClassMetadata(); + + foreach (KeyValuePair entry in allClassMetadata) { + NHibernateSession.Current.CreateCriteria(entry.Value.GetMappedClass(EntityMode.Poco)) + .SetMaxResults(0).List(); + } + } + +#) NHibernate: Within YourProject.Tests, add a reference to NHibernate.ByteCode.Castle.dll + +#) NHibernate: Within YourProject.Web, add a reference to NHibernate.ByteCode.Castle.dll + +#) Castle: Within YourProject.Tests/App.config, configure assemly redirects to reflect the following: + + + + + + + + + + +#) Castle: Within YourProject.Web/Web.config, configure assemly redirects to reflect the following: + + + + + + + + + + +#) NHibernate: Within YourProject.Tests/Hibernate.cfg.xml, add the following property: + NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle + +#) NHibernate: Within YourProject.Web/NHibernate.config, add the following property: + NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle + +------- + +Change Log + +Solution Wide Changes: + +* Updated all dependencies; only NHibernate and Fluent NHibernate had breaking changes, which were addresed in the upgrade steps above + +======= +Changes to SharpArch: + +SharpArch.Core: +* Possibly BREAKING CHANGE (but not likely) ~ /DomainModel/BaseObject.cs: Changed HasSameObjectSignatureAs() to be public instead of protected since GetSignatureProperties() is also public and is a useful method to expose. This will cause a build error if you've overridden this method; to fix, simply change the visibility of the overridden method to public. +* /DomainModel/BaseObjectEqualityComparer.cs: Added this class to provide support for LINQ set operators, such as Intersect. +* /DomainModel/Entity.cs: Modified the GetHashCode to cache the hashcode calculation and to use the object's Id in the calculation for persistent objects. This was done because GetHashCode() was previously ignoring the Id property for Entities; therefore, two Entity instances which didn't have any domain signature properties were returning different hashcode values even if they had the same Id. + +SharpArch.Data: +* Possibly BREAKING CHANGE (but not likely) ~ /NHibernate/DbContext.cs: Removed singleton behavior and added constructor parameter for session factory key to support multiple databases. +* /NHibernate/EntityDuplicateChecker.cs: Added factory key lookup for support of multiple databases. +* Possibly BREAKING CHANGE (but not likely) ~ /NHibernate/ISessionStorage.cs: Added FactoryKey property to support look-up for multiple database support and also moved this interface to its own file - I prefer having one class/interface per file. +* /NHibernate/NHibernateInitializer.cs: Added this class to assist with initializing the NHibernate session once and only once; this was introduced to help support running in IIS 7 integrated mode. +* Possibly BREAKING CHANGE (but not likely) ~ /NHibernate/NHibernateSession.cs: Changed SessionFactory and Storage to be Dictionary objects to support multiple databases; added plural named properties of each, accordingly. The singular version remain for backward compatibility and to make it easier to maintain a single database application. +* /NHibernate/NHibernateSession.cs: Within CreateSessionFactoryFor(), added ".ConventionDiscovery.AddAssembly(assembly);" calls after "m.FluentMappings.AddFromAssembly(assembly)" for altering non-automapped conventions. (Issue-101) +* /NHibernate/Repository.cs: Added factory key lookup for support of multiple databases. Also now passing factory key to DB context, accordingly. +* /NHibernate/SessionFactoryAttribute.cs: Introduced this attribute to be used on repositories to designate which session factory its associated with. It does not need to be used for single database scenarios or for your "default" database. + +SharpArch.Testing.NUnit/MbUnit: +* /NHibernate/RepositoryTestsHelper.cs: Dropped the previously 4th parameter, a bool for formatting, to support the modified signature of NHibernate's SchemaExport.Execute() +* BREAKING CHANGE ~ /NHibernate/RepositoryTestsHelper.cs: Moved this helper class to SharpArch.Testing.NHibernate as it does not have dependencies on NUnit nor on MbUnit + +SharpArch.Web: +* /CommonValidator/MvcValidationAdapter.cs: Added method overload to allow custom prefix to model state errors instead of the class name. +* /ModelBinder/EntityValueProviderResult.cs: Added support for Guid Ids + +SharpArch.Wcf: +* Added this class library to support WCF. WCF does NOT currently support multiple databases. + +SharpArch.Web +* /Areas/LinkForAreasExtensions.cs: Added this class to provide the strongly typed ActionLinkForAreas<> and BuildUrlFromExpressionForAreas<>. +* /Areas/LinkForAreasExtensions.cs: Added this class to provide the strongly typed ActionLinkForAreas<> and BuildUrlFromExpressionForAreas<>. Accordingly, you can now replace hardcoded links to areas with Html.ActionLinkForAreas<>. You'll also likely want to add the following to your web.config's namespaces tag so that you don't have to import it for every ActionLinkForAreas: +* /CommonValidator/ValidatableModelBinder.cs: Marked this as obsolete in favor of using SharpModelBinder (referenced next) +* /ModelBinder/SharpModelBinder.cs: Added this model binder to replace the use of DefaultModelBinder (see documentation for details) +* /ModelBinder/EntityValueProviderResult.cs: Added this support class for SharpModelBinder (see documentation for details) +* /NHibernate/WebSessionStorage: Added overloaded constructor to accept a factory key to support multiple database sessions. +* /NHibernate/TransactionAttribute: Added option for passing in factory key to support multiple database. Also modified this transaction to rollback the transaction if a problem is encountered. + +======= +Changes to Northwind (all changes also made to VS project template and Employee CRUD pages): + +CrudScaffolding +* /Templates/Tests/Web/Controllers/ControllerTestsTemplate.tt: Modified CanEnsureEntityNameCreationIsValid() to account for fact that ModelState is not being modified during testing (it'll redirect due to invalid entity, but it won't show errors in the ModelState by default) +* /Templates/Web/Controllers/ControllerTemplate.tt: + - Added an EntityNameFormViewModel as a DTO between the controller and the entity form in both the Create/Edit (GET) action methods + - Modified Create/Edit (POST) to account for SharpModelBinder behavior +* /Templates/Web/Views/DomainObjectFormTemplate.tt: + - Replaced "id" hidden input id to be "EntityName.Id" to support SharpModelBinder + - Now inherits from ViewUserControl with a generic parameter of a form view model DTO to make it easier to send other items to the form such as lists for drop down boxes + - Changed hidden "id" input to be named "EntityName.Id" to support binding within SharpModelBinder + - Changed cancel button to use Html.BuildUrlFromExpression instead of hardcoding the back link +* /Templates/Web/Views/EditTemplate.tt: + - Got rid of redundant passing of ViewData to user control + - Added use of enum for looking for page message so that the ViewData index is strongly typed +* /Templates/Web/Views/IndexTemplate.tt: Now using Html.BuildUrlFromExpression for the URL behind the cancel button (more strongly typed) +* /Templates/Web/Views/Show.tt: Wrapped all outputs within Server.HtmlEncode() to protect against JavaScript injection attacks +* /Templates/Web/Views/*.tt: Changed

            to

            at top of pages since they're primary page titles + +Northwind.Tests +* /Northwind.Data/NHibernateMaps/MappingIntegrationTests.cs: Introduced factory key to isolate the integration tests session factory from the other tests. Also set the SessionFactory and Storage to null before and after running the test for backwards compatibility reasons; in this way, existing tests that assume a single database don't have to be modified to account for the fact that a different session factory is being used by the MappingIntegrationTests class. + +Northwind.Web +* /Global.asax.cs: + - Added SharpModelBinder as the default binder with "ModelBinders.Binders.DefaultBinder = new SharpModelBinder();" + - Moved initialization of NHibernate session to Application_BeginRequest with new NHibernateInitializer to support IIS 7 integrated mode + +Northwind.Web.Controllers +* /ControllerEnums.cs: Added this class to hold, at the very least, a strongly typed enum for global items added to ViewData. + +---------------------------------------------- +---------------------------------------------- +S#arp Architecture 1.0.48.410 RC 2 with ASP.NET MVC RC 2 and NHibernate 2.0.1 +---------------------------------------------- +---------------------------------------------- + +Version Acknowledgements: +* A huge thanks goes out to Kyle Baley and Simone Busoli who have been tremendously assistive to the #Arch community and the project during this recent push + +New and exciting in this release: +* Compatible with ASP.NET MVC RC 2 +* VS template project includes Fluent NHibernate auto persistence mapping by default +* Much more complete and extensible CRUD scaffolding generator - it's completely touch-up free for many scenarios +* Performance of unit tests using SQLite has been improved 20% (thanks Jay Oliver!) +* Added crazy cool anti-forgery voodoo magic to the CRUD scaffolding generator for creating, editing and deleting items (uh, thanks MVC team!) +* New empty class library, called YourProject.ApplicationServices, now gets added to VS generated projects +* S#arp Architecture now has a CI home with http://teamcity.codebetter.com/overview.html (thanks Kyle and Simone!) + +------- + +Assembly Dependencies: +* ASP.NET MVC RC 2 +* ASP.NET MVC RC 1 Futures +* Castle 1.0 RC3 (rev 1038) +* Fluent NHibernate 0.1 (rev 381 - Does NOT include very recent Fluent NHibernate convention interfaces) +* jQuery 1.3.2 +* Json.NET 3.5 Beta 2 +* Microsoft.Practices.ServiceLocation 1.0 (aka, "Common Service Locator") +* MvcContrib for MVC RC (rev 903) +* NHibernate 2.0.1 GA +* NHibernate.Validator 1.2.0 (rev 809) +* NUnit 2.4.8 +* Rhino.Mocks 3.5.0.1337 +* System.Data.SQLite.DLL 1.0.60.0 +* T4 Toolbox 9.1.20.1 + +------- + +Upgrading to S#arp Architecture RC 2 from Beta (steps also reflected in the Northwind sample project): +#) If you have any previous versions of ASP.NET MVC installed, uninstall them and install ASP.NET MVC RC 2 +#) Install NUnit 2.4.8 +#) Upgrade T4 Toolbox to 9.1.20.1 AND PATCH IT, following the instructions in the "Installing and Configuring Prerequisites" of the documentation +#) Update assembly dependencies from trunk/bin into your application's lib and /tools/lib folders +#) Modify using statements from "using NHibernate.Validator;" to "using NHibernate.Validator.Constraints;" +#) Change all reference to anyEntity.ID to anyEntity.Id. +#) Add the following assembly redirect to YourProject.Web/web.config and YourProject.Tests/App.config (since some dependencies will be looking for an older version of Iesi.Collections): + + + + +#) Within your Fluent NHibernate mapping files, rename .IsInverse() to .Inverse() +#) If you're using Fluent NHibernate auto mapping persistence, do the following account for the fact that you can no longer inherit from AutoMap: + 1) For each class that inherits from AutoMap, remove the AutoMap inheritance and implement IAutoMappingOverride instead. + 2) Move the contents of the constructor, which sets up the overrides, to the body of the following, prefixing each line with "map.": + public void Override(AutoMap mapping) { + // Your mapping overrides; e.g., mapping.Id(...); + } + 3) Within YourProject.Data.NHibernateMaps.AutoPersistenceModelGenerator, append the following extension method to the mappings creation: + .MapConventionOverridesFromAssemblyOf(); +#) Update YourProject.Web/Scripts/jquery*.js with 1.3.2 versions available in Northwind sample project +#) Update YourProject.Web/Views/web.config to reflect the respective content from the Northwind sample project +#) Within YourProject.Web/Global.asax.cs, change the following line: + container.RegisterControllersByArea(typeof(HomeController).Assembly); + to: + container.RegisterControllers(typeof(HomeController).Assembly); +#) Within YourProject.Web/Global.asax.cs, modify the Init() to reflect the locking mechanism shown within +#) Within YourProject.Tests/App.config, update the nunit assembly redirect to go to version 2.4.8.0 +#) Change calls to EntityIdSetter<>.SetIdOf() to EntityIdSetter.SetIdOf<>() +#) Update your Site.master to provide an overwritable title and to account for a known bug in MVC RC 1, described at http://haacked.com/archive/2009/01/27/controls-collection-cannot-be-modified-issue-with-asp.net-mvc-rc1.aspx +#) Either replace your CrudScaffolding project with a duplicate of the one from the Northwind project or use the guidance discussed in the below change log for modifications +#) (Optional) Add the following line to Global.asax.cs to Application_Start if you're client side code looks for dot-notation in generated input names: + HtmlHelper.IdAttributeDotReplacement = "."; +#) (Optional) Add Northwind.Web/Scripts/jquery-1.2.6.min-vsdoc.js and jquery-1.2.6-vsdoc.js to your project to enable jQuery IntelliSense +#) (Optional) Get rid of the code behind pages in favor of ViewMasterPage, ViewPage, ViewUserControl inheritance in the view's Master/Page/Control declaration. E.g.: Inherits="System.Web.Mvc.ViewPage". Be sure to include System.Web.Mvc before ViewPage and either move your domain imports ABOVE the page declaration or fully qualify the namespaces of your model object. +#) (Optional) Add MvcBuildViews to YourProject.Web.csproj and alter the Target/AfterBuild, following the details in the ASP.NET MVC RC release notes + +------- + +Changes to /src: + +Solution Wide: +* BREAKING CHANGE ~ Changed Entity.ID to Entity.Id for compliance with naming conventions (When you upgrade, don't do a simple find and replace as you'll change IDictionary, GUID and other such items; also pay attention when updating your IAutoPersistenceModelGenerator) + +VS Project Template: +* A CommonAssemblyInfo.cs is now included and added to all projects +* A YourProject.ApplicationServices class libraries now comes automatically with VS generated projects + +CrudScaffolding Generator: +* ScaffoldingGeneratorCommand.tt: Commented out "generator.Run()" by default to avoid inadvertent code generation +* Added reference to SharpArch.Core to have design by contract capablities +* Added reference to Inflector.Net.Inflector for pluralizing words +* Added assembly inclusion at the top of /Templates/BaseTemplate.tt and ScaffoldingGenerator.tt +* Replaced all references to "Pluralizer.ToPlural" with "Inflector.Net.Inflector.Pluralize" +* Modified /Templates/Web/Views/*.tt page/control declarations, and added imports where necessary, to support removal of code-behind pages +* Deleted Pluralizer.tt in favor of using Inflector.Net +* Deleted /Templates/Data/NHibernateMaps/ClassMapTemplate.tt due to VS project template and Northwind now using Fluent NHibernate auto persistence model +* Deleted /Templates/Web/Views/GeneralCodeBehindTemplate.tt and GeneralDesignerTemplate.tt because they're no longer necessary (nor recommended) +* Deleted /ScaffoldingEnums.tt as the enum has been moved to the newly added /EntityScaffoldingDetails.tt; had to also drop the include of this file from /Templates/ScaffoldingGenerator.tt +* Within /Templates/ScaffoldingGenerator.tt: + - Dropped import of GeneralCodeBehindTemplate.tt, GeneralDesignerTemplate.tt and Pluralizer.tt + - Dropped move of code behind and designer pages from MoveViewFilesTo() + - Dropped GenerateGeneralCodeBehindAndDesignerForViewPage() and all calls to it + - Dropped all calls to GeneralCodeBehindTemplate and GeneralDesignerTemplate +* Added /EntityScaffoldingDetails.tt to have a more expressive and complete means of generating entities +* Replaced all use of namespaceHierarchy, domainObjectName, properties, and artifactsToGenerate with instance of entityScaffoldingDetails; e.g., + - Replaced parameter set "domainObjectName, properties, namespaceHierarchy" with "entityScaffoldingDetails" + - Replaced "domainObjectName" with "entityScaffoldingDetails.EntityName" + - Replaced "namespaceHierarchy" with "entityScaffoldingDetails.NamespaceHierarchy" + - Replaced "artifactsToGenerate" with "entityScaffoldingDetails.ArtifactsToGenerate" + - Replaced "DomainObjectNamePlural" with "entityScaffoldingDetails.EntityNamePlural" +* Moved plural and camel case helper methods from /Templates/BaseTemplate.tt to EntityScaffoldingDetails.tt +* Added BaseTemplate.EntityBaseUrl to be able to retrieve the base URL of the entity being generated +* In each template, changed each constructor to accept EntityScaffoldingDetails and pass it to the constructor of BaseTemplate.tt +* Changed constructor of BaseTemplate.tt to accept EntityScaffoldingDetails and share it as a protected value to subclass templates +* Changed templates as follows (in this order): + - Replaced "DomainObjectNamePluralCamelCase" with "EntityScaffoldingDetails.EntityNamePluralCamelCase" + - Replaced "DomainObjectNamePlural" with "EntityScaffoldingDetails.EntityNamePlural" + - Replaced "DomainObjectNameCamelCase" with "EntityScaffoldingDetails.EntityNameCamelCase" + - Replaced "DomainObjectName" with "EntityScaffoldingDetails.EntityName" + - Carefully replaced "NamespaceHierarchy" with "EntityScaffoldingDetails.NamespaceHierarchy" + - Replaced "foreach (string propertyName in Properties.AllKey)" with "foreach (EntityProperty property in EntityScaffoldingDetails.EntityProperties)" and adjusted loop accordingly +* Within /Templates/Tests/Core/Web/Controllers/ControllerTestsTemplate.tt, deleted CanEnsureEntityCreationIsValid() method; it's doesn't prove anything with the new use of ModelState.IsValid on form submissions + +SharpArch.Core +* /DomainModel/BaseObject.cs: Modified Equals() to account for the fact that an object may be proxied by NHibernate when compared. +* /DomainModel/Entity.cs: Id is now excluded for XML serialization; see documentation FAQ for work around for Id serialization. +* /DomainModel/ValueObject.cs: == and != operator overloads have been added. +* /DomainModel/ValidatableObject.cs: This new class extracts the concrete validation that was being performed in Entity into a reusable superclass. (Entity now inherits from it.) +* BREAKING CHANGE ~ /PersistenceSupport/IRepository.cs: Changed GetAll and FindAll to return an IList rather than a List to be more loosely coupled. +* BREAKING CHANGE ~ /PersistenceSupport/NHibernate/INHibernateRepository.cs: Changed FindAll to return an IList rather than a List to be more loosely coupled. + +SharpArch.Data +* Between RC 1 and 2, added and then removed /NHibernate/FluentNHibernate/IAutoPeristenceModelConventionOverride.cs: In the RC 1 compatible code, I added this interface to serve as a base class for any Fluent NHibernate override classes; this was introduced because it's no longer allowed to inherit from AutoMap<> for overriding conventions. For RC 2, James Gregory, developer of Fluent NHibernate, was kind enough to port these capabilities into Fluent NHibernate itself; so this interface has been dropped in RC 2. +* Between RC 1 and 2, added and then removed /NHibernate/FluentNHibernate/AutoPersistenceModelExtensions.cs: In the RC 1 compatible code, I added this extension to AutoPersistenceModel to automatically apply any override classes from a specific assembly. With James Gregory's port of this functionality to Fluent NHibernate, this class has been dropped in the RC 2 compatible code. +* /NHibernate/Repository.cs: Changed GetAll and FindAll to return an IList rather than a List to be more loosely coupled. +* /NHibernate/NHibernateRepository.cs: Changed FindAll to return an IList rather than a List to be more loosely coupled. + +SharpArch.Testing +* BREAKING CHANGE ~ /EntityIdSetter.cs: Changed use of EntityIdSetter from EntityIdSetter<>.SetIdOf() to EntityIdSetter.SetIdOf<>() + +SharpArch.Web +* /Areas/AreaViewEngine.cs: Added a needed "useCache" variable to FindPartialView() and FindView() for RC compatibility +* /CommonValidator/ValidatableModelBinder.cs: This new class inherits DefaultModelBinder to introduce domain driven validation to the binding process. (This is in contrast to the MVC IDataErrorInfo which uses exceptions for raising validation issues. See the class comments for more information.) + +SharpArch.Web.Castle +* WindsorExtensions.cs: Dropped RegisterController() and RegisterControllersByArea() extension methods; MvCContrib has this fixed now - so need need for the extensions anymore. + +Northwind - All Projects +* Added CommonAssemblyInfo.cs to all projects and removed duplicate assembly info attributes. + +Northwind.ApplicationServices +* New class library to hold application services (see Evans' Domain Driven Design for more info about application services) + +Northwind.Web +* Within Northwind.Web.csproj (and VS project template), added post compiler step as outlined in http://webdevdotnet.blogspot.com/2009/02/aspnet-mvc-rc-compiler-post-build-step.html* Renamed Hibernate.cfg.xml to NHibernate.config so that you can't browse to it on the web server +* Global.asax.cs: + - Passed location of NHibernate.config to NHibernateSession.Init() + - For RC 1, I had within Application_Start, I added "ModelBinders.Binders.DefaultBinder = new ValidatableModelBinder();" to replace the default binder with one that seamlessly integrates CommonValidator capabilities; for RC 2 (the current release), I've removed this again to have more consistent post behavior between Create and Edit +* /Scripts/jquery*.js: Updated to 1.3.2 +* /Views/Organization/Employees/Index.aspx: Changed the delete link to an input button within a form which includes an anti-forgery token; deletes should only happen via POST requests for better security + +Northwind.Web.Controllers +* /Organization/EmployeesController.cs: + - Replaced validation mechanism with ModelState.IsValid which now leverages ValidatableModelBinder + - Moved transfer of form properties to persistent object to within ModelState.IsValid path + - Dropped RollbackTransaction since it's no longer necessary + - Dropped use of MvcValidationAdapter.TransferValidationMessagesTo since it's done via ValidatableModelBinder + - Added ValidateAntiForgeryToken to the post actions + +Northwind.Tests +* /Northwind.Data/NHibernateMaps/MappingIntegrationTests.cs: Renamed "Hibernate.cfg.xml" parameter to "NHibernate.config" (discussed under Northwind.Web changes) + +---------------------------------------------- +---------------------------------------------- +1.0 Beta (rev 337) - S#arp Architecture for ASP.NET MVC Beta with NHibernate 2.0.1 +---------------------------------------------- +---------------------------------------------- + +New and exciting in this release: +* CRUD Scaffolding generation is now available +* Added CommonServiceLocator to provide IoC agnosticism to the non-web layers +* You no longer need to register custom repositories to Castle Windsor...it's now done with voodoo magic (thanks Kyle Baley for the voodoo magic!) +* Added formal solution structure to help organize applications +* View "areas" are seamlessly supported as subfolders under the Views folder +* You no longer need to install ASP.NET MVC to create and edit S#arp Architecture projects +* NHibernate auto mapping is now available (thanks Jay Oliver!) +* Validation is now abstracted, similarly to CommonServiceLocator...use NHibernate Validator out of the box or supply your own! (thanks Luis Abreu for being a pain in the arse until this change was made! ;) + +------- + +Assembly Dependencies: +* ASP.NET MVC Beta +* Castle 1.0 RC3 +* Fluent NHibernate 0.1 (rev 207) +* Json.NET 3.5 Beta 2 +* Microsoft.Practices.ServiceLocation 1.0 (CommonServiceLocator) +* NHibernate 2.0.1 +* NHibernate.Validator 1.0 +* MvcContrib Beta (rev 697) +* Rhino.Mocks 3.5.0.1337 +* System.Data.SQLite.DLL 1.0.60.0 + +------- + +Changes to /src: + +SharpArch Solution +* All projects are now strongly signed with exception of SharpArch.Web.Castle (The MvcContrib dependency isn't signed; there's only one class in this SharpArch library, so you can move it to your project to sign everything.) +* Added support for Fluent NHibernate automapping (see http://groups.google.com/group/sharp-architecture/browse_thread/thread/ef799cfe75835cb4/468c6c18ae1cd239 for patch details which have been applied) + +SharpArch.Core +* BaseObject.cs ~ Introduced this base class to consolidate object comparison functionality used by both DomainObject and ValueObject +* BREAKING CHANGE ~ EnumDescription.cs: This class has been dropped from the library; it doesn't have anything to do with S#arp Architecture; if you miss it dearly, you can find it described at http://devlicio.us/blogs/billy_mccafferty/archive/2006/10/16/Show-User_2D00_Friendly-enum-Translations.aspx +* BREAKING CHANGE ~ Renamed IDomainObject.cs to IValidatable.cs to reflect what it's really doing; also simplified IValidatable to contain simply IsValid() +* BREAKING CHANGE ~ Dropped DomainObject.cs and PersistentObject.cs and replaced them with Entity.cs which now exists in /DomainModel namespace. Here are steps to take to accommodate: + 1) Do a solution wide find and replace of "PersistentObject" with "Entity" + 2) Change every call to ".ValidationMessages" to ".ValidationResults()" + 3) Manually add "using SharpArch.Core.DomainModel;" onto every page having an Entity +* ValueObject.cs: Added this value-object base class to support this missing base class for DDD +* See http://groups.google.com/group/sharp-architecture/browse_thread/thread/6c8e626535a47219 for a more thorough summary of the changes to SharpArch.Core and the validation infrastructure + +SharpArch.Data +* BREAKING CHANGE ~ Renamed Repository.GetByProperties(), Repository.GetUniqueByProperties(), Repository.GetByExample(), Repository.GetUniqueByExample() to FindAll(properties/example) and FindOne(properties/example) +* BREAKING CHANGE ~ Repository.cs: This now implements the simpler IRepository<> instead of INHibernateRepository<>; Moved the NHibernate specific methods Get(id, lockMode), Load(id), Load(id, lockMode), FindAll(exampleInstance), FindOne(exampleInstance), Save(entity), Update(entity), Evict(entity) to NHibernateRepository<>; If you write a custom repository which needs to implement methods from INHibernateRepository<>, you'll want to inherit from this new NHibernateRepository<> class +* /NHibernate/NHibernateSession.cs: Added RegisterInterceptor(IInterceptor) to be optionally invoked after you've initialized NHibernate configuration + +SharpArch.Web +* /Areas/AreaRouteHelper.cs: New class for supporting controller/view "areas" +* /Areas/AreaViewEngine.cs: New class for replacing the default view engine for supporting use of areas +* /JsonNet/JsonNetResult.cs: New ActionResult for returning Json.NET result +* BREAKING CHANGE ~ /CommonValidator/MvcValidationAdapter.cs: Moved from /NHibernate/Validator/MvcValidationAdapter.cs + +SharpArch.Web.Castle +* Added this library to house extension methods for Castle related to registering controllers and custom repositories + +Northwind Solution +* Modified solution structure to reflect the following + /MyProject - Contains MyProject.sln + /app - Contains the core project layers. + /MyProject.Core + /MyProject.Data + /MyProject.Web + /MyProject.Web.Controllers + /lib - Contains the solution items for the deployable application. + /db - Contains database schema information; e.g., the result of scaffolding and/or NHibernate's schema export. + /docs - Project documents. + /logs - Output location for log files. + /tests + /MyProject.Tests + /tools + /build - Empty folder for housing build related stuff. + /lib - Contains the solution items for the tests project and all other non-deployable assemblies. + /CrudScaffolding - Customizable CRUD, scaffolding generation code. +* Modified solution to accommodate controller/view "areas"; the change were numerous and should be reviewed within the patch associated with http://code.google.com/p/sharp-architecture/issues/detail?id=27 +* Moved all employee related artifacts (controller, domain, views, etc.) under a namespace of "Organization" to show how areas are used + +Northwind.Web.Controllers (formerly Northwind.Controllers) +* Added a reference to Microsoft.Practices.ServiceLocation.dll +* RouteRegistrar.cs: Registered map for "Root"; added ignore for favicon.ico +* Renamed this project from Northwind.Controllers to Northwind.Web.Controllers. To migrate this change to your own project: + In your project: + 0) Before starting this, clear out all your compiled bin directories to avoid NHibernate getting confused with obsolete DLLs lying around + 1) Renamed YourProject.Controllers to YourProject.Web.Controllers + 2) In YourProject.Web.Controllers' project properties, renamed Assembly name and Default namespace of "YourProject.Controllers" with "YourProject.Web.Controllers" + 3) Did a solution wide find and replace of "YourProject.Controllers" to "YourProject.Web.Controllers" + 4) Via VS, added the folder "YourProject.Web/Controllers" under YourProject.Tests and moved the contents of YourProject.Tests to this new folder; finally deleted the YourProject.Controllers folder from the YourProject.Tests project + 5) Successfully compiled all changes and closed VS + 6) Renamed the YourProject.Controllers folder to YourProject.Web.Controllers + 7) Reopened the SLN and replaced the missing project with the one from the renamed folder and then added a reference to YourProject.Tests and YourProject.Web + + In CrudScaffolding: + 1) Moved Templates/Controllers to Templates/Web/Controllers + 2) Moved Templates/Tests/Controllers to Templates/Tests/Web/Controllers + 3) Modified paths within Templates/ScaffoldingGenerator.tt to account for the moved files + 4) Did a *project* wide find and replace of ".Controllers" to ".Web.Controllers" + 5) Within ScaffoldingGenerator.tt, modified the third line under the GenerateControllerAndTests() method to be the following: + string targetPathRoot = testsRootFolder + solutionName + ".Tests\\" + solutionName + ".Web\\Controllers\\"; + 6) Within ScafolldingGenerator.tt, modified the third line under the AddFileToProject() method to be the following: + if (pathOfProjectFileToAddTo.IndexOf(project.Name + ".csproj") > -1) { + +Northwind.Core +* Added a reference to Microsoft.Practices.ServiceLocation.dll + +Northwind.Data +* Added a reference to Microsoft.Practices.ServiceLocation.dll + +Northwind.Tests +* Moved project to /NorthwindSample/tests/Northwind.Tests +* Added a reference to Microsoft.Practices.ServiceLocation.dll, Castle.Core.dll, Castle.MicroKernel.dll, Castle.Windsor.dll to support configuring IoC from the tests layer +* /Northwind.Controllers/RouteRegistrarTests.cs: Added call to "Clear()" the RouteTable during SetUp() +* /Northwind.Data/NHibernateMaps/MappingIntegrationTests.cs: Changed relative path to account for new solution structure; e.g., "../../../../app/Northwind.Web/Hibernate.cfg.xml" + +Northwind.Web +* Added a reference to Microsoft.Practices.ServiceLocation.dll +* Default.aspx.cs: Modified RewritePath to pass in false for the rebasePath parameter +* Global.asax.cs: Added CommonServiceLocator support and removed implementation of IContainerAccessor (use CSL instead) +* Northwind.Web.csproj: Removed "{603c0e0b-db56-11dc- +be95-000d561079b0};" from top to remove dependency on ASP.NET MVC being installed +* web.config: Changed relative path to log4net output file to reflect new solution structure; e.g., +* /CastleWindsor/CastleExtensions.cs: Added extension to find interfaces for custom repositories +* /CastleWindsor/ComponentRegistrar.cs: Replaced manual custom repository registrations with auto-registration of custom repositories; Added registration of IRepositoryWithTypedId and INHibernateRepositoryWithTypedId; Modified auto-bindings to account for the new NHibernateRepository<> and NHibernateRepositoryWithTypedId<,> classes + +Northwind Solution Items +* Added NorthwindSample/Solution Items/CommonServiceLocator.WindsorAdapter.dll +* Added NorthwindSample/Solution Items/Microsoft.Practices.ServiceLocation.dll + +---------------------------------------------- +---------------------------------------------- +0.9.114 - ASP.NET MVC Beta, NH 2.0.1, NHibernate.Validator, Fluent NHibernate, Castle Windsor +---------------------------------------------- +---------------------------------------------- + +New and exciting: +* A Visual Studio 2008 template project has been added under /TemplatesAndCodeGen to get your own S#arp Architecture project up and running quickly +* Replaced Ninject with Castle Windsor +* Added support for behavior driven unit testing +* Unit tests now use an in-memory SQLite database for testing data access methods along with providing an integration verification mechanism to check mappings against a live database + +------- + +Assembly Dependencies: +* ASP.NET MVC Beta +* Castle 1.0 RC3 +* Fluent NHibernate 0.1 +* NHibernate 2.0.1 +* NHibernate.Validator 1.0 +* MvcContrib Revision 635 (later than 0.0.1.137 release from CodePlex) +* Rhino.Mocks 3.5.0.1337 +* System.Data.SQLite.DLL 1.0.60.0 + +------- + +Changes to /src: + +** Search for "BREAKING CHANGE" below to find each of the breaking changes ** + +SharpArch.Data +* BREAKING CHANGE ~ Moved NHibernate/RepositoryUnitTestsBase.cs to SharpArch.Testing.NUnit/NHibernate and renamed it to be DatabaseRepositoryTestsBase. To fix, simply add a "using SharpArch.Testing.NUnit.NHibernate;" to any test fixture class which inherits from RepositoryUnitTestsBase and rename the parent to DatabaseRepositoryTestsBase + +SharpArch.Testing +* Added this new, stand-alone library to consolidate general, unit testing utilities +* PersistentObjectIdSetter.cs: Used to set the ID of a persistent object for unit testing purposes; this class was originally in Northwind.Tests + +SharpArch.Testing.NUnit +* Added this new, stand-alone library to support NUnit +* BehaviorSpecificiationTestsBase.cs: This optional text fixture base class provides a base class for BDD unit tests, as described at http://flux88.com/blog/the-transition-from-tdd-to-bdd/. +* SyntaxHelpers.cs: This optional extensions class adds a number of fluent NUnit syntax capabilities. To use, simply add a reference to SharpArch.Testing.NUnit to have them available from your unit tests. +* NHibernate/DatabaseRepositoryTestsBase.cs: This is the old SharpArch.Data/NHibernate/RepositoryUnitTestsBase.cs class provided for backwards compatibility. The preferred mechanism for database unit testing is using an in-memory database, described next. +* NHibernate/RepositoryBehaviorSpecificationTestsBase.cs: Provides an optional base class for developing behavior driven unit tests against an auto-generated database, suggested to be in-memory, SqlLite database. (See Northwind.Tests for an example.) +* NHibernate/RepositoryTestsBase.cs: Behaves similarly to the old SharpArch.Data/NHibernate/RepositoryUnitTestsBase.cs but auto-generates the database, suggested to be in-memory, SqlLite database. (See Northwind.Tests for an example.) + +SharpArch.Web +* BREAKING CHANGE ~ Ninject/ControllersAutoBindModule.cs: This class has been deleted. If you need it for backwards compatibility, you can get the code for this class from version 0.9.72 and put it into your application. + +SharpArch Solution Items +* BREAKING CHANGE ~ Deleted Ninject.Conditions.dll and Ninject.Core.dll. If you need them for backwards compatibility, you can get them from version 0.9.72 and add them to your application. +* Updated MvcContrib*.dll dependencies + +Northwind.Controllers: +* RouteRegistrar.cs: Added this class to pull route registration into the controllers layer. + +Northwind.Web +* /CastleWindsor/: Added support for Castle Windsor configuration within the class ComponentRegistrar.cs +* /NinjectModuldes/: Deleted this folder and replaced it with /CastleWindsor/ +* Hibernate.cfg.xml: Extracted NHibernate settings to this file and set the "Copy to Output Directory" to "Copy always" +* Global.asax.cs: Modified Global.asax.cs to pass in path to the HBM dll using "~" for the relative path; dropped the optional path to the Hibernate.cfg.xml now that it's being copied to the output directory (i.e., to the /bin directory); moved route registration to /Northwind.Controllers/RouteRegistrar.cs; added Castle Windsor configuration. +* web.config: Dropped assembly redirect for Ninject and added log4net configuration + +Northwind.Tests +* App.config: Removed "nhibernate.config.path" from appSettings; it now uses Hibernate.cfg.xml, discussed next +* Hibernate.cfg.xml: Added this file and set its "Copy to Output Directory" to "Copy always"; this now uses an in-memory SqlLite database for DB tests +* All DB test fixtures now inherit from either RepositoryTestsBase or RepositoryBehaviorSpecificationTestsBase using the in-memory database +* Northwind.Data/NHibernateMaps/MappingIntegrationTests.cs: Test fixture which tests every mapping file against the database sepcified in the application's "live" database NHibernate configuration file (e.g., the one found within the Northwind.Web project); this ensures that the "live" database is compliant with the mapping files since the unit tests are now using an in-memory database. + +Northwind.TestsUsingDevelopmentDatabase +* Added this new, stand-alone library to demonstrate unit testing against a "live" development database. The preferred mechanism is to use an in-memory database, as demonstrated within Northwind.Tests, but this is here to show backward compatibility for the previous approach. + +Northwind Solution Items +* Deleted Ninject.Conditions.dll, Ninject.Core.dll and MvcContrib.Ninject.dll +* Added Castle.MicroKernel.dll, Castle.Windsor.dll and MvcContrib.Castle.dll + +** Version Acknowledgements ** +* A big thanks goes out to Lee Carter for providing code for running DB unit tests within an in-memory SQLLite database. + +---------------------------------------------- +---------------------------------------------- +0.9.72 - ASP.NET MVC Beta, NH 2.0.1, Ninject 1.0, NHibernate.Validator 1.0, Fluent NHibernate 0.1 +---------------------------------------------- +---------------------------------------------- + +Migrating from 0.8.1 to 0.9.0 (see the Northwind sample code for implementation examples): +* Follow instructions for upgrading to ASP.NET MVC Beta. There were respective modifications made to web.config and assembly dependencies. Also included changes to Global.asax.cs and the inclusion of Default.aspx.cs +* Change the name of the "web.config" AppSetting within Northwind.Tests/App.config to "nhibernate.config.path" +* Add a new AppSetting within Northwind.Tests/App.config called "nhibernate.mapping.assembly" which contains the name of the assembly which holds the mapping artifacts +* Add an assembly redirect for NHibernate to app.config and web.config; Fluent NHibernate is a little behind +* Change any calls to myDao.CommitChanges() to myDao.DbContext.CommitChanges() +* Change any references to DomainSignatureComparable to DomainObject +* If you've overridden HasSameDomainObjectSignatureAs, changes the parameter type to IDomainObject (instead of DomainSignatureComparable) +* Rename references to SharpArch.Core.PersistenceSupport.IDao/IDaoWithTypedId to IRepository/IRepositoryWithTypedId (as a number of developers have rightly indicated is more inline with DDD) +* Rename references to SharpArch.Data.NHibernate.GenericDao/GenericDaoWithTypedId to Repository/RepositoryWithTypedId +* Rename references to SharpArch.Data/NHibernate/DaoTests.cs to RepositoryUnitTestsBase.cs +* Greatly simplified IRepository and moved NHibernate specific methods to SharpArch.Core/PersistenceSupport/NHibernate/INHibernateRepository.cs; consequently, SharpArch.Core/PersistenceSupport/IRepository.cs, which was IDao.cs, now contains the following breaking changes: + - LoadAll was changed to GetAll (changed to standardize "Get" as the retrieval keyword); + - Get(id, lockMode), GetByExample, GetUniqueByExample, Load(id), Load(id, lockMode), Save, Update and Evict were all moved to SharpArch.Core.PersistenceSupport.NHibernate.INHibernateRepository. +IRepository was simplified to provide a simpler mechanism that is more NHibernate agnostic and is simpler to understand and use. You may still wish to use the NHibernate-specific one. Consequently, decide if you'd like to use SharpArch.Core.PersistenceSupport.IRepository/IRepositoryWithTypedId or SharpArch.Core.PersistenceSupport.NHibernate.INHibernateRepository/INHibernateRepositoryWithTypedId and adjust your code, accordingly. There's nothing to stop you from using IRepository most of the time and INHibernateRepository on occassion...but I'd only recommend using it when absolutely necessary. For example, the only time the Northwind sample uses it is to support Save vs. Update for objects with assigned IDs (which are a bad practice to use anyway). +* Optionally rename your *Dao.cs classes to *Repository.cs to be consistent with the IRepository base interface. +* Optionally move NHibernate settings out of web.config into Hibernate.cfg.xml (the Northwind contains an example); if you do so, be sure to change the path in MyProject.Tests/app.config to point to the externalized file +* Optionally migrate your HBM files to Fluent NHibernate class maps within MyProject.Data. If you do so, be sure to delete the HBMs (or simply set their compile behavior to "Content" rather than "Embedded Resource" during the migration. You'll then need to change the mapping assembly information for NHibernate. REGARDLESS, you'll need to remove the assembly mapping property from your NHibernate configuration settings and modify the NHibernate session initialization within Global.asax.cs; see Northwind.Web/Global.asax.cs for an example. Currently, you have to provide the full path to the requested resources; I'm looking to simplify this if possible. + +*** Non Breaking Changes *** + +The documentation within /docs has been completely updated; I highly recommend you review it to see changes in action, particularly with respect to Fluent NHibernate. + +Modifications to /bin: +* All dependencies needed for your own project are now included in the bin folder + +Modifications to SharpArch: +* SharpArch.Core/PersistenceSupport: Added IPersistentObject and IDomainSignatureComparable to provide your own implementation, if you feel so inclined +* SharpArch.Data/NHibernate/NHibernateSession.cs: Inclusion of NHibernate.Validator. Optional NHibernate.Validator config file may be passed to NHibernateSession.Init within Global.asax.cs +* SharpArch.Data/NHibernate/NHibernateSession.cs: Init has been overloaded to to accept ISessionStorage without config file info. +* Marked both DomainSignatureAttribute and DomainSignatureComparable as Serializable (thanks athmer!) +* The Equals/GetHashCode has been split; Equals no longer uses the result of GetHashCode for the basis of equality checking. The affected classes include SharpArch.Core/DomainSignatureComparable.cs and SharpArch.Core/PersistenceSupport/PersistentObject.cs. Although the underlying mechanism for these methods were altered, it should introduce no breaking changes. +* The methods GetByProperties(IDictionary, propertyValuePairs) and GetUniqueByProperties have been added to IRepository and Repository. A unit test using this feature has been added to Northwind.Tests/Northwind.Data/CustomerDaoTests.cs +* IRepository now exposes IDbContext which provides capabilities such as CommitChanges, Begin/Commit/RollbackTransaction +* Added validation support methods to DomainObject + +Modifications to Northwind sample: +* Added full CRUD with validation for employee objects +* Modified Northwind.Core/Order.cs to show an example of overriding HasSameDomainObjectSignatureAs() +* Updated dynamic links to use Html.ActionLink +* Added a many-to-many example; specifically: + - Northwind.Core + * Employee has a many-to-many relationship to Territory objects. + * Territory has a many-to-many relationship back to Employee objects. This is the inverse side of the relationship. + * Region has a one-to-many relationship to Territory; the relationship is defined in the Territory HBM. + + - Northwind.Tests + * Northwind.Core/RegionTests.cs, TerritoryTests.cs, and EmployeeTests.cs test the domain model of the new classes. + * Northwind.Data/EmployeeDaoTests.cs and TerritoryDaoTests.cs test the many-to-many relationships in the database along with the many-to-one from Territory to Region. +* Made general clean ups to make the code simpler and with less typing (e.g., changed "<%= (ViewData.Model as Customer).CompanyName%>" to simply "<%= ViewData.Model.CompanyName%>") + +---------------------------------------------- +---------------------------------------------- +0.8.1 - MVC Preview 5, NH 2.0.1 and Ninject 1.0 +---------------------------------------------- +---------------------------------------------- + +Baseline history record diff --git a/VisualStudioTemplate/README.txt b/VisualStudioTemplate/README.txt deleted file mode 100644 index f082e09cf..000000000 --- a/VisualStudioTemplate/README.txt +++ /dev/null @@ -1 +0,0 @@ -This contains everything you need to get a S#arp Architecture project up and running quickly. See the documentation within /trunk/docs for usage guidelines. \ No newline at end of file diff --git a/VisualStudioTemplate/SharpArchApplicationTemplate.zip b/VisualStudioTemplate/SharpArchApplicationTemplate.zip deleted file mode 100644 index fa7c8b8c6..000000000 Binary files a/VisualStudioTemplate/SharpArchApplicationTemplate.zip and /dev/null differ diff --git a/VisualStudioTemplate/SharpArchApplicationWizard.dll b/VisualStudioTemplate/SharpArchApplicationWizard.dll deleted file mode 100644 index d1e31fa69..000000000 Binary files a/VisualStudioTemplate/SharpArchApplicationWizard.dll and /dev/null differ diff --git a/_README_FIRST.txt b/_README_FIRST.txt deleted file mode 100644 index e4a8495c7..000000000 --- a/_README_FIRST.txt +++ /dev/null @@ -1,29 +0,0 @@ --------------------------------------------- --- Building S#arp Architecture --------------------------------------------- - -BEFORE OPENING /src/SharpArch/SharpArch.sln in Visual Studio 2008 you need to run the build either by running /go.bat from a command line or double-clicking /ClickToBuild.bat. - -Both files do the same thing but ClickToBuild.bat includes a pause so that you can see the results of the build before the window closes. The file CommonAssemblyInfo.cs is missing from the solution and is generated automatically by the build process. - --------------------------------------------- --- How's this release organized? --------------------------------------------- - -* /docs/: Contains a link to comprehensive, online documentation at http://wiki.sharparchitecture.net/, and a diagram of what a S#arp Architecture project looks like. - -* /bin/: Holds released SharpArch assemblies and third party dependencies needed by a S#arp Architecture project. - -* /src/NorthwindSample/: Contains a sample project similar to what's generated by the VS project template. See Sharp_Architecture_Reference_Guide.doc for details. - -* /src/SharpArch/: Contains the SharpArch libraries used by S#arp Architecture projects. See Sharp_Architecture_Reference_Guide.doc for details. - -* /VisualStudioTemplate/: Contains artifacts for the support of the S#arp Architecture Visual Studio project template and an important fix to the T4 Toolbox (which supports CRUD scaffolding generation). - -* /ClickToBuild.bat and /go.bat were discussed above. - -* /License.txt: I'll let you guess what this is. - -* /SharpArch.build: The NAnt build script used by /go.bat to build the SharpArch class libraries. - -* /VersionHistory.txt: Details version numbers of dependencies, changes since previous releases, upgrade details, and a roadmap of what's coming. This is an important document. diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 000000000..fbe5684e5 --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,102 @@ +version: .{build} + +pull_requests: + do_not_increment_build_number: true + +nuget: + disable_publish_on_pr: true + +image: + - Ubuntu + - Visual Studio 2022 + +environment: + CAKE_SETTINGS_SKIPVERIFICATION: true + CAKE_SETTINGS_SKIPPACKAGEVERSIONCHECK: true + DOTNET_CLI_TELEMETRY_OPTOUT: true + DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true + +install: + - ps: ./mssql-setup.ps1 + - ps: dotnet new tool-manifest + - ps: dotnet tool install Cake.Tool --version 1.3.0 + +build_script: + - ps: dotnet cake + +test: off + +matrix: + fast_finish: true + +for: + +# Linux build +- + matrix: + except: + - image: Visual Studio 2022 + + clone_folder: ~/work/sharp-arch + + install: + - sh: touch ./Src/Common/AssemblyVersion.cs + - sh: dotnet new tool-manifest + + build_script: + - sh: dotnet test ./Src -c Release --test-adapter-path . --logger AppVeyor + + +# Windows build +- + matrix: + only: + - image: Visual Studio 2022 + + clone_folder: c:\work\sharp-arch + + services: + - mssql2017 + + cache: + - c:\tmp\cake\tools -> appveyor.yml + + environment: + coveralls_repo_token: + secure: FgZlD1O2ilcGB6nF7cIgNcF6f8wWJk//ish6EG800QfuMd0y3BQWUXkl9u7TB4yG + appveyor_cache_entry_zip_args: -t7z -m0=lzma -mx=5 -ms=on + CAKE_PATHS_TOOLS: c:\tmp\cake\tools\ + GITHUB_TOKEN: + secure: FgP/dEF7lumDgbjt3tzPSDqDTM16uoiPfKZPQSLJO+/GaIR2zSquSh0pXP8znx+c + + artifacts: + - path: Drops/Packages/*.nupkg + name: NuGet packages + + - path: Drops/Packages/*.snupkg + name: NuGet symbol packages + type: NuGetPackage + # - path: Drops/Inspections/CodeDuplicates.html + # name: CodeDuplicates + # - path: Drops/Inspections/CodeInspections.html + # name: CodeInspections + + deploy: + - provider: NuGet + name: Pre-release + api_key: + secure: kvGBJqOLM4uyxv3IVpAC9ZjMSPaL0bnvAXJeK0t1TbL3wpBa7raxKLETd4px1/LY + on: + branch: + - develop + - /release\/v.*/ + - /releases.*/ + - /hotfixes.*/ + + - provider: NuGet + name: Tagged release + api_key: + secure: kvGBJqOLM4uyxv3IVpAC9ZjMSPaL0bnvAXJeK0t1TbL3wpBa7raxKLETd4px1/LY + on: + appveyor_repo_tag: true + diff --git a/bin/Antlr3.Runtime.dll b/bin/Antlr3.Runtime.dll deleted file mode 100644 index 637fc3e3b..000000000 Binary files a/bin/Antlr3.Runtime.dll and /dev/null differ diff --git a/bin/Castle.Core.dll b/bin/Castle.Core.dll deleted file mode 100644 index b268f70a3..000000000 Binary files a/bin/Castle.Core.dll and /dev/null differ diff --git a/bin/Castle.Core.xml b/bin/Castle.Core.xml deleted file mode 100644 index 69b0e0d2f..000000000 --- a/bin/Castle.Core.xml +++ /dev/null @@ -1,3197 +0,0 @@ - - - - Castle.Core - - - - - This attribute is usefull only when you want to register all components - on an assembly as a batch process. - By doing so, the batch register will look - for this attribute to distinguish components from other classes. - - - - - Base for Attributes that want to express lifestyle - chosen by the component. - - - - - Initializes a new instance of the class. - - The type. - - - - Gets or sets the lifestyle. - - The lifestyle. - - - - Initializes a new instance of the class. - - The key. - - - - Initializes a new instance of the class. - - The key. - The service. - - - - Initializes a new instance of the class. - - The key. - The service. - The lifestyle. - - - - Gets the service. - - The service. - - - - Gets the key. - - The key. - - - - Associates a custom component with a component - - - - - Initializes a new instance of the class. - - Type of the component activator. - - - - Gets the type of the component activator. - - The type of the component activator. - - - - Specifies the proxying behavior for a component. - - - - - Initializes a new instance of the class. - - - - - Gets or sets a value indicating whether the generated - interface proxy should inherit from . - - - - - Determines if the component requires a single interface proxy. - - true if the component requires a single interface proxy. - - - - Gets or sets the additional interfaces used during proxy generation. - - - - - Marks as property to be skipped and not be wired - by the IoC container - - - - - Used to declare that a component wants interceptors acting on it. - - - - - Constructs the InterceptorAttribute pointing to - a key to a interceptor - - - - - - Constructs the InterceptorAttribute pointing to - a service - - - - - - Indicates that the target components wants a - singleton lifestyle. - - - - - Initializes a new instance of the class. - - - - - Indicates that the target components wants a - transient lifestyle. - - - - - Initializes a new instance of the class. - - - - - Indicates that the target components wants a - per thread lifestyle. - - - - - Initializes a new instance of the class. - - - - - Indicates that the target components wants a - per web request lifestyle. - - - - - Indicates that the target components wants a - pooled lifestyle. - - - - - Initializes a new instance of the class - using the default initial pool size (5) and the max pool size (15). - - - - - Initializes a new instance of the class. - - Initial size of the pool. - Max pool size. - - - - Gets the initial size of the pool. - - The initial size of the pool. - - - - Gets the maximum pool size. - - The size of the max pool. - - - - Indicates that the target components wants a - custom lifestyle. - - - - - Initializes a new instance of the class. - - The lifestyle handler. - - - - Gets the type of the lifestyle handler. - - The type of the lifestyle handler. - - - - New interface that is going to be used by DynamicProxy 2 - - - - - New interface that is going to be used by DynamicProxy 2 - - - - - Returns the concrete instantiation of , with any generic parameters bound to real types. - - The concrete instantiation of , or if not a generic method. - Can be slower than calling . - - - - Returns the concrete instantiation of , with any generic parameters bound to real types. - - The concrete instantiation of , or if not a generic method. - Can be slower than calling . - - - - - - - - - - The generic arguments of the method, or null if not a generic method. - - - - - - - - - - For interface proxies, this will point to the - on the target class - - - - - Interceptors might implement this to receive the - ComponentModel on behalf of the component where the - interceptor is acting. - - - - - Get the proxy target (note that null is a valid target!) - - - - - - Gets the interceptors for the proxy - - - - - - Abstract representation of a vertex. - - - - - The nodes that dependes on this node - - - - - The nodes that this node depends - - - - - The node has not been visited yet - - - - - This node is in the process of being visited - - - - - This now was visited - - - - - Represents a collection of objects - which are guaranted to be unique - and holds a color for them - - - - - Holds a timestamp (integer) - for a given item - - - - - Returns the node at the specified index. - - The lookup index. - The node at the specified index. - - If the specified is greater than the - number of objects within the list. - - - - - Validates the specified index. - - The lookup index. - - If the index is invalid. - - - - - Lifecycle interface. If implemented by a component, - the method Initialized will be invoked by the container - before making the component available to the external world. - - - - - Implementors should perform any initialization logic. - - - - - Only called for components that - belongs to a pool when the component - comes back to the pool. - - - - - Implementors should perform any - initialization/clean up. - - - - - Interface for components that wish to be started by the container - - - - - Starts this instance. - - - - - Stops this instance. - - - - - Provides a factory that can produce either or - classes. - - - - - Manages the instantiation of s. - - - - - Creates a new logger, getting the logger name from the specified type. - - - - - Creates a new logger. - - - - - Creates a new logger, getting the logger name from the specified type. - - - - - Creates a new logger. - - - - - Creates a new extended logger, getting the logger name from the specified type. - - - - - Creates a new extended logger. - - - - - Creates a new extended logger, getting the logger name from the specified type. - - - - - Creates a new extended logger. - - - - - Creates a new extended logger, getting the logger name from the specified type. - - - - - Creates a new extended logger. - - - - - Creates a new extended logger, getting the logger name from the specified type. - - - - - Creates a new extended logger. - - - - - Creates a new logger, getting the logger name from the specified type. - - - - - Creates a new logger. - - - - - Creates a new logger, getting the logger name from the specified type. - - - - - Creates a new logger. - - - - - Gets the configuration file. - - i.e. log4net.config - - - - - Gets the configuration file. - - i.e. log4net.config - - - - - Summary description for ConsoleFactory. - - - - - NullLogFactory used when logging is turned off. - - - - - Creates an instance of ILogger with the specified name. - - Name. - - - - - Creates an instance of ILogger with the specified name and LoggerLevel. - - Name. - Level. - - - - - Creates outputing - to files. The name of the file is derived from the log name - plus the 'log' extension. - - - - - Used to create the TraceLogger implementation of ILogger interface. See . - - - - - The Logger sending everything to the standard output streams. - This is mainly for the cases when you have a utility that - does not have a logger to supply. - - - - - The Level Filtered Logger class. This is a base clase which - provides a LogLevel attribute and reroutes all functions into - one Log method. - - - - - Manages logging. - - - This is a facade for the different logging subsystems. - It offers a simplified interface that follows IOC patterns - and a simplified priority/level/severity abstraction. - - - - - Logs a debug message. - - The message to log - - - - Logs a debug message. - - The exception to log - The message to log - - - - Logs a debug message. - - Format string for the message to log - Format arguments for the message to log - - - - Logs a debug message. - - Format string for the message to log - Format arguments for the message to log - - - - Logs a debug message. - - The exception to log - Format string for the message to log - Format arguments for the message to log - - - - Logs a debug message. - - The format provider to use - Format string for the message to log - Format arguments for the message to log - - - - Logs a debug message. - - The exception to log - The format provider to use - Format string for the message to log - Format arguments for the message to log - - - - Logs an info message. - - The message to log - - - - Logs an info message. - - The exception to log - The message to log - - - - Logs an info message. - - Format string for the message to log - Format arguments for the message to log - - - - Logs an info message. - - Format string for the message to log - Format arguments for the message to log - - - - Logs an info message. - - The exception to log - Format string for the message to log - Format arguments for the message to log - - - - Logs an info message. - - The format provider to use - Format string for the message to log - Format arguments for the message to log - - - - Logs an info message. - - The exception to log - The format provider to use - Format string for the message to log - Format arguments for the message to log - - - - Logs a warn message. - - The message to log - - - - Logs a warn message. - - The exception to log - The message to log - - - - Logs a warn message. - - Format string for the message to log - Format arguments for the message to log - - - - Logs a warn message. - - Format string for the message to log - Format arguments for the message to log - - - - Logs a warn message. - - The exception to log - Format string for the message to log - Format arguments for the message to log - - - - Logs a warn message. - - The format provider to use - Format string for the message to log - Format arguments for the message to log - - - - Logs a warn message. - - The exception to log - The format provider to use - Format string for the message to log - Format arguments for the message to log - - - - Logs an error message. - - The message to log - - - - Logs an error message. - - The exception to log - The message to log - - - - Logs an error message. - - Format string for the message to log - Format arguments for the message to log - - - - Logs an error message. - - Format string for the message to log - Format arguments for the message to log - - - - Logs an error message. - - The exception to log - Format string for the message to log - Format arguments for the message to log - - - - Logs an error message. - - The format provider to use - Format string for the message to log - Format arguments for the message to log - - - - Logs an error message. - - The exception to log - The format provider to use - Format string for the message to log - Format arguments for the message to log - - - - Logs a fatal message. - - The message to log - - - - Logs a fatal message. - - The exception to log - The message to log - - - - Logs a fatal message. - - Format string for the message to log - Format arguments for the message to log - - - - Logs a fatal message. - - Format string for the message to log - Format arguments for the message to log - - - - Logs a fatal message. - - The exception to log - Format string for the message to log - Format arguments for the message to log - - - - Logs a fatal message. - - The format provider to use - Format string for the message to log - Format arguments for the message to log - - - - Logs a fatal message. - - The exception to log - The format provider to use - Format string for the message to log - Format arguments for the message to log - - - - Logs a fatal error message. - - The Message - - - - Logs a fatal error message. - - The Message - The Exception - - - - Logs a fatal error message. - - Message format - Array of objects to write using format - - - - Create a new child logger. - The name of the child logger is [current-loggers-name].[passed-in-name] - - The Subname of this logger. - The New ILogger instance. - If the name has an empty element name. - - - - Determines if messages of priority "debug" will be logged. - - True if "debug" messages will be logged. - - - - Determines if messages of priority "info" will be logged. - - True if "info" messages will be logged. - - - - Determines if messages of priority "warn" will be logged. - - True if "warn" messages will be logged. - - - - Determines if messages of priority "error" will be logged. - - True if "error" messages will be logged. - - - - Determines if messages of priority "fatal" will be logged. - - True if "fatal" messages will be logged. - - - - Determines if messages of priority "fatalError" will be logged. - - True if "fatalError" messages will be logged. - - - - Creates a new LevelFilteredLogger. - - - - - Keep the instance alive in a remoting scenario - - - - - - Logs a debug message. - - The message to log - - - - Logs a debug message. - - The exception to log - The message to log - - - - Logs a debug message. - - Format string for the message to log - Format arguments for the message to log - - - - Logs a debug message. - - The exception to log - Format string for the message to log - Format arguments for the message to log - - - - Logs a debug message. - - The format provider to use - Format string for the message to log - Format arguments for the message to log - - - - Logs a debug message. - - The exception to log - The format provider to use - Format string for the message to log - Format arguments for the message to log - - - - Logs a debug message. - - Message format - Array of objects to write using format - - - - Logs an info message. - - The message to log - - - - Logs an info message. - - The exception to log - The message to log - - - - Logs an info message. - - Format string for the message to log - Format arguments for the message to log - - - - Logs an info message. - - The exception to log - Format string for the message to log - Format arguments for the message to log - - - - Logs an info message. - - The format provider to use - Format string for the message to log - Format arguments for the message to log - - - - Logs an info message. - - The exception to log - The format provider to use - Format string for the message to log - Format arguments for the message to log - - - - Logs an info message. - - Message format - Array of objects to write using format - - - - Logs a warn message. - - The message to log - - - - Logs a warn message. - - The exception to log - The message to log - - - - Logs a warn message. - - Format string for the message to log - Format arguments for the message to log - - - - Logs a warn message. - - The exception to log - Format string for the message to log - Format arguments for the message to log - - - - Logs a warn message. - - The format provider to use - Format string for the message to log - Format arguments for the message to log - - - - Logs a warn message. - - The exception to log - The format provider to use - Format string for the message to log - Format arguments for the message to log - - - - Logs a warn message. - - Message format - Array of objects to write using format - - - - Logs an error message. - - The message to log - - - - Logs an error message. - - The exception to log - The message to log - - - - Logs an error message. - - Format string for the message to log - Format arguments for the message to log - - - - Logs an error message. - - The exception to log - Format string for the message to log - Format arguments for the message to log - - - - Logs an error message. - - The format provider to use - Format string for the message to log - Format arguments for the message to log - - - - Logs an error message. - - The exception to log - The format provider to use - Format string for the message to log - Format arguments for the message to log - - - - Logs an error message. - - Message format - Array of objects to write using format - - - - Logs a fatal message. - - The message to log - - - - Logs a fatal message. - - The exception to log - The message to log - - - - Logs a fatal message. - - Format string for the message to log - Format arguments for the message to log - - - - Logs a fatal message. - - The exception to log - Format string for the message to log - Format arguments for the message to log - - - - Logs a fatal message. - - The format provider to use - Format string for the message to log - Format arguments for the message to log - - - - Logs a fatal message. - - The exception to log - The format provider to use - Format string for the message to log - Format arguments for the message to log - - - - Logs a fatal message. - - Message format - Array of objects to write using format - - - - Logs a fatal error message. - - The Message - - - - Logs a fatal error message. - - The Message - The Exception - - - - Logs a fatal error message. - - Message format - Array of objects to write using format - - - - Implementors output the log content by implementing this method only. - Note that exception can be null - - - - - - - - - The LoggerLevel that this logger - will be using. Defaults to LoggerLevel.Off - - - - - The name that this logger will be using. - Defaults to String.Empty - - - - - Determines if messages of priority "debug" will be logged. - - true if log level flags include the bit - - - - Determines if messages of priority "info" will be logged. - - true if log level flags include the bit - - - - Determines if messages of priority "warn" will be logged. - - true if log level flags include the bit - - - - Determines if messages of priority "error" will be logged. - - true if log level flags include the bit - - - - Determines if messages of priority "fatal" will be logged. - - true if log level flags include the bit - - - - Determines if messages of priority "fatal" will be logged. - - true if log level flags include the bit - - - - Creates a new ConsoleLogger with the Level - set to LoggerLevel.Debug and the Name - set to String.Empty. - - - - - Creates a new ConsoleLogger with the Name - set to String.Empty. - - The logs Level. - - - - Creates a new ConsoleLogger with the Level - set to LoggerLevel.Debug. - - The logs Name. - - - - Creates a new ConsoleLogger. - - The logs Name. - The logs Level. - - - - A Common method to log. - - The level of logging - The name of the logger - The Message - The Exception - - - - Returns a new ConsoleLogger with the name - added after this loggers name, with a dot in between. - - The added hierarchical name. - A new ConsoleLogger. - - - - The Logger using standart Diagnostics namespace. - - - - - Creates a logger based on . - - - - - - Creates a logger based on . - - - - - - - Creates a logger based on . - - - - - - - - The Null Logger class. This is useful for implementations where you need - to provide a logger to a utility class, but do not want any output from it. - It also helps when you have a utility that does not have a logger to supply. - - - - - Provides an interface that supports and - allows the storage and retrieval of Contexts. These are supported in - both log4net and NLog. - - - - - Exposes the Global Context of the extended logger. - - - - - Exposes the Thread Context of the extended logger. - - - - - Exposes the Thread Stack of the extended logger. - - - - - Creates a new NullLogger. - - - - - No-op. - - Ignored - - - - No-op. - - Ignored - Ignored - - - - No-op. - - Ignored - Ignored - - - - No-op. - - Ignored - Ignored - - - - No-op. - - Ignored - Ignored - Ignored - - - - No-op. - - Ignored - Ignored - Ignored - - - - No-op. - - Ignored - Ignored - Ignored - Ignored - - - - No-op. - - Ignored - - - - No-op. - - Ignored - Ignored - - - - No-op. - - Ignored - Ignored - - - - No-op. - - Ignored - Ignored - - - - No-op. - - Ignored - Ignored - Ignored - - - - No-op. - - Ignored - Ignored - Ignored - - - - No-op. - - Ignored - Ignored - Ignored - Ignored - - - - No-op. - - Ignored - - - - No-op. - - Ignored - Ignored - - - - No-op. - - Ignored - Ignored - - - - No-op. - - Ignored - Ignored - - - - No-op. - - Ignored - Ignored - Ignored - - - - No-op. - - Ignored - Ignored - Ignored - - - - No-op. - - Ignored - Ignored - Ignored - Ignored - - - - No-op. - - Ignored - - - - No-op. - - Ignored - Ignored - - - - No-op. - - Ignored - Ignored - - - - No-op. - - Ignored - Ignored - - - - No-op. - - Ignored - Ignored - Ignored - - - - No-op. - - Ignored - Ignored - Ignored - - - - No-op. - - Ignored - Ignored - Ignored - Ignored - - - - No-op. - - Ignored - - - - No-op. - - Ignored - Ignored - - - - No-op. - - Ignored - Ignored - - - - No-op. - - Ignored - Ignored - - - - No-op. - - Ignored - Ignored - Ignored - - - - No-op. - - Ignored - Ignored - Ignored - - - - No-op. - - Ignored - Ignored - Ignored - Ignored - - - - No-op. - - Ignored - - - - No-op. - - Ignored - Ignored - - - - No-op. - - Ignored - Ignored - - - - Returns this NullLogger. - - Ignored - This ILogger instance. - - - - No-op. - - false - - - - No-op. - - false - - - - No-op. - - false - - - - No-op. - - false - - - - No-op. - - false - - - - No-op. - - false - - - - Returns empty context properties. - - - - - Returns empty context properties. - - - - - Returns empty context stacks. - - - - - Interface for Context Properties implementations - - - - This interface defines a basic property get set accessor. - - - Based on the ContextPropertiesBase of log4net, by 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 - - - - - - The Stream Logger class. This class can stream log information - to any stream, it is suitable for storing a log file to disk, - or to a MemoryStream for testing your components. - - - This logger is not thread safe. - - - - - Creates a new StreamLogger with default encoding - and buffer size. Initial Level is set to Debug. - - - The name of the log. - - - The stream that will be used for logging, - seeking while the logger is alive - - - - - Creates a new StreamLogger with default buffer size. - Initial Level is set to Debug. - - - The name of the log. - - - The stream that will be used for logging, - seeking while the logger is alive - - - The encoding that will be used for this stream. - - - - - - Creates a new StreamLogger. - Initial Level is set to Debug. - - - The name of the log. - - - The stream that will be used for logging, - seeking while the logger is alive - - - The encoding that will be used for this stream. - - - - The buffer size that will be used for this stream. - - - - - - Creates a new StreamLogger with - Debug as default Level. - - The name of the log. - The StreamWriter the log will write to. - - - - The TraceLogger sends all logging to the System.Diagnostics.TraceSource - built into the .net framework. - - - Logging can be configured in the system.diagnostics configuration - section. - - If logger doesn't find a source name with a full match it will - use source names which match the namespace partially. For example you can - configure from all castle components by adding a source name with the - name "Castle". - - If no portion of the namespace matches the source named "Default" will - be used. - - - - - Build a new trace logger based on the named TraceSource - - The name used to locate the best TraceSource. In most cases comes from the using type's fullname. - - - - Build a new trace logger based on the named TraceSource - - The name used to locate the best TraceSource. In most cases comes from the using type's fullname. - The default logging level at which this source should write messages. In almost all cases this - default value will be overridden in the config file. - - - - Create a new child logger. - The name of the child logger is [current-loggers-name].[passed-in-name] - - The Subname of this logger. - The New ILogger instance. - - - - The WebLogger sends everything to the HttpContext.Trace - - - Trace must be enabled on the Asp.Net configuration file (web.config or machine.config) - - - - - Creates a new WebLogger with the priority set to DEBUG. - - - - - Creates a new WebLogger. - - The Log level typecode. - - - - Creates a new WebLogger. - - The Log name. - - - - Creates a new WebLogger. - - The Log name. - The Log level typecode. - - - - A Common method to log. - - The level of logging - The Log name. - The Message - The Exception - - - - Just returns this logger (WebLogger is not hierarchical). - - Ignored - This ILogger instance. - - - - Tries to get the current http context's trace context. - - The current http context's trace context or null if none is - available - - - - Supporting Logger levels. - - - - - Logging will be off - - - - - Fatal logging level - - - - - Error logging level - - - - - Warn logging level - - - - - Info logging level - - - - - Debug logging level - - - - - Pendent - - - - - Deserializes the specified node into an abstract representation of configuration. - - The node. - - - - - If a config value is an empty string we return null, this is to keep - backward compability with old code - - - - - This is an abstract implementation - that deals with methods that can be abstracted away - from underlying implementations. - - - AbstractConfiguration makes easier to implementers - to create a new version of - - - - - is a interface encapsulating a configuration node - used to retrieve configuration values. - - - - - Gets the value of the node and converts it - into specified . - - The - - The Default value returned if the convertion fails. - - The Value converted into the specified type. - - - - Gets the name of the node. - - - The Name of the node. - - - - - Gets the value of the node. - - - The Value of the node. - - - - - Gets an of - elements containing all node children. - - The Collection of child nodes. - - - - Gets an of the configuration attributes. - - - - - Gets the value of the node and converts it - into specified . - - The - - The Default value returned if the convertion fails. - - The Value converted into the specified type. - - - - Gets the name of the . - - - The Name of the . - - - - - Gets the value of . - - - The Value of the . - - - - - Gets all child nodes. - - The of child nodes. - - - - Gets node attributes. - - - All attributes of the node. - - - - - A collection of objects. - - - - - Creates a new instance of ConfigurationCollection. - - - - - Creates a new instance of ConfigurationCollection. - - - - - Summary description for MutableConfiguration. - - - - - Initializes a new instance of the class. - - The name. - - - - Gets the value of . - - - The Value of the . - - - - - Enumeration used to mark the component's lifestyle. - - - - - No lifestyle specified. - - - - - Singleton components are instantiated once, and shared - between all clients. - - - - - Thread components have a unique instance per thread. - - - - - Transient components are created on demand. - - - - - Optimization of transient components that keeps - instance in a pool instead of always creating them. - - - - - Any other logic to create/release components. - - - - - PerWebRequest components are created once per Http Request - - - - - - - - - - Represents the collection of information and - meta information collected about a component. - - - - Name (key) of the component - - - Service exposed - - - Implementation for the service - - - Extended properties - - - Lifestyle for the component - - - Custom lifestyle, if any - - - Custom activator, if any - - - Dependencies the kernel must resolve - - - All available constructors - - - All potential properties that can be setted by the kernel - - - Steps of lifecycle - - - External parameters - - - Configuration node associated - - - Interceptors associated - - - /// Custom dependencies/// - - - - Constructs a ComponentModel - - - - - Requires the selected property dependencies. - - The property selector. - - - - Requires the property dependencies of type . - - The dependency type. - - - - Sets or returns the component key - - - - - Gets or sets the service exposed. - - The service. - - - - Gets or sets the component implementation. - - The implementation. - - - - Gets or sets a value indicating whether the component requires generic arguments. - - - true if generic arguments are required; otherwise, false. - - - - - Gets or sets the extended properties. - - The extended properties. - - - - Gets the constructors candidates. - - The constructors. - - - - Gets the properties set. - - The properties. - - - - Gets or sets the configuration. - - The configuration. - - - - Gets the lifecycle steps. - - The lifecycle steps. - - - - Gets or sets the lifestyle type. - - The type of the lifestyle. - - - - Gets or sets the strategy for - inspecting public properties - on the components - - - - - Gets or sets the custom lifestyle. - - The custom lifestyle. - - - - Gets or sets the custom component activator. - - The custom component activator. - - - - Gets the interceptors. - - The interceptors. - - - - Gets the parameter collection. - - The parameters. - - - - Dependencies are kept within constructors and - properties. Others dependencies must be - registered here, so the kernel (as a matter - of fact the handler) can check them - - - - - Gets the custom dependencies. - - The custom dependencies. - - - - Represents a constructor of the component - that the container can use to initialize it properly. - - - - - Initializes a new instance of the class. - - The constructor info. - The dependencies. - - - - Gets the ConstructorInfo (from reflection). - - The constructor. - - - - Gets the dependencies this constructor candidate exposes. - - The dependencies. - - - - Collection of - - - - - Gets the fewer arguments candidate. - - The fewer arguments candidate. - - - - Represents a dependency (other component or a - fixed value available through external configuration). - - - - - Initializes a new instance of the class. - - The type. - The dependency key. - Type of the target. - if set to true [is optional]. - - - - Returns a that represents the current . - - - A that represents the current . - - - - - Serves as a hash function for a particular type, suitable - for use in hashing algorithms and data structures like a hash table. - - - A hash code for the current . - - - - - Determines whether the specified is equal to the current . - - The to compare with the current . - - if the specified is equal to the - current ; otherwise, . - - - - - Gets or sets the type of the dependency. - - The type of the dependency. - - - - Gets or sets the dependency key. - - The dependency key. - - - - Gets the type of the target. - - The type of the target. - - - - Gets or sets whether this dependency is optional. - - - true if this dependency is optional; otherwise, false. - - - - - Collection of . - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The dependencies. - - - - Represents an reference to a Interceptor component. - - - - - Initializes a new instance of the class. - - The component key. - - - - Initializes a new instance of the class. - - Type of the service. - - - - Gets an for the component key. - - The component key. - The - - - - Gets an for the service. - - The service. - The - - - - Gets an for the service. - - The service type. - The - - - - Gets the type of the service. - - The type of the service. - - - - Gets the interceptor component key. - - The component key. - - - - Gets the type of the reference. - - The type of the reference. - - - - Collection of - - - - - Adds the specified item. - - The interceptor. - - - - Adds the specified interceptor as the first. - - The interceptor. - - - - Adds the specified interceptor as the last. - - The interceptor. - - - - Inserts the specified interceptor at the specified index. - - The index. - The interceptor. - - - - When implemented by a class, copies the elements of - the to an , starting at a particular index. - - The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing. - The zero-based index in at which copying begins. - - is . - - is less than zero. - - - is multidimensional. - -or- - - is equal to or greater than the length of . - -or- - The number of elements in the source is greater than the available space from to the end of the destination . - - The type of the source cannot be cast automatically to the type of the destination . - - - - Returns an enumerator that can iterate through a collection. - - - An - that can be used to iterate through the collection. - - - - - Adds the interceptor to the end of the interceptors list if it does not exist already. - - The interceptor reference. - - - - Gets a value indicating whether this instance has interceptors. - - - true if this instance has interceptors; otherwise, false. - - - - - Gets the number of - elements contained in the . - - - - - - Gets an object that - can be used to synchronize access to the . - - - - - - Gets a value - indicating whether access to the is synchronized - (thread-safe). - - - - - - Represents a collection of ordered lifecycle steps. - - - - - Initializes a new instance of the class. - - - - - Returns all steps for the commission phase - - - - - - Returns all steps for the decommission phase - - - - - - Adds a step to the commission or decomission phases. - - - - - - - Adds a step as the first step to execute for the commission or decomission phase. - - - - - - - Copies the elements of - the to an , starting at a particular index. - - The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing. - The zero-based index in at which copying begins. - - is . - - is less than zero. - - - is multidimensional. - -or- - - is equal to or greater than the length of . - -or- - The number of elements in the source is greater than the available space from to the end of the destination . - - The type of the source cannot be cast automatically to the type of the destination . - - - - Returns an enumerator that can iterate through a collection. - - - An - that can be used to iterate through the collection. - - - - - Gets a value indicating whether this instance has commission steps. - - - true if this instance has commission steps; otherwise, false. - - - - - Gets a value indicating whether this instance has decommission steps. - - - true if this instance has decommission steps; otherwise, false. - - - - - Gets the number of - elements contained in the . - - - - - - Gets an object that - can be used to synchronize access to the . - - - - - - Gets a value - indicating whether access to the is synchronized - (thread-safe). - - - - - - Represents meta information associated with a method - (not yet defined) - - - - - Initializes a new instance of the class. - - The config node. - - - - Gets the config node. - - The config node. - - - - Collection of - - - - - Gets the method info2 model. - - The method info2 model. - - - - Represents a parameter. Usually the parameter - comes from the external world, ie, an external configuration. - - - - - Initializes a new instance of the class. - - The name. - The value. - - - - Initializes a new instance of the class. - - The name. - The value. - - - - Gets the name. - - The name. - - - - Gets the value. - - The value. - - - - Gets the config value. - - The config value. - - - - Collection of - - - - - Initializes a new instance of the class. - - - - - Adds the specified name. - - The name. - The value. - - - - Adds the specified name. - - The name. - The config node. - - - - Determines whether this collection contains the specified key. - - The key. - - true if yes; otherwise, false. - - - - - Adds the specified key. - - - Not implemented - - The key. - The value. - - - - Clears this instance. - - - Not implemented - - - - - Removes the specified key. - - The key. - - Not implemented - - - - - Copy the content to the specified array - - target array - target index - - Not implemented - - - - - Returns an enumerator that can iterate through a collection. - - - An - that can be used to iterate through the collection. - - - - - Gets the keys. - - The keys. - - Not implemented - - - - - Gets the values. - - The values. - - Not implemented - - - - - Gets a value indicating whether this instance is read only. - - - true if this instance is read only; otherwise, false. - - - - - Gets a value indicating whether this instance is fixed size. - - - true if this instance is fixed size; otherwise, false. - - - - - Gets the with the specified key. - - - - - - Gets the count. - - The count. - - - - Gets the sync root. - - The sync root. - - - - Gets a value indicating whether this instance is synchronized. - - - true if this instance is synchronized; otherwise, false. - - - - - Represents a property and the respective dependency. - - - - - Initializes a new instance of the class. - - The property info. - The dependency. - - - - Gets the property. - - The property. - - - - Gets the dependency. - - The dependency. - - - - Collection of - - - - - Finds a PropertySet the by PropertyInfo. - - The info. - - - - - Represents a 'streamable' resource. Can - be a file, a resource in an assembly. - - - - - Returns a reader for the stream - - - It's up to the caller to dispose the reader. - - - - - - Returns a reader for the stream - - - It's up to the caller to dispose the reader. - - - - - - - Returns an instance of - created according to the relativePath - using itself as the root. - - - - - - - - - - Only valid for resources that - can be obtained through relative paths - - - - - - - - - - This returns a new stream instance each time it is called. - It is the responsability of the caller to dispose of this stream - - - - - - - - - - Depicts the contract for resource factories. - - - - - Used to check whether the resource factory - is able to deal with the given resource - identifier. - - - Implementors should return true - only if the given identificator is supported - by the resource factory - - - - - - - Creates an instance - for the given resource identifier - - - - - - - Creates an instance - for the given resource identifier - - - - - - - - - - - - - - - - - - Adapts a static string content as an - - - - - Enable access to files on network shares - - - - - Defines that the implementation wants a - in order to - access other components. The creator must be aware - that the component might (or might not) implement - the interface. - - - Used by Castle Project components to, for example, - gather logging factories - - - - - Increments IServiceProvider with a generic service resolution operation. - - - - - This interface should be implemented by classes - that are available in a bigger context, exposing - the container to different areas in the same application. - - For example, in Web application, the (global) HttpApplication - subclasses should implement this interface to expose - the configured container - - - - - - General purpose class to represent a standard pair of values. - - Type of the first value - Type of the second value - - - - Constructs a pair with its values - - - - - - - List of utility methods related to dynamic proxy operations - - - - - Determines whether the specified type is a proxy generated by - DynamicProxy (1 or 2). - - The type. - - true if it is a proxy; otherwise, false. - - - - - Pendent - - - - - Initializes a new instance of the class. - - The target. - - - - Determines whether the object contains an element with the specified key. - - The key to locate in the object. - - true if the contains an element with the key; otherwise, false. - - - is null. - - - - Adds an element with the provided key and value to the object. - - The to use as the key of the element to add. - The to use as the value of the element to add. - - is null. - An element with the same key already exists in the object. - The is read-only.-or- The has a fixed size. - - - - Removes all elements from the object. - - The object is read-only. - - - - Returns an object for the object. - - - An object for the object. - - - - - Removes the element with the specified key from the object. - - The key of the element to remove. - - is null. - The object is read-only.-or- The has a fixed size. - - - - Copies the elements of the to an , starting at a particular index. - - The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing. - The zero-based index in at which copying begins. - - is null. - - is less than zero. - - is multidimensional.-or- is equal to or greater than the length of .-or- The number of elements in the source is greater than the available space from to the end of the destination . - The type of the source cannot be cast automatically to the type of the destination . - - - - Returns an enumerator that iterates through a collection. - - - An object that can be used to iterate through the collection. - - - - - Gets or sets the with the specified key. - - - - - - Gets an object containing the keys of the object. - - - An object containing the keys of the object. - - - - Gets an object containing the values in the object. - - - An object containing the values in the object. - - - - Gets a value indicating whether the object is read-only. - - - true if the object is read-only; otherwise, false. - - - - Gets a value indicating whether the object has a fixed size. - - - true if the object has a fixed size; otherwise, false. - - - - Gets the number of elements contained in the . - - - The number of elements contained in the . - - - - Gets an object that can be used to synchronize access to the . - - - An object that can be used to synchronize access to the . - - - - Gets a value indicating whether access to the is synchronized (thread safe). - - - true if access to the is synchronized (thread safe); otherwise, false. - - - diff --git a/bin/Castle.DynamicProxy2.dll b/bin/Castle.DynamicProxy2.dll deleted file mode 100644 index 596b5878c..000000000 Binary files a/bin/Castle.DynamicProxy2.dll and /dev/null differ diff --git a/bin/Castle.DynamicProxy2.xml b/bin/Castle.DynamicProxy2.xml deleted file mode 100644 index 1000887b6..000000000 --- a/bin/Castle.DynamicProxy2.xml +++ /dev/null @@ -1,1249 +0,0 @@ - - - - Castle.DynamicProxy2 - - - - - Wraps a reference that is passed - ByRef and provides indirect load/store support. - - - - - Summary description for NewArrayExpression. - - - - - - - - - - Here we try to match a constructor argument to its value. - Since we can't get the values from the assembly, we use some heuristics to get it. - a/ we first try to match all the properties on the attributes by name (case insensitive) to the argument - b/ if we fail we try to match them by property type, with some smarts about convertions (i,e: can use Guid for string). - - - - - We have the following rules here. - Try to find a matching type, failing that, if the parameter is string, get the first property (under the assumption that - we can convert it. - - - - - Attributes can only accept simple types, so we return null for null, - if the value is passed as string we call to string (should help with converting), - otherwise, we use the value as is (enums, integer, etc). - - - - s - Provides appropriate Ldc.X opcode for the type of primitive value to be loaded. - - - - - Provides appropriate Ldind.X opcode for - the type of primitive value to be loaded indirectly. - - - - - Inspect the base method for generic definitions - and set the return type and the parameters - accordingly - - - - - Emits a load opcode of the appropriate kind for a constant string or - primitive value. - - - - - - - Emits a load opcode of the appropriate kind for the constant default value of a - type, such as 0 for value types and null for reference types. - - - - - Emits a load indirect opcode of the appropriate type for a value or object reference. - Pops a pointer off the evaluation stack, dereferences it and loads - a value of the specified type. - - - - - - - Emits a store indirectopcode of the appropriate type for a value or object reference. - Pops a value of the specified type and a pointer off the evaluation stack, and - stores the value. - - - - - - - Summary description for PropertiesCollection. - - - - - Provides appropriate Stind.X opcode - for the type of primitive value to be stored indirectly. - - - - - Base class that exposes the common functionalities - to proxy generation. - - - TODO: - - Add tests and fixes for 'leaking this' problem - - - - - Used by dinamically implement - - - - - - Generates a parameters constructor that initializes the proxy - state with just to make it non-null. - - This constructor is important to allow proxies to be XML serializable - - - - - - If callbackMethod is null the InvokeOnTarget implementation - is just the code to throw an exception - - - - - - - - - - - - If callbackMethod is null the InvokeOnTarget implementation - is just the code to throw an exception - - - - - - - - If true the invocation will implement the IChangeProxyTarget interface - - - - - Generates the constructor for the nested class that extends - - - - - - - - - - Improvement: this cache should be static. We should generate a - type constructor instead - - - - - Performs some basic screening and invokes the - to select methods. - - - - - - - - Checks if the method is public or protected. - - - - - - - Attributes should be replicated if they are non-inheritable, - but there are some special cases where the attributes means - something to the CLR, where they should be skipped. - - - - - Checks if the method has the same signature as a method that was marked as - one that should generate a new vtable slot. - - - - - Initializes a new instance of the class. - - Type of the target. - The interfaces. - The options. - - - - - - - - - Initializes a new instance of the class. - - The emitter. - The add method. - The remove method. - The attributes. - - - - - - - - - Finds the type of the method on target. - - The method on interface. - Type of the proxy target. - /// if set to true will check implementation on mixins. - - - - - Checks whether the given types are the same. This is - more complicated than it looks. - - - - - - - - Checks whether the given methods are the same. - - - - True if the methods are the same. - - - - This is used by the ProxyObjectReference class durin de-serialiation, to know - which generator it should use - - - - - Returns the methods implemented by a type. Use this instead of Type.GetMethods() to work around a CLR issue - where duplicate MethodInfos are returned by Type.GetMethods() after a token of a generic type's method was loaded. - - - - - Handles the deserialization of proxies. - - - - - Resets the used for deserialization to a new scope. - - This is useful for test cases. - - - - Resets the used for deserialization to a given . - - The scope to be used for deserialization. - By default, the deserialization process uses a different scope than the rest of the application, which can lead to multiple proxies - being generated for the same type. By explicitly setting the deserialization scope to the application's scope, this can be avoided. - - - - Gets the used for deserialization. - - As has no way of automatically determining the scope used by the application (and the application - might use more than one scope at the same time), uses a dedicated scope instance for deserializing proxy - types. This instance can be reset and set to a specific value via and . - - - - Used during the target type inspection process. Implementors have a chance to customize the - proxy generation process. - - - - - Invoked by the generation process to determine if the specified method should be proxied. - - The type which declares the given method. - The method to inspect. - True if the given method should be proxied; false otherwise. - - - - Invoked by the generation process to notify that a member was not marked as virtual. - - The type which declares the non-virtual member. - The non-virtual member. - - Non-virtual members cannot be proxied. This method gives an opportunity to inspect - any non-virtual member of a type that has been requested to be proxied, and if - appropriate - throw an exception to notify the caller. - - - - - Invoked by the generation process to notify that the whole process has completed. - - - - - Applied to the assemblies saved by in order to persist the cache data included in the persisted assembly. - - - - - Default implementation of interface producing in-memory proxy assemblies. - - - - - Abstracts the implementation of proxy type construction. - - - - - Creates a proxy type for given , using provided. - - The class type to proxy. - The proxy generation options. - The generated proxy type. - Thrown when is a generic type definition. - Thrown when is not public. - Note that to avoid this exception, you can mark offending type internal, and define - pointing to Castle Dynamic Proxy assembly, in assembly containing that type, if this is appropriate. - - - - - Creates a proxy type for given , implementing , using provided. - - The class type to proxy. - Additional interface types to proxy. - The proxy generation options. - The generated proxy type. - - Implementers should return a proxy type for the specified class and interfaces. - Additional interfaces should be only 'mark' interfaces, that is, they should work like interface proxy without target. (See method.) - - Thrown when or any of is a generic type definition. - Thrown when or any of is not public. - Note that to avoid this exception, you can mark offending type internal, and define - pointing to Castle Dynamic Proxy assembly, in assembly containing that type, if this is appropriate. - - - - - Creates a proxy type that proxies calls to members on , implementing , using provided. - - The interface type to proxy. - Additional interface types to proxy. - Type implementing on which calls to the interface members should be intercepted. - The proxy generation options. - The generated proxy type. - - Implementers should return a proxy type for the specified interface that 'proceeds' executions to the specified target. - Additional interfaces should be only 'mark' interfaces, that is, they should work like interface proxy without target. (See method.) - - Thrown when or any of is a generic type definition. - Thrown when or any of is not public. - Note that to avoid this exception, you can mark offending type internal, and define - pointing to Castle Dynamic Proxy assembly, in assembly containing that type, if this is appropriate. - - - - - Creates a proxy type for given that delegates all calls to the provided interceptors. - - The interface type to proxy. - Additional interface types to proxy. - The proxy generation options. - The generated proxy type. - - Implementers should return a proxy type for the specified interface and additional interfaces that delegate all executions to the specified interceptors. - - Thrown when or any of is a generic type definition. - Thrown when or any of is not public. - Note that to avoid this exception, you can mark offending type internal, and define - pointing to Castle Dynamic Proxy assembly, in assembly containing that type, if this is appropriate. - - - - - Creates a proxy type for given and that delegates all calls to the provided interceptors and allows interceptors to switch the actual target of invocation. - - The interface type to proxy. - Additional interface types to proxy. - The proxy generation options. - The generated proxy type. - - Implementers should return a proxy type for the specified interface(s) that delegate all executions to the specified interceptors - and uses an instance of the interface as their targets (i.e. ), rather than a class. All classes should then implement interface, - to allow interceptors to switch invocation target with instance of another type implementing called interface. - - Thrown when or any of is a generic type definition. - Thrown when or any of is not public. - Note that to avoid this exception, you can mark offending type internal, and define - pointing to Castle Dynamic Proxy assembly, in assembly containing that type, if this is appropriate. - - - - - Gets the associated with this builder. - - The module scope associated with this builder. - - - - Initializes a new instance of the class with new . - - - - - Initializes a new instance of the class. - - The module scope for generated proxy types. - - - - Provides an extension point that allows proxies to choose specific interceptors on - a per method basis. - - - - - Selects the interceptors that should intercept calls to the given . - - The type declaring the method to intercept. - The method that will be intercepted. - All interceptors registered with the proxy. - An array of interceptors to invoke upon calling the . - - This method is called only once per proxy instance, upon the first call to the - . Either an empty array or null are valid return values to indicate - that no interceptor should intercept calls to the method. Although it is not advised, it is - legal to return other implementations than these provided in - . A better way to do this, is by passing all the required - interceptors to the appropriate method of . You can use this - method to influence the order in which interceptors will be called, by reordering the array. - Returning an array containing null references (Nothing in Visual Basic) is not legal, - and will result in a runtime exception. - - - - - - Determines whether this assembly has internals visible to dynamic proxy. - - The assembly to inspect. - - - - Determines whether the specified method is internal. - - The method. - - true if the specified method is internal; otherwise, false. - - - - - Because we need to cache the types based on the mixed in mixins, we do the following here: - - Get all the mixin interfaces - - Sort them by full name - - Return them by position - - The idea is to have reproducable behavior for the case that mixins are registered in different orders. - This method is here because it is required - - - - - Summary description for ModuleScope. - - - - - The default file name used when the assembly is saved using . - - - - - The default assembly (simple) name used for the assemblies generated by a instance. - - - - - Initializes a new instance of the class; assemblies created by this instance will not be saved. - - - - - Initializes a new instance of the class, allowing to specify whether the assemblies generated by this instance - should be saved. - - If set to true saves the generated module. - - - - Initializes a new instance of the class, allowing to specify whether the assemblies generated by this instance - should be saved and what simple names are to be assigned to them. - - If set to true saves the generated module. - The simple name of the strong-named assembly generated by this . - The path and file name of the manifest module of the strong-named assembly generated by this . - The simple name of the weak-named assembly generated by this . - The path and file name of the manifest module of the weak-named assembly generated by this . - - - - Returns a type from this scope's type cache, or null if the key cannot be found. - - The key to be looked up in the cache. - The type from this scope's type cache matching the key, or null if the key cannot be found - - - - Registers a type in this scope's type cache. - - The key to be associated with the type. - The type to be stored in the cache. - - - - Gets the key pair used to sign the strong-named assembly generated by this . - - - - - - Gets the specified module generated by this scope, creating a new one if none has yet been generated. - - If set to true, a strong-named module is returned; otherwise, a weak-named module is returned. - A strong-named or weak-named module generated by this scope, as specified by the parameter. - - - - Gets the strong-named module generated by this scope, creating a new one if none has yet been generated. - - A strong-named module generated by this scope. - - - - Gets the weak-named module generated by this scope, creating a new one if none has yet been generated. - - A weak-named module generated by this scope. - - - - Saves the generated assembly with the name and directory information given when this instance was created (or with - the and current directory if none was given). - - - - This method stores the generated assembly in the directory passed as part of the module information specified when this instance was - constructed (if any, else the current directory is used). If both a strong-named and a weak-named assembly - have been generated, it will throw an exception; in this case, use the overload. - - - If this was created without indicating that the assembly should be saved, this method does nothing. - - Both a strong-named and a weak-named assembly have been generated. - The path of the generated assembly file, or null if no file has been generated. - - - - Saves the specified generated assembly with the name and directory information given when this instance was created - (or with the and current directory if none was given). - - True if the generated assembly with a strong name should be saved (see ); - false if the generated assembly without a strong name should be saved (see . - - - This method stores the specified generated assembly in the directory passed as part of the module information specified when this instance was - constructed (if any, else the current directory is used). - - - If this was created without indicating that the assembly should be saved, this method does nothing. - - - No assembly has been generated that matches the parameter. - - The path of the generated assembly file, or null if no file has been generated. - - - - Loads the generated types from the given assembly into this 's cache. - - The assembly to load types from. This assembly must have been saved via or - , or it must have the manually applied. - - This method can be used to load previously generated and persisted proxy types from disk into this scope's type cache, eg. in order - to avoid the performance hit associated with proxy generation. - - - - - Users of this should use this lock when accessing the cache. - - - - - Gets the strong-named module generated by this scope, or if none has yet been generated. - - The strong-named module generated by this scope, or if none has yet been generated. - - - - Gets the file name of the strongly named module generated by this scope. - - The file name of the strongly named module generated by this scope. - - - - Gets the directory where the strongly named module generated by this scope will be saved, or if the current directory - is used. - - The directory where the strongly named module generated by this scope will be saved when is called - (if this scope was created to save modules). - - - - Gets the weak-named module generated by this scope, or if none has yet been generated. - - The weak-named module generated by this scope, or if none has yet been generated. - - - - Gets the file name of the weakly named module generated by this scope. - - The file name of the weakly named module generated by this scope. - - - - Gets the directory where the weakly named module generated by this scope will be saved, or if the current directory - is used. - - The directory where the weakly named module generated by this scope will be saved when is called - (if this scope was created to save modules). - - - - ProxyBuilder that persists the generated type. - - - The saved assembly contains just the last generated type. - - - - - Initializes a new instance of the class. - - - - - Saves the generated assembly to a physical file. Note that this renders the unusable. - - The path of the generated assembly file, or null if no assembly has been generated. - This method does not support saving multiple files. If both a signed and an unsigned module have been generated, use the - respective methods of the . - - - - Initializes a new instance of the class. - - The hook. - - - - Initializes a new instance of the class. - - - - - Provides proxy objects for classes and interfaces. - - - - - Initializes a new instance of the class. - - Proxy types builder. - - - - Initializes a new instance of the class. - - - - - Creates proxy object intercepting calls to members of interface on object with given . - - Type of the interface implemented by which will be proxied. - The target object, calls to which will be intercepted. - The interceptors called during the invocation of proxied methods. - Object proxying calls to members of on object. - Thrown when given object is a null reference (Nothing in Visual Basic). - Thrown when given array is a null reference (Nothing in Visual Basic). - Thrown when given is not an interface type. - Thrown when no default constructor exists on actual type of object. - Thrown when default constructor of actual type of throws an exception. - - This method uses implementation to generate a proxy type. - As such caller should expect any type of exception that given implementation may throw. - - - - - Creates proxy object intercepting calls to members of interface on object with given . - - Type of the interface implemented by which will be proxied. - The target object, calls to which will be intercepted. - The proxy generation options used to influence generated proxy type and object. - The interceptors called during the invocation of proxied methods. - - Object proxying calls to members of on object. - - Thrown when given object is a null reference (Nothing in Visual Basic). - Thrown when given array is a null reference (Nothing in Visual Basic). - Thrown when given is not an interface type. - Thrown when no default constructor exists on actual type of object. - Thrown when default constructor of actual type of throws an exception. - - This method uses implementation to generate a proxy type. - As such caller should expect any type of exception that given implementation may throw. - - - - - Creates proxy object intercepting calls to members of interface on object with given . - - Type of the interface implemented by which will be proxied. - The target object, calls to which will be intercepted. - The interceptors called during the invocation of proxied methods. - - Object proxying calls to members of type on object. - - Thrown when given object is a null reference (Nothing in Visual Basic). - Thrown when given object is a null reference (Nothing in Visual Basic). - Thrown when given array is a null reference (Nothing in Visual Basic). - Thrown when given is a generic type definition. - Thrown when given is not an interface type. - Thrown when given does not implement interface. - Thrown when no default constructor exists on actual type of object. - Thrown when default constructor of actual type of throws an exception. - - This method uses implementation to generate a proxy type. - As such caller should expect any type of exception that given implementation may throw. - - - - - Creates proxy object intercepting calls to members of interface on object with given . - - Type of the interface implemented by which will be proxied. - The target object, calls to which will be intercepted. - The proxy generation options used to influence generated proxy type and object. - The interceptors called during the invocation of proxied methods. - - Object proxying calls to members of type on object. - - Thrown when given object is a null reference (Nothing in Visual Basic). - Thrown when given object is a null reference (Nothing in Visual Basic). - Thrown when given array is a null reference (Nothing in Visual Basic). - Thrown when given is a generic type definition. - Thrown when given is not an interface type. - Thrown when given does not implement interface. - Thrown when no default constructor exists on actual type of object. - Thrown when default constructor of actual type of throws an exception. - - This method uses implementation to generate a proxy type. - As such caller should expect any type of exception that given implementation may throw. - - - - - Creates proxy object intercepting calls to members of interface on object with given . - - Type of the interface implemented by which will be proxied. - The target object, calls to which will be intercepted. - Additional interface types. Calls to their members will be proxied as well. - The interceptors called during the invocation of proxied methods. - - Object proxying calls to members of and types on object. - - Thrown when given object is a null reference (Nothing in Visual Basic). - Thrown when given object is a null reference (Nothing in Visual Basic). - Thrown when given array is a null reference (Nothing in Visual Basic). - Thrown when given or any of is a generic type definition. - Thrown when given is not an interface type. - Thrown when given does not implement interface. - Thrown when no default constructor exists on actual type of object. - Thrown when default constructor of actual type of throws an exception. - - This method uses implementation to generate a proxy type. - As such caller should expect any type of exception that given implementation may throw. - - - - - Creates proxy object intercepting calls to members of interface on object with given . - - Type of the interface implemented by which will be proxied. - The target object, calls to which will be intercepted. - The proxy generation options used to influence generated proxy type and object. - Additional interface types. Calls to their members will be proxied as well. - The interceptors called during the invocation of proxied methods. - - Object proxying calls to members of and types on object. - - Thrown when given object is a null reference (Nothing in Visual Basic). - Thrown when given object is a null reference (Nothing in Visual Basic). - Thrown when given array is a null reference (Nothing in Visual Basic). - Thrown when given or any of is a generic type definition. - Thrown when given is not an interface type. - Thrown when given does not implement interface. - Thrown when no default constructor exists on actual type of object. - Thrown when default constructor of actual type of throws an exception. - - This method uses implementation to generate a proxy type. - As such caller should expect any type of exception that given implementation may throw. - - - - - Creates proxy object intercepting calls to members of interface on object with given . - Interceptors can use interface to provide other target for method invocation than default . - - Type of the interface implemented by which will be proxied. - The target object, calls to which will be intercepted. - The interceptors called during the invocation of proxied methods. - - Object proxying calls to members of type on object or alternative implementation swapped at runtime by an interceptor. - - Thrown when given object is a null reference (Nothing in Visual Basic). - Thrown when given object is a null reference (Nothing in Visual Basic). - Thrown when given array is a null reference (Nothing in Visual Basic). - Thrown when given is a generic type definition. - Thrown when given is not an interface type. - Thrown when given does not implement interface. - Thrown when no default constructor exists on actual type of object. - Thrown when default constructor of actual type of throws an exception. - - This method uses implementation to generate a proxy type. - As such caller should expect any type of exception that given implementation may throw. - - - - - Creates proxy object intercepting calls to members of interface on object with given . - Interceptors can use interface to provide other target for method invocation than default . - - Type of the interface implemented by which will be proxied. - The target object, calls to which will be intercepted. - The proxy generation options used to influence generated proxy type and object. - The interceptors called during the invocation of proxied methods. - - Object proxying calls to members of type on object or alternative implementation swapped at runtime by an interceptor. - - Thrown when given object is a null reference (Nothing in Visual Basic). - Thrown when given object is a null reference (Nothing in Visual Basic). - Thrown when given array is a null reference (Nothing in Visual Basic). - Thrown when given is a generic type definition. - Thrown when given is not an interface type. - Thrown when given does not implement interface. - Thrown when no default constructor exists on actual type of object. - Thrown when default constructor of actual type of throws an exception. - - This method uses implementation to generate a proxy type. - As such caller should expect any type of exception that given implementation may throw. - - - - - Creates proxy object intercepting calls to members of interface on object with given . - Interceptors can use interface to provide other target for method invocation than default . - - Type of the interface implemented by which will be proxied. - The target object, calls to which will be intercepted. - The proxy generation options used to influence generated proxy type and object. - Additional interface types. Calls to their members will be proxied as well. - The interceptors called during the invocation of proxied methods. - - Object proxying calls to members of and types on object or alternative implementation swapped at runtime by an interceptor. - - Thrown when given object is a null reference (Nothing in Visual Basic). - Thrown when given object is a null reference (Nothing in Visual Basic). - Thrown when given array is a null reference (Nothing in Visual Basic). - Thrown when given or any of is a generic type definition. - Thrown when given is not an interface type. - Thrown when given does not implement interface. - Thrown when no default constructor exists on actual type of object. - Thrown when default constructor of actual type of throws an exception. - - This method uses implementation to generate a proxy type. - As such caller should expect any type of exception that given implementation may throw. - - - - - Creates proxy object intercepting calls to members of interface on target object generated at runtime with given . - - Type of the interface which will be proxied. - The interceptors called during the invocation of proxied methods. - - Object proxying calls to members of types on generated target object. - - Thrown when given object is a null reference (Nothing in Visual Basic). - Thrown when given is not an interface type. - - Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the actual implementation of proxied methods must be provided by given implementations. - They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call , since there's no actual implementation to proceed with. - This method uses implementation to generate a proxy type. - As such caller should expect any type of exception that given implementation may throw. - - - - - Creates proxy object intercepting calls to members of interface on target object generated at runtime with given . - - Type of the interface which will be proxied. - The interceptors called during the invocation of proxied methods. - - Object proxying calls to members of types on generated target object. - - Thrown when given array is a null reference (Nothing in Visual Basic). - Thrown when given is not an interface type. - - Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the actual implementation of proxied methods must be provided by given implementations. - They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call , since there's no actual implementation to proceed with. - As a result of that also at least one implementation must be provided. - This method uses implementation to generate a proxy type. - As such caller should expect any type of exception that given implementation may throw. - - - - - Creates proxy object intercepting calls to members of interface on target object generated at runtime with given . - - Type of the interface which will be proxied. - The interceptor called during the invocation of proxied methods. - - Object proxying calls to members of type on generated target object. - - Thrown when given object is a null reference (Nothing in Visual Basic). - Thrown when given object is a null reference (Nothing in Visual Basic). - Thrown when given is a generic type definition. - Thrown when given is not an interface type. - - Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the actual implementation of proxied methods must be provided by given implementations. - They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call , since there's no actual implementation to proceed with. - This method uses implementation to generate a proxy type. - As such caller should expect any type of exception that given implementation may throw. - - - - - Creates proxy object intercepting calls to members of interface on target object generated at runtime with given . - - Type of the interface which will be proxied. - The interceptors called during the invocation of proxied methods. - - Object proxying calls to members of type on generated target object. - - Thrown when given object is a null reference (Nothing in Visual Basic). - Thrown when given array is a null reference (Nothing in Visual Basic). - Thrown when given is a generic type definition. - Thrown when given is not an interface type. - - Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the actual implementation of proxied methods must be provided by given implementations. - They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call , since there's no actual implementation to proceed with. - This method uses implementation to generate a proxy type. - As such caller should expect any type of exception that given implementation may throw. - - - - - Creates proxy object intercepting calls to members of interface on target object generated at runtime with given . - - Type of the interface which will be proxied. - Additional interface types. Calls to their members will be proxied as well. - The interceptors called during the invocation of proxied methods. - - Object proxying calls to members of and types on generated target object. - - Thrown when given object is a null reference (Nothing in Visual Basic). - Thrown when given array is a null reference (Nothing in Visual Basic). - Thrown when given or any of is a generic type definition. - Thrown when given is not an interface type. - - Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the actual implementation of proxied methods must be provided by given implementations. - They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call , since there's no actual implementation to proceed with. - This method uses implementation to generate a proxy type. - As such caller should expect any type of exception that given implementation may throw. - - - - - Creates proxy object intercepting calls to members of interface on target object generated at runtime with given . - - Type of the interface which will be proxied. - The proxy generation options used to influence generated proxy type and object. - Additional interface types. Calls to their members will be proxied as well. - The interceptors called during the invocation of proxied methods. - - Object proxying calls to members of and types on generated target object. - - Thrown when given object is a null reference (Nothing in Visual Basic). - Thrown when given array is a null reference (Nothing in Visual Basic). - Thrown when given or any of is a generic type definition. - Thrown when given is not an interface type. - - Since this method uses an empty-shell implementation of to proxy generated at runtime, the actual implementation of proxied methods must be provided by given implementations. - They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call , since there's no actual implementation to proceed with. - This method uses implementation to generate a proxy type. - As such caller should expect any type of exception that given implementation may throw. - - - - - Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . - - Type of class which will be proxied. - The interceptors called during the invocation of proxied methods. - - New object of type proxying calls to virtual members of type. - - Thrown when given is not a class type. - Thrown when no default constructor exists on type . - Thrown when default constructor of type throws an exception. - - This method uses implementation to generate a proxy type. - As such caller should expect any type of exception that given implementation may throw. - - - - - Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . - - Type of class which will be proxied. - The interceptors called during the invocation of proxied methods. - - New object of type proxying calls to virtual members of type. - - Thrown when given object is a null reference (Nothing in Visual Basic). - Thrown when given is a generic type definition. - Thrown when given is not a class type. - Thrown when no default constructor exists on type . - Thrown when default constructor of type throws an exception. - - This method uses implementation to generate a proxy type. - As such caller should expect any type of exception that given implementation may throw. - - - - - Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . - - Type of class which will be proxied. - Additional interface types. Calls to their members will be proxied as well. - The interceptors called during the invocation of proxied methods. - - New object of type proxying calls to virtual members of and types. - - Thrown when given object is a null reference (Nothing in Visual Basic). - Thrown when given or any of is a generic type definition. - Thrown when given is not a class type. - Thrown when no default constructor exists on type . - Thrown when default constructor of type throws an exception. - - This method uses implementation to generate a proxy type. - As such caller should expect any type of exception that given implementation may throw. - - - - - Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . - - Type of class which will be proxied. - Arguments of constructor of type which should be used to create a new instance of that type. - The interceptors called during the invocation of proxied methods. - - New object of type proxying calls to virtual members of type. - - Thrown when given object is a null reference (Nothing in Visual Basic). - Thrown when given is a generic type definition. - Thrown when given is not a class type. - Thrown when no constructor exists on type with parameters matching . - Thrown when constructor of type throws an exception. - - This method uses implementation to generate a proxy type. - As such caller should expect any type of exception that given implementation may throw. - - - - - Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . - - Type of class which will be proxied. - The proxy generation options used to influence generated proxy type and object. - The interceptors called during the invocation of proxied methods. - - New object of type proxying calls to virtual members of type. - - Thrown when given object is a null reference (Nothing in Visual Basic). - Thrown when given object is a null reference (Nothing in Visual Basic). - Thrown when given is a generic type definition. - Thrown when given is not a class type. - Thrown when no default constructor exists on type . - Thrown when default constructor of type throws an exception. - - This method uses implementation to generate a proxy type. - As such caller should expect any type of exception that given implementation may throw. - - - - - Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . - - Type of class which will be proxied. - Additional interface types. Calls to their members will be proxied as well. - The proxy generation options used to influence generated proxy type and object. - The interceptors called during the invocation of proxied methods. - - New object of type proxying calls to virtual members of and types. - - Thrown when given object is a null reference (Nothing in Visual Basic). - Thrown when given object is a null reference (Nothing in Visual Basic). - Thrown when given or any of is a generic type definition. - Thrown when given is not a class type. - Thrown when no default constructor exists on type . - Thrown when default constructor of type throws an exception. - - This method uses implementation to generate a proxy type. - As such caller should expect any type of exception that given implementation may throw. - - - - - Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . - - Type of class which will be proxied. - Additional interface types. Calls to their members will be proxied as well. - The proxy generation options used to influence generated proxy type and object. - Arguments of constructor of type which should be used to create a new instance of that type. - The interceptors called during the invocation of proxied methods. - - New object of type proxying calls to virtual members of and types. - - Thrown when given object is a null reference (Nothing in Visual Basic). - Thrown when given object is a null reference (Nothing in Visual Basic). - Thrown when given or any of is a generic type definition. - Thrown when given is not a class type. - Thrown when no constructor exists on type with parameters matching . - Thrown when constructor of type throws an exception. - - This method uses implementation to generate a proxy type. - As such caller should expect any type of exception that given implementation may throw. - - - - - Creates the proxy type for class proxy with given class, implementing given and using provided . - - The base class for proxy type. - The interfaces that proxy type should implement. - The options for proxy generation process. - of proxy. - - - - Creates the proxy type for interface proxy with target for given interface, implementing given on given and using provided . - - The interface proxy type should implement. - The additional interfaces proxy type should implement. - Actual type that the proxy type will encompass. - The options for proxy generation process. - of proxy. - - - - Creates the proxy type for interface proxy with target interface for given interface, implementing given on given and using provided . - - The interface proxy type should implement. - The additional interfaces proxy type should implement. - Actual type that the proxy type will encompass. - The options for proxy generation process. - of proxy. - - - - Creates the proxy type for interface proxy without target for given interface, implementing given and using provided . - - The interface proxy type should implement. - The additional interfaces proxy type should implement. - The options for proxy generation process. - of proxy. - - - - Gets the proxy builder instance used to generate proxy types. - - The proxy builder. - - - - - - - - - - - - - - - For interface proxies, this will point to the - on the target class - - - - diff --git a/bin/Castle.MicroKernel.dll b/bin/Castle.MicroKernel.dll deleted file mode 100644 index f856d8be8..000000000 Binary files a/bin/Castle.MicroKernel.dll and /dev/null differ diff --git a/bin/Castle.MicroKernel.xml b/bin/Castle.MicroKernel.xml deleted file mode 100644 index 203199944..000000000 --- a/bin/Castle.MicroKernel.xml +++ /dev/null @@ -1,5484 +0,0 @@ - - - - Castle.MicroKernel - - - - - Abstract implementation of . - The implementors must only override the InternalCreate and - InternalDestroy methods in order to perform their creation and - destruction logic. - - - - - Implements the instance creation logic. The default - implementation should rely on an ordinary call to - Activator.CreateInstance(). - - - This interface is provided in order to allow custom components - to be created using a different logic, such as using a specific factory - or builder. - - The constructor for implementation has the following signature: - - - ComponentModel model, IKernel kernel, - ComponentInstanceDelegate onCreation, - ComponentInstanceDelegate onDestruction - - - The Activator should raise the events onCreation and onDestruction - in order to correctly implement the contract. Usually the best - way of creating a custom activator is by extending the existing ones. - - - - - - - - Should return a new component instance. - - - - - - Should perform all necessary work to dispose the instance - and/or any resource related to it. - - - - - - Constructs an AbstractComponentActivator - - - - - Summary description for ComponentActivatorException. - - - - - Standard implementation of . - Handles the selection of the best constructor, fills the - writable properties the component exposes, run the commission - and decommission lifecycles, etc. - - - Custom implementors can just override the CreateInstance method. - Please note however that the activator is responsible for the proxy creation - when needed. - - - - - Initializes a new instance of the class. - - - - - - - - - Attempts to dynamically load a UserControl by invoking Page.LoadControl. - There are two uses of this class. - - 1) Add a component to the Kernel and add a VirtualPath attribute specifying - the relative path of the .ascx file for the associated UserControl. (easy) - - - - <component id="BasketView" - service="Castle.ShoppingCart.IBasketView, Castle.ShoppingCart" - type="Castle.ShoppingCart.BasketView, Castle.ShoppingCart" - lifestyle="transient" - virtualPath="~/Views/BasketView.ascx" - /> - - - - 2) Precompile a UserControl and add the pre-compiled class to the Kernel. (hard) - Has not been tested with proxies. - - - - - - Initializes a new instance of the class. - - The model. - The kernel. - The on creation. - The on destruction. - - - - Creates the instance. - - The context. - The arguments. - The signature. - - - - - - - - - - Used during a component request, passed along to the whole process. - This allow some data to be passed along the process, which is used - to detected cycled dependency graphs and now it's also being used - to provide arguments to components. - - - - - Implementors should use a strategy to obtain - valid references to properties and/or services - requested in the dependency model. - - - - - Should return an instance of a service or property values as - specified by the dependency model instance. - It is also the responsability of - to throw an exception in the case a non-optional dependency - could not be resolved. - - Creation context, which is a resolver itself - Parent resolver - normally the IHandler implementation - Model of the component that is requesting the dependency - The dependency model - The dependency resolved value or null - - - - Returns true if the resolver is able to satisfy this dependency. - - Creation context, which is a resolver itself - Parent resolver - normally the IHandler implementation - Model of the component that is requesting the dependency - The dependency model - true if the dependency can be satisfied - - - - Holds the scoped dependencies being resolved. - If a dependency appears twice on the same scope, we'd have a cycle. - - - - - The list of handlers that are used to resolve - the component. - We track that in order to try to avoid attempts to resolve a service - with itself. - - - - - Initializes a new instance of the class. - - The type to extract generic arguments. - The parent context. - - - - Initializes a new instance of the class. - - The handler. - The release policy. - The type to extract generic arguments. - The additional arguments. - The conversion manager. - - - - Initializes a new instance of the class. - - - - - Check if we are now in the middle of resolving this handler, - and as such, we shouldn't try to resolve that. - - - - Creates a new, empty instance. - A new CreationContext should be created every time, as the contexts keeps some state related to dependency resolution. - - - - Pendent - - - - - Extends adding and - information. Th MemberInfo is only useful to provide detailed information - on exceptions. - The ComponentModel is required so we can get resolve an object that takes as a parameter itself, but - with difference model. (See IoC 51 for the details) - - - - - Exception throw when a circular dependency is detected - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The message. - - - - Initializes a new instance of the class. - - The message. - The inner exception. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is . - The class name is or is zero (0). - - - - Exception threw when a request for a component - cannot be satisfied because the component does not - exist in the container - - - - - Initializes a new instance of the class. - - The name. - - - - Initializes a new instance of the class. - - The service. - - - - Initializes a new instance of the class. - - The object that holds the serialized object data. - The contextual information about the source or destination. - - - - Exception threw when there is a problem - registering a component - - - - - Initializes a new instance of the class. - - The message. - - - - Initializes a new instance of the class. - - The object that holds the serialized object data. - The contextual information about the source or destination. - - - - Exception threw by Kernel operations that failed - for some reason. - - - - - Initializes a new instance of the class. - - The message. - - - - Initializes a new instance of the class. - - The message. - The inner exception. - - - - Initializes a new instance of the class. - - The object that holds the serialized object data. - The contextual information about the source or destination. - - - - Exception that is thrown when a error occurs during the Event Wiring process - - - - - Base exception to be used by facilities. - - - - - Initializes a new instance of the class. - - The message. - - - - Initializes a new instance of the class. - - The message. - The inner exception. - - - - Initializes a new instance of the class. - - The object that holds the serialized object data. - The contextual information about the source or destination. - - - - Facility to allow components to dynamically subscribe to events offered by - other components. We call the component that offers events publishers and - the components that uses them, subscribers. - - - A component that wish to subscribe to an event must use the external configuration - adding a node subscribers on the publisher. This node can have multiple entries using the - subscriber node. - - - This example shows two simple components: one is the event publisher and the other is the - subscriber. The subscription will be done by the facility, using the publisher associated configuration. - The Publisher class: - - public class SimplePublisher - { - public event PublishEventHandler Event; - - public void Trigger() - { - if (Event != null) - { - Event(this, new EventArgs()); - } - } - } - - The Subscriber class: - - public class SimpleListener - { - private bool _listened; - private object _sender; - - public void OnPublish(object sender, EventArgs e) - { - _sender = sender; - _listened = sender != null; - } - - public bool Listened - { - get { return _listened; } - } - - public object Sender - { - get { return _sender; } - } - } - - The configuration file: - - - - - - - - - - - - - - - - - - ]]> - - - - - - Base class for facilities. - - - - - Unit of extension. A facility should use - the extension points offered by the kernel - to augment its functionality. - - - - - - - - - - - - - - - - - The custom initialization for the Facility. - - It must be overriden. - - - - Initializes the facility. First it performs the initialization common for all - facilities, setting the and the - . After it, the Init method is invoked - and the custom initilization is perfomed. - - - - - - - Terminates the Facility, invokes the method and sets - the Kernel to a null reference. - - - - - Performs the tasks associated with freeing, releasing, or resetting - the facility resources. - - It can be overriden. - - - - Gets the where the facility is registered. - - The . - - - - Gets the facility configuration. - - The representing - the facility configuration. - - - - Overriden. Initializes the facility, subscribing to the , - , Kernel events. - - - - - Checks if the component we're dealing is a publisher. If it is, - parses the configuration (the subscribers node) getting the event wiring info. - - The component model. - Invalid and/or a error in the configuration - - - - Checks if the component we're dealing is a publisher. If it is, - iterates the subscribers starting them and wiring the events. - - The component model. - The instance representing the component. - When the subscriber is not found -
            or
            - The handler method isn't found -
            or
            - The event isn't found -
            -
            - - - Represents the information about an event. - - - - - Initializes a new instance of the class. - - Name of the event. - The name of the handler method. - - - - Serves as a hash function for a particular type. - - - A hash code for the current . - - - - - Determines whether the specified is equal to the current . - - The to compare with the current . - - true if the specified is equal to the current ; otherwise, false. - - - - - Gets the name of the event. - - The name of the event. - - - - Gets the handler method name. - - The handler. - - - - - - - - - Activates a object connecting to the remote server. - - - - - Initializes a new instance of the class. - - The model. - The kernel. - The oncreation event handler. - The ondestruction event handler. - - - - Activates a client connecting to the remote server, enforcing the uri and the server activation. - - - - - Initializes a new instance of the class. - - The model. - The kernel. - The oncreation event handler. - The ondestruction event handler. - - - - Activates a client connecting to the remote server through the . - - - - - Initializes a new instance of the class. - - The model. - The kernel. - The oncreation envent handler. - The ondestruction event handler. - - - - Activates a client activated object. - - - - - Initializes a new instance of the class. - - The model. - The kernel. - The oncreation event handler. - The ondestruction event handler. - - - - Activates and publishes a server object. - - - - - Initializes a new instance of the class. - - The model. - The kernel. - The oncreation event handler. - The ondestruction event handler. - - - - Facility to allow the communication with remote kernel, using the .NET Remoting infraestructure. - - - TODO - - - TODO - - - - - Used for client side (Expand explanation) - - - - - Used for server side. - Holds the local registry - - - - - Used for client side. - Holds a remote proxy to the server registry - - - - - Constructs a RemotingFacility - - - - - Performs the tasks associated with freeing, releasing, or resetting - the facility resources. - - It can be overriden. - - - - Inspects the model looking for remote component configuration. If found, - do the component Remoting configuration. - - - - - Implementors must inspect the component for - a given information or parameter. - - - - - Usually the implementation will look in the configuration property - of the model or the service interface, or the implementation looking for - something. - - The kernel instance - The component model - - - - Initializes a new instance of the class. - - The converter. - if set to true is a server. - if set to true is a client. - The base URI. - The remote registry. - The local registry. - - - - Client components are not created by the container - so there's no point collecting constructor dependencies - - - - - - Used in case of generics: - - - - - - - For each new component registered, - some components in the WaitingDependency - state may have became valid, so we check them - - - - - Request the component instance - - - - - - Represents a concern that will be applied to a component instance - during commission or decomission phase. - - - - - Implementors should act on the instance in response to - a decomission or commission phase. - - The model. - The component. - - - - Summary description for FactoryInterceptor. - - - - - Summary description for TypedFactoryFacility. - - - - - Implements the basis of - - - - - Contract for the IHandler, which manages an - component state and coordinates its creation - and destruction (dispatching to activators, lifestyle managers) - - - - - Initializes the handler with a reference to the - kernel. - - - - - - Implementors should return a valid instance - for the component the handler is responsible. - It should throw an exception in the case the component - can't be created for some reason - - - - - - Implementors should dispose the component instance - - - - - - Dictionary of String/object used to - associate data with a component dependency. - For example, if you component SmtpServer depends on - host and port, you can add those to this - dictionary and the handler will be able to use them. - - - TODO: Document this - - - - - TODO: Document this - - - - - - TODO: Document this - - - - - - - Gets the state of the handler - - - - - Gets the model of the component being - managed by this handler. - - - - - The serivce that this handler handles - - - - - Allow to track state changes of a handler that is modified directly. - This can happen if the client calls AddCustomDependencyValue or - RemoveCustomDependencyValue - - - - - Might be implemented by a handler - so it can expose access to dependency information - which is used to construct meaningful error messages - - - - - Returns human readable list of dependencies - this handler is waiting for. - list of the dependecies that was already checked, used to avoid cycles. - - - - - Dictionary of Type to a list of - - - - - Dictionary of key (string) to - - - - - Custom dependencies values associated with the handler - - - - - Lifestyle manager instance - - - - - Constructs and initializes the handler - - - - - - Saves the kernel instance, subscribes to - event, - creates the lifestyle manager instance and computes - the handler state. - - - - - - Should be implemented by derived classes: - returns an instance of the component this handler - is responsible for - - - - - - - Should be implemented by derived classes: - disposes the component instance (or recycle it) - - - - - - TODO: Pendent - - - - - - - TODO: Pendent - - - - - - - TODO: Pendent - - - - - - Returns human readable list of dependencies - this handler is waiting for. - - - - - - Creates an implementation of based - on and invokes - to initialize the newly created manager. - - - - - - - Checks if the handler is able to, at very least, satisfy - the dependencies for the constructor with less parameters - - - For each non*optional dependency, the implementation will invoke - - - - - - Invoked by - in order to check if a dependency can be satisfied. - If not, the handler is set to a 'waiting dependency' state. - - - This method registers the dependencies within the correct collection - or dictionary and changes the handler state to - - - - - - - Invoked by the kernel - when one of registered dependencies were satisfied by - new components registered. - - - Handler for the event - - - - - - - Invoked when the container receives a parent container reference. - - - This method implementation checks whether the parent container - is able to supply the dependencies for this handler. - - - - - - - Handler for the event - - - - - - - Gets the handler state. - - - - - Gets the component model. - - - - - - - - - - Summary description for DefaultGenericHandler. - - - TODO: Consider refactoring AbstractHandler moving lifestylemanager - creation to DefaultHandler - - - - - Initializes a new instance of the class. - - - - - - Clone some of the parent componentmodel properties to the generic subhandler. - - - The following properties are copied: - - - The - - - The - - - - the subhandler - - - - Summary description for DefaultHandler. - - - - - Initializes a new instance of the class. - - - - - - Returns an instance of the component this handler - is responsible for - - - - - - - disposes the component instance (or recycle it) - - - - - - Summary description for DefaultHandlerFactory. - - - - - Extension point to allow the developer - to use his implementation of - - - - - Summary description for HandlerException. - - - - - Initializes a new instance of the class. - - The message. - - - - Initializes a new instance of the class. - - The object that holds the serialized object data. - The contextual information about the source or destination. - - - - Possible states for a IHandler instance - - - - - The component can be requested - - - - - The component can not be requested - as it still depending on a external - dependency not yet available - - - - - - - - - - - - Redirects resolution to the main resolver, and if not found uses - the parent handler. - - - - - Initializes a new instance of the class. - - The parent handler. - The child resolver. - - - - Summary description for DisposalConcern. - - - - - Summary description for InitializationConcern. - - - - - Summary description for SupportInitializeConcern. - - - - - Pool implementation contract. - - - - - Implementors should return a component instance. - - - - - - Implementors should release the instance or put it - on the pool - - - - - - Initializes the pool to a initial size by requesting - n components and then releasing them. - - - - - Summary description for AbstractLifestyleManager. - - - - - The ILifestyleManager implements - a strategy for a given lifestyle, like singleton, perthread - and transient. - - - The responsability of ILifestyleManager - is only the management of lifestyle. It should rely on - to obtain a new component instance - - - - - Initializes the ILifestyleManager with the - - - - - - - - - Implementors should return the component instance based - on the lifestyle semantic. - - - - - - Implementors should release the component instance based - on the lifestyle semantic, for example, singleton components - should not be released on a call for release, instead they should - release them when disposed is invoked. - - - - - - Summary description for PerThreadLifestyleManager. - - - - - - - - - - Implements a Lifestyle Manager for Web Apps that - create at most one object per web request. - - - - - Implements a Poolable Lifestyle Manager. - - - - - Summary description for SingletonLifestyleManager. - - - - - Summary description for TransientLifestyleManager. - - - - - Inspects the component configuration and the type looking for a - definition of component activator type. The configuration preceeds whatever - is defined in the component. - - - This inspector is not guarantee to always set up an component activator type. - If nothing could be found it wont touch the model. In this case is up to - the kernel to establish a default component activator for components. - - - - - Seaches for the component activator in the configuration and, if unsuccessful - look for the component activator attribute in the implementation type. - - The kernel instance - The model instance - - - - Reads the attribute "componentActivatorType" associated with the - component configuration and verifies it implements the - interface. - - - If the type does not implement the proper interface - - - - - - - Check if the type expose one of the component activator attributes - defined in Castle.Core namespace. - - - - - - Validates that the provide type implements IComponentActivator - - The custom component activator. - - - - Inspects the component configuration and type looking for information - that can influence the generation of a proxy for that component. - - We specifically look for useSingleInterfaceProxy and marshalByRefProxy - on the component configuration or the - attribute. - - - - - - Seaches for proxy behavior in the configuration and, if unsuccessful - look for the attribute in - the implementation type. - - - - - Reads the proxy behavior associated with the - component configuration/type and applies it to the model. - - - If the conversion fails - - - - - - - Returns a instance if the type - uses the attribute. Otherwise returns null. - - - - - - Uses the ConfigurationStore registered in the kernel to obtain - an associated with the component. - - - - - Queries the kernel's ConfigurationStore for a configuration - associated with the component name. - - - - - - - Check for a node 'parameters' within the component - configuration. For each child it, a ParameterModel is created - and added to ComponentModel's Parameters collection - - - - - Inspect the configuration associated with the component - and populates the parameter model collection accordingly - - - - - - - This implementation of - collects all available constructors and populates them in the model - as candidates. The Kernel will pick up one of the candidates - according to a heuristic. - - - - - Only to hold internal constants and get rid of - magic numbers and hardcode names. - - - - - - - - - - Inspect the component for InterceptorAttribute and - the configuration for the interceptors node - - - - - Inspects the type looking for interfaces that constitutes - lifecycle interfaces, defined in the Castle.Model namespace. - - - - - Checks if the type implements and or - interfaces. - - - - - - - Inspects the component configuration and the type looking for a - definition of lifestyle type. The configuration preceeds whatever - is defined in the component. - - - This inspector is not guarantee to always set up an lifestyle type. - If nothing could be found it wont touch the model. In this case is up to - the kernel to estabish a default lifestyle for components. - - - - - Seaches for the lifestyle in the configuration and, if unsuccessful - look for the lifestyle attribute in the implementation type. - - - - - Reads the attribute "lifestyle" associated with the - component configuration and tries to convert to - enum type. - - - - - Check if the type expose one of the lifestyle attributes - defined in Castle.Model namespace. - - - - - Base for inspectors that want configuration associated with methods. - For each child a is created - and added to ComponentModel's methods collection - - - Implementors should override the return - the name of the node to be inspected. For example: - - - - - ]]> - - - - - - This implementation of - collects all potential writable puplic properties exposed by the component - implementation and populates the model with them. - The Kernel might be able to set some of these properties when the component - is requested. - - - - - Initializes a new instance of the class. - - - - - Adds the properties as optional dependencies of this component. - - - - - - - Summary description for DefaultComponentModelBuilder. - - - - - Implementors must construct a populated - instance of ComponentModel by inspecting the component - and|or the configuration. - - - - - Constructs a new ComponentModel by invoking - the registered contributors. - - - - - - - - - - "To give or supply in common with others; give to a - common fund or for a common purpose". The contributor - should inspect the component, or even the configuration - associated with the component, to add or change information - in the model that can be used later. - - - - - Removes the specified contributor - - - - - - Initializes a new instance of the class. - - The kernel. - - - - Constructs a new ComponentModel by invoking - the registered contributors. - - - - - - - - - - "To give or supply in common with others; give to a - common fund or for a common purpose". The contributor - should inspect the component, or even the configuration - associated with the component, to add or change information - in the model that can be used later. - - - - - - Removes the specified contributor - - - - - - Initializes the default contributors. - - - - - Gets the contributors. - - The contributors. - - - - Select the appropriate interecptors based on the application specific - business logic - - - - - Select the appropriate intereceptor references. - The intereceptor references aren't neccessarily registered in the model.Intereceptors - - The model to select the interceptors for - The intereceptors for this model (in the current context) or a null reference - - If the selector is not interested in modifying the interceptors for this model, it - should return a null reference and the next selector in line would be executed (or the default - model.Interceptors). - If the selector return a non null value, this is the value that is used, and the model.Interectors are ignored, if this - is not the desirable behavior, you need to merge your interceptors with the ones in model.Interecptors yourself. - - - - - Determain whatever the specified has interecptors. - The selector should only return true from this method if it has determained that is - a model that it would likely add interceptors to. - - The model - Whatever this selector is likely to add intereceptors to the specified model - - - - Defines the contract used by the kernel - to obtain proxies for components. The implementor - must return a proxied instance that dispatch - the invocation to the registered interceptors in the model - - - - - Implementors must create a proxy based on - the information exposed by ComponentModel - - The kernel instance - The component model - The component instance to be proxy (only required in some cases) - array of parameters to the constructor (if any) - The creation context - proxy instance - - - - Implementor should check the component model - and determine if the caller must pass on the component - instance to the proxy - - The kernel instance - The component model - true if an instance must be passed to - - - - Add the selector to the list of selectors that can affect interecptors decisions - in the container. - - - - - Determains whatever we need to create a proxy for this model - - - - - - - Used during the target type inspection process. - Implementors have a chance to interfere in the - proxy generation process - - - - - Invoked by the generation process to know if - the specified member should be proxied - - - - - - - - Invoked by the generation process to notify that a - member wasn't marked as virtual. - - - - - - - Invoked by the generation process to notify - that the whole process is completed. - - - - - This is a placeholder implementation of . - - - The decision to supply no implementation for - is supported by the fact that the MicroKernel should be a thin - assembly with the minimal set of features, although extensible. - Providing the support for this interface would obligate - the user to import another assembly, even if the large majority of - simple cases, no use use of interceptors will take place. - If you want to use however, see the Windsor container. - - - - - Holds the keys used by the proxy factories. - - - - - Key used to supply custom proxy options. - - - - - Represents options to configure proxies. - - - - - Initializes a new instance of the class. - - - - - Adds the additional interfaces to proxy. - - The interfaces. - - - - Adds the additional mix ins to integrate. - - The mix ins. - - - - Equalses the specified obj. - - The obj. - true if equal. - - - - Gets the hash code. - - - - - - Gets or sets the proxy hook. - - - - - Determines if the proxied component uses a target. - - - - - Determines if the proxied component can change targets. - - - - - Determines if the proxied component should only include - the service interface. - - - - - Determines if the interface proxied component should inherit - from - - - - - Gets the additional interfaces to proxy. - - The interfaces. - - - - Gets the mix ins to integrate. - - The interfaces. - - - - Helper support for proxy configuration. - - - - - Obtains the associated with the . - - The component model. - true if the options should be created if not present. - The associated proxy options for the component model. - - - - Sets the lifestyle to the specified . - - The type. - - - - - Assign a custom lifestyle type, that implements . - - Type of the custom lifestyle. - - - - - Assign a custom lifestyle type, that implements . - - The type of the custom lifestyle - - - - - Describes a set of components to register in the kernel. - - - - - Describes all the types based on basedOn. - - The base type. - - - - - Describes all the types based on type T. - - The base type. - - - - - Describes any types that are supplied. - - - - - - Prepares to register types from an assembly. - - The assembly name. - The corresponding - - - - Prepares to register types from an assembly. - - The assembly. - The corresponding - - - - Prepares to register types from an assembly containing the type. - - The type belonging to the assembly. - The corresponding - - - - Prepares to register types from an assembly containing the type. - - The type belonging to the assembly. - The corresponding - - - - Prepares to register types from a list of types. - - The list of types. - The corresponding - - - - Prepares to register types from a list of types. - - The list of types. - The corresponding - - - - Prepares to register types from a list of types. - - The list of types. - The corresponding - - - - Describes a related group of components to register in the kernel. - - - - - Prepares to register types from an assembly. - - The assembly name. - The corresponding - - - - Prepares to register types from an assembly. - - The assembly. - The corresponding - - - - Prepares to register types from a list of types. - - The list of types. - The corresponding - - - - Prepares to register types from a list of types. - - The list of types. - The corresponding - - - - Prepares to register types from a list of types. - - The list of types. - The corresponding - - - - Delegate for custom registration configuration. - - The component registration. - Not uaed. - - - - Describes how to register a group of related types. - - - - - The contract for all registrations with the kernel. - - - - - Performs the registration in the . - - The kernel. - - - - Initializes a new instance of the BasedOnDescriptor. - - - - - Assigns a conditional predication which must be satisfied. - - The predicate to satisfy. - - - - - Assigns a conditional predication which must not be satisfied. - - The predicate not to satisify. - - - - - Allows customized configurations of each matching type. - - The configuration action. - - - - - Allows customized configurations of each matching type. - - The configuration action. - - - - - Allows customized configurations of each matching type that is - assignable to . - - The type assignable from. - The configuration action. - - - - - Allows customized configurations of each matching type that is - assignable to . - - The type assignable from. - The configuration action. - - - - - Allows a type to be registered multiple times. - - - - - Returns the descriptor for accepting a new type. - - The base type. - The descriptor for the type. - - - - Returns the descriptor for accepting a new type. - - The base type. - The descriptor for the type. - - - - Returns the descriptor for accepting a type based on a condition. - - The accepting condition. - The descriptor for the type. - - - - Gets the type all types must be based on. - - - - - Gets the service descriptor. - - - - - Describes a configuration. - - - - - Initializes a new instance of the ConfigureDescriptor. - - The - The configuration action. - - - - Initializes a new instance of the ConfigureDescriptor. - - The - The base type to match. - The configuration action. - - - - Allows customized configurations of each matching type. - - The configuration action. - - - - - Allows customized configurations of each matching type. - - The configuration action. - - - - - Allows customized configurations of each matching type that is - assignable to . - - The type assignable from. - The configuration action. - - - - - Allows customized configurations of each matching type that is - assignable to . - - The type assignable from. - The configuration action. - - - - - Performs the component configuration. - - The component registration. - - - - Selects a set of types from an assembly. - - - - - Describes the source of types to register. - - - - - Allows a type to be registered multiple times. - - - - - Returns the descriptor for accepting a type. - - The base type. - The descriptor for the type. - - - - Returns the descriptor for accepting a type. - - The base type. - The descriptor for the type. - - - - Returns the descriptor for accepting a type based on a condition. - - The accepting condition. - The descriptor for the type. - - - - Selects an existing set of types to register. - - - - - Describes how to select a types service. - - - - - Uses the base type matched on. - - - - - - Uses the first interface of a type. - - - - - - Uses to lookup the sub interface. - For example: if you have IService and - IProductService : ISomeInterface, IService, ISomeOtherInterface. - When you call FromInterface(typeof(IService)) then IProductService - will be used. Useful when you want to register _all_ your services - and but not want to specify all of them. - - - - - - - Uses base type to lookup the sub interface. - - - - - - Assigns a custom service selection strategy. - - - - - - - Assigns the supplied service types. - - - - - - - This is a workaround for a CLR bug in - which GetInterfaces() returns interfaces - with no implementations. - - Type of the service. - - - - - Constructs the descriptor with name and value. - - The attribute name. - The attribute value. - - - - Constructs the descriptor with name. - - The component. - The attribute name. - - - - Builds the with value. - - The attribute value. - The - - - - Factory for creating objects. - - - - - Creates a component registration for the - - Type of the service. - The component registration. - - - - Creates a component registration for the - - Types of the service. - The component registration.B - - - - Creates a component registration for the - - Types of the service. - The component registration.B - - - - Creates a component registration for the service type. - - The service type. - The component registration. - - - - Creates a component registration for the service types. - - The primary service type. - The forwarded type. - The component registration. - - - - Creates a component registration for the service types. - - The primary service type. - The first forwarded type. - The second forwarded type. - The component registration. - - - - Creates a component registration for the service types. - - The primary service type. - The first forwarded type. - The second forwarded type. - The third forwarded type. - The component registration. - - - - Creates a component registration for the service types. - - The primary service type. - The first forwarded type. - The second forwarded type. - The third forwarded type. - The fourth forwarded type. - The component registration. - - - - Create a component registration for an exisiting - - The component model. - The component registration. - - - - Determines if the component service is already registered. - - The kernel. - The component model. - true if the service is already registered. - - - - Creates a predicate to check if a component is in a namespace. - - The namespace. - true if the component type is in the namespace. - - - - Creates a predicate to check if a component shares a namespace with another. - - The component type to test namespace against. - true if the component is in the same namespace. - - - - Creates a predicate to check if a component shares a namespace with another. - - The component type to test namespace against. - true if the component is in the same namespace. - - - - Delegate to filter component registration. - - The kernel. - The component model. - true if accepted. - - - - Registration for a single type as a component with the kernel. - - You can create a new registration with the factory. - - The service type - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with an existing . - - - - - With the overwrite. - - - - - - Change the name of this registration. - This will be the key for the component in the kernel. - - If not set, the of the - will be used as the key to register the component. - - The name of this registration. - - - - - Sets the concrete type that implements the service to . - - If not set, the will be used as the implementation for this component. - - The type that is the implementation for the service. - - - - - Sets the concrete type that implements the service to . - - If not set, the will be used as the implementation for this component. - - The type that is the implementation for the service. - - - - - Assigns an existing instance as the component for this registration. - - The component instance. - - - - - Registers the service types on behalf of this component. - - The types to forward. - - - - - Registers the service types on behalf of this component. - - The forwarded type. - The component registration. - - - - Registers the service types on behalf of this component. - - The first forwarded type. - The second forwarded type. - The component registration. - - - - Registers the service types on behalf of this component. - - The first forwarded type. - The second forwarded type. - The third forwarded type. - The component registration. - - - - Registers the service types on behalf of this component. - - The first forwarded type. - The second forwarded type. - The third forwarded type. - The fourth forwarded type. - The component registration. - - - - Registers the service types on behalf of this component. - - The types to forward. - - - - - Set a custom which creates and destroys the component. - - - - - - Sets for this component. - - The extended properties. - - - - - Sets for this component. - - The extendend properties as key/value pairs. - - - - - Specify custom dependencies using . - - Use to specify the components - this component should be resolved with. - - The dependencies. - - - - - Uses a dictionary of key/value pairs, to specify custom dependencies. - - Use to specify the components - this component should be resolved with. - - The dependencies. - - - - - Uses an (anonymous) object as a dictionary, to specify custom dependencies. - - Use to specify the components - this component should be resolved with. - - The dependencies. - - - - - Obsolete, use instead. - - The dependencies. - - - - - Obsolete, use instead. - - The dependencies. - - - - - Obsolete, use instead. - - The dependencies. - - - - - Override (some of) the services that this component needs. - Use to create an override. - - Each key represents the service dependency of this component, for example the name of a constructor argument or a property. - The corresponding value is the key of an other component registered to the kernel, and is used to resolve the dependency. - - To specify dependencies which are not services, use - - The service overrides. - - - - - Override (some of) the services that this component needs, using a dictionary. - - Each key represents the service dependency of this component, for example the name of a constructor argument or a property. - The corresponding value is the key of an other component registered to the kernel, and is used to resolve the dependency. - - To specify dependencies which are not services, use - - The service overrides. - - - - - Override (some of) the services that this component needs, using an (anonymous) object as a dictionary. - - Each key represents the service dependency of this component, for example the name of a constructor argument or a property. - The corresponding value is the key of an other component registered to the kernel, and is used to resolve the dependency. - - To specify dependencies which are not services, use - - The service overrides. - - - - - Set configuration parameters with string or values. - - The parameters. - - - - - Creates an attribute descriptor. - - The attribute key. - - - - - Apply more complex configuration to this component registration. - - The config nodes. - - - - - Apply more complex configuration to this component registration. - - The configuration . - - - - - Set the interceptors for this component. - - The interceptors. - - - - - Marks the component as startable. - - - Be sure that you first added the - to the kernel, before registering this component. - - - - Assigns the start method for the startable. - - The start method. - - Be sure that you first added the - to the kernel, before registering this component. - - - - Assigns the stop method for the startable. - - The stop method. - - Be sure that you first added the - to the kernel, before registering this component. - - - - Marks the components with one or more actors. - - The component actors. - - - - - Assigns a conditional predication which must be satisfied. - - The component will only be registered into the kernel - if this predicate is satisfied (or not assigned at all). - - The predicate to satisfy. - - - - - Assigns a conditional predication which must not be satisfied. - - The component will only be registered into the kernel - if this predicate is not satisfied (or not assigned at all). - - The predicate not to satisify. - - - - - Registers this component with the . - - The kernel. - - - - Adds the attribute descriptor. - - The key. - The value. - - - - - Adds the descriptor. - - The descriptor. - - - - - Uses a factory method to instantiate the component. - Requires the to be installed. - - Implementation type - Factory method - - - - - Uses a factory method to instantiate the component. - Requires the to be installed. - - Implementation type - Factory method - - - - - Uses a factory to instantiate the component - - Factory type. This factory has to be registered in the kernel. - Implementation type. - Factory invocation - - - - - The name of the component. Will become the key for the component in the kernel. - - To set the name, use . - - If not set, the of the - will be used as the key to register the component. - - The name. - - - - The type of the service, the same as . - - This is the first type passed to . - - The type of the service. - - - - Gets the forwarded service types on behalf of this component. - - Add more types to forward using . - - The types of the forwarded services. - - - - The concrete type that implements the service. - - To set the implementation, use . - - The implementation of the service. - - - - Set proxy for this component. - - The proxy. - - - - Set the lifestyle of this component. - For example singleton and transient (also known as 'factory'). - - The with lifestyle. - - - - Helper wrapper around Converter - - - - - - Helper factory class - - - - - - Helper factory class - - - - - - A non-generic . - - You can create a new registration with the factory. - - - - - Represents a configuration child. - - - - - Applies the configuration node. - - The configuration. - - - - Represents a configuration attribute. - - - - - Applies the configuration node. - - The configuration. - - - - Create a with name. - - The attribute name. - The new - - - - Represents a named attribute. - - - - - Builds the with name/value. - - The attribute value. - The new - - - - Builds the with name/value. - - The attribute value. - The new - - - - Represents a configuration child. - - - - - Create a with name. - - The child name. - The new - - - - Represents a named child. - - - - - Builds the with name/value. - - The child value. - The new - - - - Builds the with name/value. - - The child value. - The new - - - - Builds the with name/config. - - The child configuration. - The new - - - - Builds the with name/config. - - The child nodes. - The new - - - - Applies the configuration node. - - The configuration. - - - - Represents a simple child node. - - - - - Applies the configuration node. - - The configuration. - - - - Represents a complex child node. - - - - - Applies the configuration node. - - The configuration. - - - - Represents a compound child node. - - - - - Applies the configuration node. - - The configuration. - - - - Represents a configuration parameter. - - - - - Create a with key. - - The parameter key. - The new - - - - Gets the parameter key. - - - - - Gets the parameter value. - - - - - Gets the parameter configuration. - - - - - Represents a parameter key. - - - - - Builds the with key/value. - - The parameter value. - The new - - - - Builds the with key/config. - - The parameter configuration. - The new - - - - The parameter key name. - - - - - Represents a key/value pair. - - - - - Create a with key. - - The property key. - The new - - - - Gets the property key. - - - - - Gets the property value. - - - - - Represents a property key. - - - - - Builds the with key/value. - - The property value. - The new - - - - The property key name. - - - - - Represents a service override. - - - - - Creates a with key. - - The service override key. - The new - - - - Gets the optional value type specifier. - - - - - Represents a service override key. - - - - - Builds the with key/value. - - The service overeride value. - The new - - - - Builds the with key/values. - - The service overeride values. - The new - - - - Builds the with key/values. - - The service overeride values. - The new - The value type. - - - - Builds the with key/values. - - The service overeride values. - The new - - - - Builds the with key/values. - - The service overeride values. - The new - The value type. - - - - Gets the service override key name. - - - - - Summary description for IReleasePolicy. - - - - - Only tracks components that have decommission steps - registered or have pooled lifestyle. - - - - - No tracking of component instances are made. - - - - - Initializes a new instance of the class. - - - - - Handle dependencies of services in the format of typed arrays. - - - This is a complimentary implementation - that is capable of satisfying dependencies of services as typed arrays. - - Note that it will take precedence over service override for arrays defined - on the configuration. - - - - In order to install the resolver: - - var kernel = new DefaultKernel(); - kernel.Resolver.AddSubResolver(new ArrayResolver(kernel)); - - - - To use it, assuming that IService is on the container: - - - - public class Component - { - public Component(IService[] services) - { - } - } - - - - - - Handle dependencies of services in the format of generic IList. - - - This is a complimentary implementation - that is capable of satisfying dependencies of services generic IList. - - Note that it will take precedence over service override for lists defined - on the configuration. - - - - In order to install the resolver: - - var kernel = new DefaultKernel(); - kernel.Resolver.AddSubResolver(new ListResolver(kernel)); - - - - To use it, assuming that IService is on the container: - - - - public class Component - { - public Component(IList<IService> services) - { - } - } - - - - - - Default implementation for . - This implementation is quite simple, but still should be useful - for 99% of situations. - - - - - Implementors should use a strategy to obtain - valid references to properties and/or services - requested in the dependency model. - - - - - This method is called with a delegate for firing the - IKernelEvents.DependencyResolving event. - - The delegate used to fire the event - - - - Registers a sub resolver instance - - The subresolver instance - - - - Unregisters a sub resolver instance previously registered - - The subresolver instance - - - - Initializes a new instance of the class. - - The kernel. - - - - Initializes this instance with the specified dependency delegate. - - The dependency delegate. - - - - Registers a sub resolver instance - - The subresolver instance - - - - Unregisters a sub resolver instance previously registered - - The subresolver instance - - - - Returns true if the resolver is able to satisfy the specified dependency. - - Creation context, which is a resolver itself - Parent resolver - Model of the component that is requesting the dependency - The dependency model - true if the dependency can be satisfied - - - - Try to resolve the dependency by checking the parameters in - the model or checking the Kernel for the requested service. - - - The dependency resolver has the following precedence order: - - - The dependency is checked within the - - - The dependency is checked within the instance for the component - - - The dependency is checked within the registered s - - - Finally the resolver tries the normal flow - which is using the configuration - or other component to satisfy the dependency - - - - Creation context, which is a resolver itself - Parent resolver - Model of the component that is requesting the dependency - The dependency model - The dependency resolved value or null - - - - Extracts the component name from the a ref strings which is - ${something} - - - - - - - - This method rebuild the context for the parameter type. - Naive implementation. - - - - - Summary description for DependencyResolverException. - - - - - Initializes a new instance of the class. - - The message. - - - - Initializes a new instance of the class. - - The object that holds the serialized object data. - The contextual information about the source or destination. - - - - This implementation of - does not try to obtain an external configuration by any means. - Its only purpose is to serve as a base class for subclasses - that might obtain the configuration node from anywhere. - - - - - A subsystem is used by the MicroKernel to deal - with a specific concern. - - - - - Initializes the subsystem - - - - - - Should perform the termination - of the subsystem instance. - - - - - The contract used by the kernel to obtain - external configuration for the components and - facilities. - - - - - Associates a configuration node with a facility key - - item key - Configuration node - - - - Associates a configuration node with a component key - - item key - Configuration node - - - - Associates a configuration node with a bootstrap component key - - item key - Configuration node - - - - Adds the child container configuration. - - The container's name. - The config. - - - - Returns the configuration node associated with - the specified child container key. Should return null - if no association exists. - - item key - - - - - Returns the configuration node associated with - the specified facility key. Should return null - if no association exists. - - item key - - - - - Returns the configuration node associated with - the specified component key. Should return null - if no association exists. - - item key - - - - - Returns the configuration node associated with - the specified component key. Should return null - if no association exists. - - item key - - - - - Returns all configuration nodes for facilities - - - - - - Returns all configuration nodes for components - - - - - - Returns all configuration nodes for bootstrap components - - - - - - Gets the child containers configuration nodes. - - - - - - - - - - - - - - Initializes a new instance of the class. - - - - - Associates a configuration node with a facility key - - item key - Configuration node - - - - Associates a configuration node with a component key - - item key - Configuration node - - - - Associates a configuration node with a bootstrap component key - - - - - Adds the child container configuration. - - The key. - The config. - - - - Returns the configuration node associated with - the specified facility key. Should return null - if no association exists. - - item key - - - - - Returns the configuration node associated with - the specified child container key. Should return null - if no association exists. - - item key - - - - - Returns the configuration node associated with - the specified component key. Should return null - if no association exists. - - item key - - - - - Returns the configuration node associated with - the specified component key. Should return null - if no association exists. - - - - - - - Returns all configuration nodes for facilities - - - - - - Returns all configuration nodes for bootstrap components - - - - - - Returns all configuration nodes for child containers - - - - - - Returns all configuration nodes for components - - - - - - Base implementation of - - - - - Implements a conversion logic to a type of a - set of types. - - - - - Returns true if this instance of ITypeConverter - is able to handle the specified type. - - - - - - - Returns true if this instance of ITypeConverter - is able to handle the specified type with the specified - configuration - - - - - - - - Should perform the conversion from the - string representation specified to the type - specified. - - - - - - - - Should perform the conversion from the - configuration node specified to the type - specified. - - - - - - - - Returns true if this instance of ITypeConverter - is able to handle the specified type with the specified - configuration - - - - - - The default behavior is to just pass it to the normal CanHadnleType - peeking into the configuration is used for some advanced functionality - - - - - Initializes a new instance of the class. - - - - - This interface is needed because we want to isolate ourself from - the generic parameters, so we can work type safe inside the implementations, - and still call from non generic types outside. - - - - - Initializes a new instance of the class. - - - - - Looks for a on the type to be converted. - If found, the TypeConverter defined by the attribute is used to perform the conversion. - - - - - Marker interface that signals that a converter - depends on IKernel to be able to perform - the conversion. - - - - - Attempts to utilize an existing for conversion - - - - - Creates the target type instance. - - The type. - The configuration. - - - - - Chooses the first non default constructor. Throws an exception if more than - one non default constructor is found - - - The chosen constructor, or null if none was found - - - - Converts the constructor parameters. - - The constructor. - The configuration. - - - - - Converts the property values. - - The instance. - The type. - The configuration. - - - - Finds the child (case insensitive). - - The config. - The name. - - - - - Gets the conversion manager. - - The conversion manager. - - - - Converts a string representation to an enum value - - - - - Implements all standard conversions. - - - - - Convert a type name to a Type instance. - - - - - Summary description for ConverterException. - - - - - Initializes a new instance of the class. - - The message. - - - - Initializes a new instance of the class. - - The message. - The inner exception. - - - - Initializes a new instance of the class. - - The object that holds the serialized object data. - The contextual information about the source or destination. - - - - Declares a type as being convertible by a and optionally defines the converter to be used - - - - - Defines the to be used to convert the type - - - - - Defines the to be used to convert the type - - - - - - Composition of all available conversion managers - - - - - Establish a composition interface and a subsystem. - Implementors should delegate the conversion to - a instance of a type converter. - - - - - Register a type converter instance. - - - - - - Method finds the next biggest node - It assumes Add puts lesser nodes on the right - - - - Node's left - - - Node's right - - - Node's parent - - - DA Linked List - - - - Creates a ComponentName using a name pattern like - "service:key=value,key2=value2" - - Complete name - - - - Creates a ComponentName with specified service and - properties. - - Service name - Property list. - - - - Serialization constructor. - - - - - - - Parses the full name extracting the service and properties. - - Full name. - - - - Sets up the service. Can be empty but can't be null. - - - - - - Parses and validate a properties list string like - "key=value,key2=value2" and so on. - - Property list. - - - - Validates a properties Hashtable. - - Property list. - - - - Default implementation. - Keeps services map as a simple hash table. - Keeps key map as a list dictionary to maintain order. - Does not support a query string. - - - - - Contract for SubSystem that wishes to keep and coordinate - component registration. - - - - - Implementors should register the key and service pointing - to the specified handler - - - - - - - Unregister the handler by the given key - - - - - - Unregister the handler by the given service - - - - - - Returns true if there is a component registered - for the specified key - - - - - - - Returns true if there is a component registered - for the specified service - - - - - - - Returns the associated with - the specified key. - - - - - - - Returns an array of that - satisfies the specified query. - - - - - - - Returns the associated with - the specified service. - - - - - Returns the associated with - the specified key with the service type. - - It is expected that this will be used mainly to resolve a generic service - by its key. - - - - - - Returns an array of associated with - the specified service. - - - - - - - Returns all registered. - - - - - - Return s where components are compatible - with the specified service. - - - - - - - List of handler by key - - - - - List of handler by service - - - - - Register a new component resolver that can take part in the decision - making about which handler to resolve - - - - - Returns the number of components registered. - - - - - Associates a with - the specified service - - - - - Associates a with - the specified key - - - - - Map(String, IHandler) to map component keys - to - Items in this dictionary are sorted in insertion order. - - - - - Map(Type, IHandler) to map a service - to . - If there is more than a single service of the type, only the first - registered services is stored in this dictionary. - It serve as a fast lookup for the common case of having a single handler for - a type. - - - - - Initializes a new instance of the class. - - - - - Implementors of this interface allow to extend the way the container perform - component resolution based on some application specific business logic. - - - This is the sibling interface to . - This is dealing strictly with root components, while the is dealing with - dependent components. - - - - - Whatever the selector has an opinion about resolving a component with the - specified service and key. - - The service key - can be null - The service interface that we want to resolve - - - - Select the appropriate handler from the list of defined handlers. - The returned handler should be a member from the array. - - The service key - can be null - The service interface that we want to resolve - The defined handlers - The selected handler, or null - - - - When requesting a component by service, KeySearchNamingSubSystem first - determines if more than one component has been registered for that service. - If not, Default resolution occurs. If so, all of the registered keys for - that service are processed through the provided Predicate to determine which - key to use for service resolution. If no Predicate matches, the default - resolution occurs. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The key predicate. - - - - Registers the given handler with the give key. - - The key. - The handler. - - - - Unregisters the handler associated with the given key - - The key. - - - - Unregisters the handler associated with the given service - - The service. - - - - Executes the Predicate against all keys for the registered service to - determine which component to return. - - The service. - - - - - Alternative implementation. - Extends the default implementation replacing the - key support with a more complete ComponentName. Supports - queries. - - - The user must register components using the following construction - - service:properties - - Where properties is a list of key value pairs (comma separated). Example: - - protocol:secure=true,version=1.2 - - The user can then query for components using the same construction: - - protocol:secure=true - - Or to return all: - - protocol:* - - - - - - Pendent - - - - - An implementation of a should - be able to return instances of - for a given resource identifier. - - - - - Holds the keys used by Kernel to register/request - a subsystem. - - - - - Key used for the configuration store subsystem - - - - - Key used for the conversion manager - - - - - Key used for the naming subsystem - - - - - Key used for the resource subsystem - - - - - Compares if the reference of two objects are equals. - - - - - Summary description for ReferenceExpressionUtil. - - - - - Default implementation of . - This implementation is complete and also support a kernel - hierarchy (sub containers). - - - Default implementation of . - This implementation is complete and also support a kernel - hierarchy (sub containers). - - - - - The IKernel interface exposes all the functionality - the MicroKernel implements. - - - It allows you to register components and - request them by the key or the service they implemented. - It also allow you to register facilities and subsystem, thus - augmenting the functionality exposed by the kernel alone to fits - your needs. - - - - - - - Summary description for IKernelEvents. - - - - - Event fired when a new component is registered - on the kernel. - - - - - Event fired when a component is removed from the kernel. - - - - - Event fired after the ComponentModel is created. - Allows customizations that may affect the handler. - - - - - Event fired when the kernel was added as child of - another kernel. - - - - - Event fired when the kernel was removed from being a child - of another kernel. - - - - - Event fired before the component is created. - - - - - Event fired when a component instance destroyed. - - - - - Event fired when a new handler is registered - (it might be in a valid or waiting dependency state) - - - - - Event fired when a dependency is being resolved, - it allows the dependency to be changed, - but the client ComponentModel must not be changed. - - - - - Registers the components provided by the s - with the . - - Create a new registration using .For() or . - - - - kernel.Register(Component.For<IService>().ImplementedBy<DefaultService>()); - - - The component registrations. - The kernel. - - - - Returns true if the specified component was - found and could be removed (i.e. no other component depends on it) - - The component's key - - - - - Returns true if the specified key was registered - - - - - - - Returns true if the specified service was registered - - - - - - - Associates objects with a component handler, - allowing it to use the specified dictionary - when resolving dependencies - - - - - - - Associates objects with a component handler, - allowing it to use the specified dictionary - when resolving dependencies - - - - - - - Associates objects with a component handler, - allowing it to use the specified dictionary - when resolving dependencies - - - - - - - Associates objects with a component handler, - allowing it to use the specified dictionary - when resolving dependencies - - - - - - - Releases a component instance. This allows - the kernel to execute the proper decomission - lifecycles on the component instance. - - - - - - Constructs an implementation of - for the given - - - - - - - Returns the - for the specified component key. - - - - - - - Returns the - for the specified service. - - - - - - - Return handlers for components that - implements the specified service. - - - - - - - Return handlers for components that - implements the specified service. - The check is made using IsAssignableFrom - - - - - - - Adds a to the kernel. - - - - - - - - Creates and adds an facility to the kernel. - - The facility type. - - - - - Creates and adds an facility to the kernel. - - The facility type. - - The callback for creation. - - - - Creates and adds an facility to the kernel. - - The facility type. - - The callback for creation. - - - - Creates and adds an facility to the kernel. - - The facility type. - - - - - Creates and adds an facility to the kernel. - - The facility type. - The callback for creation. - - - - - Creates and adds an facility to the kernel. - - The facility type. - The callback for creation. - - - - - Returns the facilities registered on the kernel. - - - - - - Adds (or replaces) an - - - - - - - Returns an implementation of - for the specified key. - - - - - - - - Support for kernel hierarchy - - - - - - Remove child kernel - - - - - - Raise the hanlder registered event, required so - dependant handlers will be notified about their dependant moving - to valid state. - - - - - - Registers the to be forwarded - to the component registered with . - - The service type that gets forwarded. - The name of the component to forward to. - - - - Register a new component resolver that can take part in the decision - making about which handler to resolve - - - - - Adds a concrete class as a component - - - - - - - Adds a concrete class - as a component with the specified . - - The key with which to index the component. - The of the component. - The specified for the component. - - If you have indicated a lifestyle for the specified using - attributes, this method will not overwrite that lifestyle. To do that, use the - method. - - - Thrown if , or - are . - - - Thrown if is . - - - - - Adds a concrete class - as a component with the specified . - - The key with which to index the component. - The of the component. - The specified for the component. - - If , then ignores all other configurations - for lifestyle and uses the value in the parameter. - - - If you have indicated a lifestyle for the specified using - attributes, this method will not overwrite that lifestyle. To do that, use the - method. - - - Thrown if or - are . - - - Thrown if is . - - - - Adds a concrete class and an interface - as a component - - The key with which to index the component. - The service that this component implements. - The of the component. - - - - Adds a concrete class and an interface - as a component with the specified . - - The key with which to index the component. - The service that this component implements. - The of the component. - The specified for the component. - - If you have indicated a lifestyle for the specified using - attributes, this method will not overwrite that lifestyle. To do that, use the - method. - - - Thrown if , , or - are . - - - Thrown if is . - - - - - Adds a concrete class and an interface - as a component with the specified . - - The key with which to index the component. - The service that this component implements. - The of the component. - The specified for the component. - - If , then ignores all other configurations - for lifestyle and uses the value in the parameter. - - - If you have indicated a lifestyle for the specified using - attributes, this method will not overwrite that lifestyle. To do that, use the - method. - - - Thrown if , , or - are . - - - Thrown if is . - - - - - Adds a concrete class as a component - - - - - Adds a concrete class - as a component with the specified . - - The specified for the component. - - If you have indicated a lifestyle for the specified T using - attributes, this method will not overwrite that lifestyle. To do that, use the - method. - - - Thrown if is . - - - - - Adds a concrete class - as a component with the specified . - - The specified for the component. - - If , then ignores all other configurations - for lifestyle and uses the value in the parameter. - - - If you have indicated a lifestyle for the specified T using - attributes, this method will not overwrite that lifestyle. To do that, use the - method. - - - Thrown if is . - - - - Adds a concrete class and an interface - as a component - - The service that this component implements. - - - - Adds a concrete class and an interface - as a component with the specified . - - The service that this component implements. - The specified for the component. - - If you have indicated a lifestyle for the specified T using - attributes, this method will not overwrite that lifestyle. To do that, use the - method. - - - are . - - - Thrown if is . - - - - - Adds a concrete class and an interface - as a component with the specified . - - The service that this component implements. - The specified for the component. - - If , then ignores all other configurations - for lifestyle and uses the value in the parameter. - - - attributes, this method will not overwrite that lifestyle. To do that, use the - method. - - - are . - - - Thrown if is . - - - - - Used mostly by facilities. Adds an instance - to be used as a component. - - - - - - Used mostly by facilities. Adds an instance - to be used as a component. - - - - - - - Adds a concrete class as a component and specify the extended properties. - Used by facilities, mostly. - - - - - - - - Adds a concrete class and an interface - as a component and specify the extended properties. - Used by facilities, mostly. - - - - - - - - - Adds a custom made . - Used by facilities. - - - - - - Used mostly by facilities. Adds an instance - to be used as a component. - - - - - - - Used mostly by facilities. Adds an instance - to be used as a component. - - - - - - - - Used mostly by facilities. Adds an instance - to be used as a component. - - - - - - - - - Returns the component instance by the service type - - - - - Returns all the valid component instances by - the service type - - The service type - - - - Returns all the valid component instances by - the service type - - The service type - Arguments to resolve the services - - - - Returns all the valid component instances by - the service type - - The service type - Arguments to resolve the services - - - - Returns the component instance by the service type - using dynamic arguments - - - - - - - - Returns the component instance by the component key - using dynamic arguments - - - - - - - - Returns the component instance by the service type - using dynamic arguments - - Service to resolve - Arguments to resolve the services - - - - - Returns the component instance by the component key - using dynamic arguments - - Key to resolve - Arguments to resolve the services - - - - - Returns a component instance by the key - - - - - - - - Returns the component instance by the service type - using dynamic arguments - - - - - - - Returns the component instance by the service type - using dynamic arguments - - Arguments to resolve the services - - - - - Returns the component instance by the component key - - - - - - Returns a component instance by the key - - Component's key - Service type - The Component instance - - - - Returns a component instance by the key - - Service type - Component's key - - The Component instance - - - - Returns component instances that implement TService - - - - - - - Returns component instances that implement TService - - - - - - - Returns component instances that implement TService - - - - - - - Returns a component instance by the key - - - - - - - - - Returns the implementation of - - - - - Returns the implementation of - - - - - Gets or sets the implementation of - - - - - Gets or sets the implementation for - - - - - Returns the implementation for - - - - - Gets or sets the implementation of - allowing different strategies for proxy creation. - - - - - Returns the parent kernel - - - - - Graph of components and iteractions. - - - - - Returns the component instance by the key - - - - - Returns the component instance by the service type - - - - - The parent kernel, if exists. - - - - - The implementation of - - - - - The implementation of - - - - - The dependency resolver. - - - - - Implements a policy to control component's - disposal that the usef forgot. - - - - - Holds the implementation of - - - - - List of registered. - - - - - Map of subsystems registered. - - - - - List of sub containers. - - - - - Constructs a DefaultKernel with no component - proxy support. - - - - - Constructs a DefaultKernel with the specified - implementation of and - - - - - - - Constructs a DefaultKernel with the specified - implementation of - - - - - Registers the components described by the s - with the . - The component registrations. - The kernel. - - - - - Returns true if the specified component was - found and could be removed (i.e. no other component depends on it) - - The component's key - - - - - Associates objects with a component handler, - allowing it to use the specified dictionary - when resolving dependencies - - - - - - - Associates objects with a component handler, - allowing it to use the specified dictionary - when resolving dependencies - - - - - - - Associates objects with a component handler, - allowing it to use the specified dictionary - when resolving dependencies - - - - - - - Associates objects with a component handler, - allowing it to use the specified dictionary - when resolving dependencies - - - - - - - Releases a component instance. This allows - the kernel to execute the proper decomission - lifecycles on the component instance. - - - - - - Return handlers for components that - implements the specified service. - - - - - - - Return handlers for components that - implements the specified service. - The check is made using IsAssignableFrom - - - - - - - Returns the facilities registered on the kernel. - - - - - - Gets the service object of the specified type. - - - - A service object of type serviceType. - - - An object that specifies the type of service object to get. - - - - Gets the service object of the specified type. - - - - A service object of type serviceType. - - - - - Starts the process of component disposal. - - - - - Adds a concrete class - as a component with the specified . - - The key with which to index the component. - The of the component. - The specified for the component. - - If you have indicated a lifestyle for the specified using - attributes, this method will not overwrite that lifestyle. To do that, use the - method. - - - Thrown if or - are . - - - Thrown if is . - - - - - Adds a concrete class - as a component with the specified . - - The key with which to index the component. - The of the component. - The specified for the component. - - If , then ignores all other configurations - for lifestyle and uses the value in the parameter. - - - If you have indicated a lifestyle for the specified using - attributes, this method will not overwrite that lifestyle. To do that, use the - method. - - - Thrown if or - are . - - - Thrown if is . - - - - Adds a concrete class and an interface - as a component with the specified . - - The key with which to index the component. - The service that this component implements. - The of the component. - The specified for the component. - - If you have indicated a lifestyle for the specified using - attributes, this method will not overwrite that lifestyle. To do that, use the - method. - - - Thrown if , , or - are . - - - Thrown if is . - - - - - Adds a concrete class and an interface - as a component with the specified . - - The key with which to index the component. - The service that this component implements. - The of the component. - The specified for the component. - - If , then ignores all other configurations - for lifestyle and uses the value in the parameter. - - - If you have indicated a lifestyle for the specified using - attributes, this method will not overwrite that lifestyle. To do that, use the - method. - - - Thrown if , , or - are . - - - Thrown if is . - - - - - - - - - - - - - - - - - - - - - - - - - - - - Used mostly by facilities. Adds an instance - to be used as a component. - - - - - - - Used mostly by facilities. Adds an instance - to be used as a component. - - - - - - - - Adds a concrete class as a component - - - - - Adds a concrete class - as a component with the specified . - - The specified for the component. - - If you have indicated a lifestyle for the specified T using - attributes, this method will not overwrite that lifestyle. To do that, use the - method. - - - Thrown if is . - - - - - Adds a concrete class - as a component with the specified . - - The specified for the component. - If , then ignores all other configurations - for lifestyle and uses the value in the parameter. - - If you have indicated a lifestyle for the specified T using - attributes, this method will not overwrite that lifestyle. To do that, use the - method. - - - Thrown if - - is - - . - - - - Adds a concrete class and an interface - as a component - - The service that this component implements. - - - - Adds a concrete class and an interface - as a component with the specified . - - The service that this component implements. - The specified for the component. - - If you have indicated a lifestyle for the specified T using - attributes, this method will not overwrite that lifestyle. To do that, use the - method. - - - are . - - - Thrown if is . - - - - - Adds a concrete class and an interface - as a component with the specified . - - The service that this component implements. - The specified for the component. - If , then ignores all other configurations - for lifestyle and uses the value in the parameter. - - attributes, this method will not overwrite that lifestyle. To do that, use the - method. - - - are . - - - Thrown if is . - - - - - Used mostly by facilities. Adds an instance - to be used as a component. - - - - - - Used mostly by facilities. Adds an instance - to be used as a component. - - - - - - - Returns the component instance by the service type - using dynamic arguments - - - - - - - Returns the component instance by the service type - using dynamic arguments - - - - - - - Returns the component instance by the component key - - - - - - Returns a component instance by the key - - Component's key - Service type - The Component instance - - - - Returns a component instance by the key - - Service type - Component's key - - The Component instance - - - - Returns the component instance by the service type - - - - - Returns all the valid component instances by - the service type - - The service type - - - - Returns all the valid component instances by - the service type - - The service type - Arguments to resolve the services - - - - Returns all the valid component instances by - the service type - - The service type - Arguments to resolve the services - - - - Returns component instances that implement TService - - - - - - - - Returns component instances that implement TService - - - - - - - - Returns the component instance by the service type - using dynamic arguments - - - - - - - - Returns the component instance by the service type - using dynamic arguments - - - - - - - - Returns the component instance by the component key - using dynamic arguments - - - - - - - - Returns the component instance by the component key - using dynamic arguments - - - - - - - - Returns a component instance by the key - - - - - - - - Returns component instances that implement TService - - - - - - - Returns a component instance by the key - - - - - - - - - Resolves the specified key. - - The key. - The service. - Type of the arguments as anonymous. - - - - - Graph of components and iteractions. - - - - - Pending - - - - - Pending - - - - - - Pending - - - - - - Pending - - - - - - Pending - - - - - - Pending - - - - - - Pending - - - - - Pending - - - - - - Represents a delegate which holds basic information about a component. - - Key which identifies the component - handler that holds this component and is capable of - creating an instance of it. - - - - - Represents a delegate which holds basic information about a component - and its instance. - - Component meta information - Component instance - - - - Represents a delegate which holds the information about the - component - - - - - Represents a delegate which holds a handler - - handler that holds a component and is capable of - creating an instance of it. - - - - - - Represents a delegate which holds dependency - resolving information. - - -
            -
            diff --git a/bin/Castle.Services.Logging.Log4netIntegration.dll b/bin/Castle.Services.Logging.Log4netIntegration.dll deleted file mode 100644 index 5680eb835..000000000 Binary files a/bin/Castle.Services.Logging.Log4netIntegration.dll and /dev/null differ diff --git a/bin/Castle.Services.Logging.Log4netIntegration.xml b/bin/Castle.Services.Logging.Log4netIntegration.xml deleted file mode 100644 index 97272be8e..000000000 --- a/bin/Castle.Services.Logging.Log4netIntegration.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - - Castle.Services.Logging.Log4netIntegration - - - - - Creates a new extended logger. - - - - - Creates a new extended logger. - - - - - Exposes the Global Context of the extended logger. - - - - - Exposes the Thread Context of the extended logger. - - - - - Exposes the Thread Stack of the extended logger. - - - - - 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 - - - - - - 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 - - - - - diff --git a/bin/Castle.Windsor.dll b/bin/Castle.Windsor.dll deleted file mode 100644 index 513e575e8..000000000 Binary files a/bin/Castle.Windsor.dll and /dev/null differ diff --git a/bin/Castle.Windsor.xml b/bin/Castle.Windsor.xml deleted file mode 100644 index 4204e95f2..000000000 --- a/bin/Castle.Windsor.xml +++ /dev/null @@ -1,1571 +0,0 @@ - - - - Castle.Windsor - - - - - Implementation of that assumes ownership of the - wrapped . If this adapter is disposed, the underlying - is diposed as well. - - - - - Implementation of that does not assume ownership of the - wrapped . - - - - - Integrates the to the System.ComponentModel - and System.ComponentMode.Design infrastructure. - - - - - - - - This interface should be implemented by classes - that are available in a bigger context, exposing - the container to different areas in the same application. - - For example, in Web application, the (global) HttpApplication - subclasses should implement this interface to expose - the configured container - - - - - - Constructs an initial ContainerWrapper. - - The to adapt. - - - - Constructs an initial ContainerWrapper. - - The to adapt. - The parent . - - - - Adds the specified to the at the end of the list. - - The to add. - - - - Adds the specified to the at the end of the list, - and assigns a name to the component. - - The to add. - The unique, case-insensitive name to assign to the component, or null. - - - - Removes a component from the . - - The to remove - - - - Gets the service object of the specified type. - - The type of service. - An object inplementing service, or null. - - - - Adds the specified service to the service container. - - The type of service to add. - The instance of the service to add. - - - - Adds the specified service to the service container. - - The type of service to add. - A callback object that is used to create the service. - - - - Adds the specified service to the service container, and optionally - promotes the service to any parent service containers. - - The type of service to add. - The instance of the service to add. - true to promote this request to any parent service containers. - - - - Adds the specified service to the service container, and optionally - promotes the service to parent service containers. - - The type of service to add. - A callback object that is used to create the service. - true to promote this request to any parent service containers. - - - - Removes the specified service type from the service container. - - The type of service to remove. - - - - Removes the specified service type from the service container, - and optionally promotes the service to parent service containers. - - The type of service to remove. - true to promote this request to any parent service containers. - - - - Determins if the service type represents an intrinsic service. - - The type of service to remove. - true if the service type is an intrinsic service. - - - - Determins if the specified service type exists in the service container. - - The type of service to remove. - true if the service type exists. - - - - Releases the resources used by the component. - - - - - Releases the resources used by the component. - - true if disposing. - - - - Gets or sets the associated with the . - - - - - Event that notifies the disposal of the . - - - - - Gets all the components in the . - - - - - Gets the adapted - - - - - Constructs a default ContainerAdapter. - - - - - Constructs a chained ContainerAdapter. - - The parent . - - - - Constructs an initial ContainerAdapter. - - The to adapt. - - - - Constructs an initial ContainerAdapter. - - The to adapt. - The parent . - - - - Custom activator to create the instance on demand. - - - - - Implementation of . - Do not support configuration inheritance. - - - - - Accepts the specified node. - Check if node has the same name as the processor and the node.NodeType - is in the AcceptNodeTypes List - - The node. - - - - - Convert and return child parameter into an XmlElement - An exception will be throw in case the child node cannot be converted - - Parent node - Node to be converted - child node as XmlElement - - - - - - - - - - - - attributeValue - - propertyValue - - - - - - - Processes the specified node list. - - The node list. - The engine. - - - - Processes element attributes. - if the attribute is include will append to the element - all contents from the file. - if the attribute has a property reference the reference will be - expanded - - The element. - - - - - Properties names can contain a-zA-Z0-9_. - i.e. #!{ my_node_name } || #{ my.node.name } - spaces are trimmed - - - - - Processes the string. - - The node. - The value. - The context. - - - - Accepts the specified node. - Check if node has the same name as the processor and the node.NodeType - is in the AcceptNodeTypes List - NOTE: since the BatchRegistrationFacility already uses an include - element we will distringish between both by looking for the presence of an uri attribute - we should revisit this later by using xml-namespaces - - The node. - - - - - - - - - - - - - attributeValue - - propertyValue - - - - - - - Initializes a new instance of the class. - - Name of the environment. - - - - Initializes a new instance of the class. - - Name of the environment. - The resource sub system. - - - - Processes the element. - - The element. - - - - - Processes the element. - - The element. - - - - - Make a shallow copy of the nodeList. - - The nodeList to be copied. - - - - - Pendent - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - Name of the environment. - The resource sub system. - - - - Initializes a new instance of the class. - - - - - Provides common methods for those who wants - to implement - - - - - Interpreter of a specific language to describe - configuration nodes in a hierachical manner. - - - - - Should obtain the contents from the resource, - interpret it and populate the - accordingly. - - - - - - - Gets or sets the name of the environment. - - The name of the environment. - - - - Exposes the reference to - which the interpreter is likely to hold - - - - - Should obtain the contents from the resource, - interpret it and populate the - accordingly. - - - - - - - Exposes the reference to - which the interpreter is likely to hold - - - - - - Gets or sets the name of the environment. - - The name of the environment. - - - - Reads the configuration from a XmlFile. Sample structure: - - <configuration> - <facilities> - <facility id="myfacility"> - - </facility> - </facilities> - - <components> - <component id="component1"> - - </component> - </components> - </configuration> - - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The filename. - - - - Initializes a new instance of the class. - - The source. - - - - Gets or sets the kernel. - - The kernel. - - - - Installs all the components from the App.Config file. - - - - - - Installs all the component from the xml configuration file. - - The xml configuration file. - - - - - Installs all the component from the xml configuration. - - The xml configuration resource. - - - - - Delegate to provide environment name. - - The environment name. - - - - The contract to install components in the container. - - - - - Performs the installation in the . - - The container. - The configuration store. - - - - Initializes a new instance of the ConfigurationInstaller class. - - - - - Sets the configuration environment name. - - The environment name. - - - - - Set the configuration environment strategy. - - The environment strategy. - - - - - Default implementation. - - - - - Installs the components and facilities based on the - information on the configuration store. - - - - - Perform installation. - - Target container - Configuration store - - - - Perform installation. - - Target container - Configuration store - - - - Obtains the interceptors associated with the component. - - The kernel instance - The component model - The creation context - interceptors array - - - - This implementation of relies - on DynamicProxy to expose proxy capabilies. - - - Note that only virtual methods can be intercepted in a - concrete class. However, if the component - was registered with a service interface, we proxy - the interface and the methods don't need to be virtual, - - - - - Constructs a DefaultProxyFactory - - - - - Creates the proxy for the supplied component. - - The kernel. - The target. - The model. - The constructor arguments. - The creation context - The component proxy. - - - - Determines if the component requiries a target instance for proxying. - - The kernel. - The model. - true if an instance is required. - - - - Gets the environment information (name). Implementors should - use to define their environments and how those affect the configuration. - - - - - Gets the name of the environment. - - - - - - The IWindsorContainer interface exposes all the - functionality the Windsor implements. - - - - - Registers a facility within the container. - - The key by which the gets indexed. - The to add to the container. - - - - Creates and adds an facility to the container. - - The facility type. - - - - - - Creates and adds an facility to the container. - - The facility type. - - The callback for creation. - - - - - Creates and adds an facility to the container. - - The facility type. - - The callback for creation. - - - - - Creates and adds an facility to the container. - - The facility type. - - - - - Creates and adds an facility to the container. - - The facility type. - The callback for creation. - - - - - Creates and adds an facility to the container. - - The facility type. - The callback for creation. - - - - - Adds a component to be managed by the container - - The key by which the component gets indexed. - The to manage. - - - - Adds a component to be managed by the container - - The key by which the component gets indexed. - The service that the component implements. - The to manage. - - - - Adds a component to be managed by the container - - The key by which the component gets indexed. - The to manage. - The with which to manage the component. - - - - Adds a component to be managed by the container - - The key by which the component gets indexed. - The service that the component implements. - The to manage. - The with which to manage the component. - - - - Adds a concrete class as a component and specify the extended properties. - Used by facilities, mostly. - - - - - - - - Adds a concrete class and an interface - as a component and specify the extended properties. - Used by facilities, mostly. - - - - - - - - - Adds a component to be managed by the container. - The key to obtain the component will be the FullName of the type. - - The to manage. - - - - Adds a component to be managed by the container - - The to manage. - The key by which the component gets indexed. - - - - Adds a component to be managed by the container. - The key to obtain the component will be the FullName of the type. - - The to manage. - The with which to manage the component. - - - - Adds a component to be managed by the container - - The to manage. - The key by which the component gets indexed. - The with which to manage the component. - - - - Adds a component to be managed by the container - The key to obtain the component will be the FullName of the type. - - The service that the component implements. - The to manage. - - - - Adds a component to be managed by the container - - The service that the component implements. - The to manage. - The key by which the component gets indexed. - - - - Adds a component to be managed by the container - The key to obtain the component will be the FullName of the type. - - The service that the component implements. - The to manage. - The with which to manage the component. - - - - Adds a component to be managed by the container - - The service that the component implements. - The to manage. - The key by which the component gets indexed. - The with which to manage the component. - - - - Adds a concrete class as a component and specify the extended properties. - Used by facilities, mostly. - The key to obtain the component will be the FullName of the type. - - - - - - - Adds a concrete class as a component and specify the extended properties. - Used by facilities, mostly. - - - - - - - - Adds a concrete class and an interface - as a component and specify the extended properties. - Used by facilities, mostly. - The key to obtain the component will be the FullName of the type. - - - - - - - - Adds a concrete class and an interface - as a component and specify the extended properties. - Used by facilities, mostly. - - - - - - - - - Registers the components provided by the s - with the . - - Create a new registration using .For() or . - - - - container.Register(Component.For<IService>().ImplementedBy<DefaultService>()); - - - The component registrations. - The container. - - - - Installs the components provided by the s - with the . - The component installers. - The container. - - - - - Returns a component instance by the key - - - - - - - Returns a component instance by the key - - - - - - - - Returns a component instance by the key - - - - - - - - Returns a component instance by the key - - - - - - - - Returns a component instance by the service - - - - - - - Returns a component instance by the service - - - - - - - - Returns a component instance by the service - - - - - - - - Releases a component instance - - - - - - Registers a subcontainer. The components exposed - by this container will be accessible from subcontainers. - - - - - - Remove a child container - - - - - - Gets a child container instance by name. - - The container's name. - The child container instance or null - - - - Returns a component instance by the service - - Service type - The component instance - - - - Returns a component instance by the service - - Service type - - The component instance - - - - Returns a component instance by the service - - Service type - - The component instance - - - - Returns a component instance by the key - - Component's key - Service type - The Component instance - - - - Returns a component instance by the key - - Service type - Component's key - - The Component instance - - - - Returns a component instance by the key - - Service type - Component's key - - The Component instance - - - - Returns a component instance by the key - - - - - - - - - Returns a component instance by the key - - - - - - - - - Resolve all valid components that match this type. - - The service type - - - - Resolve all valid components that mathc this service - the service to match - - - - - Resolve all valid components that mathc this service - the service to match - Arguments to resolve the service - - - - - Resolve all valid components that mathc this service - the service to match - Arguments to resolve the service - - - - - Resolve all valid components that match this type. - The service type - Arguments to resolve the service - - - - - Resolve all valid components that match this type. - The service type - Arguments to resolve the service - - - - - Gets the container's name - - - Only useful when child containers are being used - - The container's name. - - - - Shortcut to - - - - - Shortcut to - - - - - Returns the inner instance of the MicroKernel - - - - - Gets or sets the parent container if this instance - is a sub container. - - - - - Implementation of - which delegates to implementation. - - - - - Constructs a container without any external - configuration reference - - - - - Constructs a container using the specified - implementation. - - The instance of an implementation. - - - - Constructs a container using the specified - implementation. - - The instance of an implementation. - - - - Initializes a new instance of the class. - - The interpreter. - The environment info. - - - - Initializes a new instance of the class using a - xml file to configure it. - - Equivalent to the use of new WindsorContainer(new XmlInterpreter(xmlFile)) - - - The XML file. - - - - Constructs a container using the specified - implementation. Rarely used. - - - This constructs sets the Kernel.ProxyFactory property to - Proxy.DefaultProxyFactory - - Kernel instance - Installer instance - - - - Constructs a container using the specified - implementation. Rarely used. - - - This constructs sets the Kernel.ProxyFactory property to - Proxy.DefaultProxyFactory - - Container's name - Kernel instance - Installer instance - - - - Constructs with a given . - - A instance of an . - - - - Constructs a container assigning a parent container - before starting the dependency resolution. - - The instance of an - The instance of an implementation - - - - Initializes a new instance of the class. - - The container's name. - The parent. - The interpreter. - - - - Registers a facility within the kernel. - - - - - - - Creates and adds an facility to the container. - - The facility type. - - - - - - Creates and adds an facility to the container. - - The facility type. - - The callback for creation. - - - - - Creates and adds an facility to the container. - - The facility type. - - The callback for creation. - - - - - Creates and adds an facility to the container. - - The facility type. - - - - - Creates and adds an facility to the container. - - The facility type. - The callback for creation. - - - - - Creates and adds an facility to the container. - - The facility type. - The callback for creation. - - - - - Adds a component to be managed by the container - - - - - - - Adds a component to be managed by the container - - - - - - - - Adds a component to be managed by the container - - The key by which the component gets indexed. - The to manage. - The with which to manage the component. - - - - Adds a component to be managed by the container - - The key by which the component gets indexed. - The service that the component implements. - The to manage. - The with which to manage the component. - - - - Adds a component to be managed by the container. - The key to obtain the component will be the FullName of the type. - - The to manage. - - - - Adds a component to be managed by the container - - The to manage. - The key by which the component gets indexed. - - - - Adds a component to be managed by the container. - The key to obtain the component will be the FullName of the type. - - The to manage. - The with which to manage the component. - - - - Adds a component to be managed by the container - - The service that the component implements. - The to manage. - The key by which the component gets indexed. - - - - Adds a component to be managed by the container - The key to obtain the component will be the FullName of the type. - - The service that the component implements. - The to manage. - The with which to manage the component. - - - - Adds a component to be managed by the container - - The to manage. - The key by which the component gets indexed. - The with which to manage the component. - - - - Adds a component to be managed by the container - The key to obtain the component will be the FullName of the type. - - The service that the component implements. - The to manage. - - - - Adds a component to be managed by the container - - The service that the component implements. - The to manage. - The key by which the component gets indexed. - The with which to manage the component. - - - - Adds a concrete class as a component and specify the extended properties. - Used by facilities, mostly. - The key to obtain the component will be the FullName of the type. - - - - - - - Adds a concrete class as a component and specify the extended properties. - Used by facilities, mostly. - - - - - - - - Adds a concrete class and an interface - as a component and specify the extended properties. - Used by facilities, mostly. - The key to obtain the component will be the FullName of the type. - - - - - - - - Adds a concrete class and an interface - as a component and specify the extended properties. - Used by facilities, mostly. - - - - - - - - - Registers the components described by the s - with the . - The component registrations. - The container. - - - - - Installs the components provided by the s - with the . - The component installers. - The container. - - - - - Returns a component instance by the key - - - - - - - Returns a component instance by the service - - - - - - - - Returns a component instance by the service - - - - - - - - Returns a component instance by the key - - - - - - - - Returns a component instance by the key - - - - - - - - Returns a component instance by the service - - - - - - - Resolve all valid components that match this type. - - The service type - - - - Resolve all valid components that match this type. - The service type - Arguments to resolve the service - - - - - Resolve all valid components that match this type. - The service type - Arguments to resolve the service - - - - - Returns a component instance by the key - - - - - - - - Returns a component instance by the key - - - - - - - - - Returns a component instance by the key - - - - - - - - - Returns a component instance by the service - - - - - - - - Returns a component instance by the service - - - - - - - - Returns a component instance by the key - - - - - - - - Returns a component instance by the key - - - - - - - - Returns a component instance by the service - - - - - - - Returns a component instance by the key - - - - - - - Releases a component instance - - - - - - Registers a subcontainer. The components exposed - by this container will be accessible from subcontainers. - - - - - - Removes (unregisters) a subcontainer. The components exposed by this container - will no longer be accessible to the child container. - - - - - - Gets a child container instance by name. - - The container's name. - The child container instance or null - - - - Gets the service object of the specified type. - - - A service object of type serviceType. - - An object that specifies the type of service object to get. - - - - Gets the service object of the specified type. - - - A service object of type serviceType. - - - - - Executes Dispose on underlying - - - - - Gets the container's name - - - Only useful when child containers are being used - - The container's name. - - - - Returns the inner instance of the MicroKernel - - - - - Gets or sets the parent container if this instance - is a sub container. - - - - - Shortcut to the method - - - - - Shortcut to the method - - - - diff --git a/bin/CommonServiceLocator.WindsorAdapter.dll b/bin/CommonServiceLocator.WindsorAdapter.dll deleted file mode 100644 index 668d5ffa4..000000000 Binary files a/bin/CommonServiceLocator.WindsorAdapter.dll and /dev/null differ diff --git a/bin/FluentNHibernate.XML b/bin/FluentNHibernate.XML deleted file mode 100644 index 272b2d5ac..000000000 --- a/bin/FluentNHibernate.XML +++ /dev/null @@ -1,2119 +0,0 @@ - - - - FluentNHibernate - - - - - Dictates whether a element can have attributes set on it. - - - - - Set an attribute on the xml element produced by this mapping. - - Attribute name - Attribute value - - - - Indicates a constant, general position on the document the part should be written to - - - - - Indicates a constant sub-position within a similar grouping of positions the element will be written in - - - - - Thrown when a prefix is specified for an access-strategy that isn't supported. - - - - - Used to set the Not-Found attribute to ignore. This tells NHibernate to - return a null object rather then throw an exception when the join fails - - - - - Used to set the Not-Found attribute to exception (Nhibernate default). This - tells NHibernate to throw an exception when the join fails - - - - - Join convention, implement this interface to alter join mappings. - - - - - Basic convention interface. Don't use directly. - - Mapping to apply conventions to - - - - Ignore - this is used for generic restrictions only - - - - - Whether this convention will be applied to the target. - - Instace that could be supplied - Apply on this target? - - - - Apply changes to the target - - Instance to apply changes to - - - - Property convention, implement this interface to apply changes to - property mappings. - - - - - Convention for identities, implement this interface to apply changes to - identity mappings. - - - - - HasMany convention, used for applying changes to one-to-many relationships. - - - - - Discovers any implementations and applies them to - an instance. - - - - - Mapping part convention, implement this interface to apply changes to - all IMappingPart instances. - - - - - Discovers any implementations and applies them to - an instance. - - - - - Relationship convention, implement this interface to apply changes to - all relationship mappings. - - - - - Maps a component - - - Type of component - Component property - Component mapping - - - - CreateProperties a one-to-many relationship - - - Child object type - Expression to get property from - one-to-many part - - - - CreateProperties a one-to-many relationship with a IDictionary - - - Dictionary key type - Child object type / Dictionary value type - Expression to get property from - one-to-many part - - - - CreateProperties a many-to-many relationship - - - Child object type - Expression to get property from - many-to-many part - - - - Maps a component - - Type of component - Component property - Component mapping - - - - Maps a component - - Type of component - Component property - Component mapping - - - - CreateProperties a one-to-many relationship - - Child object type - Property return type - Expression to get property from - one-to-many part - - - - CreateProperties a one-to-many relationship - - Child object type - Expression to get property from - one-to-many part - - - - CreateProperties a one-to-many relationship with a IDictionary - - Dictionary key type - Child object type / Dictionary value type - Expression to get property from - one-to-many part - - - - CreateProperties a one-to-many relationship - - Child object type - Expression to get property from - one-to-many part - - - - CreateProperties a many-to-many relationship - - Child object type - Property return type - Expression to get property from - many-to-many part - - - - CreateProperties a many-to-many relationship - - Child object type - Expression to get property from - many-to-many part - - - - CreateProperties a many-to-many relationship - - Child object type - Expression to get property from - many-to-many part - - - - Sets the table for the class. - - Table name - - - - Sets the hibernate-mapping schema for this class. - - Schema name - - - - Sets the hibernate-mapping auto-import for this class. - - - - - Sets this entity to be lazy-loaded (overrides the default lazy load configuration). - - - - - Imports an existing type for use in the mapping. - - Type to import. - - - - Set the mutability of this class, sets the mutable attribute. - - - - - Sets this entity to be dynamic update - - - - - Sets this entity to be dynamic insert - - - - - Sets the optimistic locking strategy - - - - - Inverse next boolean - - - - - Set an attribute on the xml element produced by this class mapping. - - Attribute name - Attribute value - - - - Sets the hibernate-mapping schema for this class. - - Schema name - - - - Sets the hibernate-mapping auto-import for this class. - - - - - Sets the table for the class. - - Table name - - - - Sets this entity to be lazy-loaded (overrides the default lazy load configuration). - - - - - Sets additional tables for the class via the NH 2.0 Join element. - - Joined table name - Joined table mapping - - - - Imports an existing type for use in the mapping. - - Type to import. - - - - Set the mutability of this class, sets the mutable attribute. - - - - - Sets this entity to be dynamic update - - - - - Sets this entity to be dynamic insert - - - - - Specify caching for this entity. - - - - - Set the default access and naming strategies for this entire mapping. - - - - - Inverse next boolean - - - - - Sets the optimistic locking strategy - - - - - Sets whether this subclass is lazy loaded - - - - - - Inverts the next boolean - - - - - Set an attribute on the xml element produced by this sub-class mapping. - - Attribute name - Attribute value - - - - Sets whether this subclass is lazy loaded - - - - - - Inverts the next boolean - - - - - Indicates a constant, general position on the document the part should be written to - - - - - Indicates a constant sub-position within a similar grouping of positions the element will be written in - - - - - Specifies a custom type (of ) for any properties - that are an enum. - - - - - Maps this collection as a collection of components. - - Component mapping - - - - Sets the table name for this one-to-many. - - Table name - - - - Sets the where clause for this one-to-many relationship. - - - - - Sets a custom collection type - - - - - Sets a custom collection type - - - - - Sets a custom collection type - - - - - Specify caching for this entity. - - - - - Inverts the next boolean - - - - - Maps this collection as a collection of components. - - Component mapping - - - - Sets the table name for this one-to-many. - - Table name - - - - Sets the where clause for this one-to-many relationship. - Note: This only supports simple cases, use the string overload for more complex clauses. - - - - - Sets the where clause for this one-to-many relationship. - - - - - Sets a custom collection type - - - - - Sets a custom collection type - - - - - Sets a custom collection type - - - - - Maps this collection as a collection of components. - - Component mapping - - - - Sets the table name for this one-to-many. - - Table name - - - - Sets the where clause for this one-to-many relationship. - - - - - Sets a custom collection type - - - - - Sets a custom collection type - - - - - Sets a custom collection type - - - - - Specify caching for this entity. - - - - - Set the access and naming strategy for this one-to-many. - - - - - Inverts the next boolean - - - - - Inverts the next boolean - - - - - Use no locking strategy - - - - - Use version locking - - - - - Use dirty locking - - - - - Use all locking - - - - - Default HasMany backing field naming convention - - - - - Base convention for setting the backing field name of a property or method. - - Collection relationship mapping - - - - Force NHibernate to always select using the discriminator value, even when selecting all subclasses. This - can be useful when your table contains more discriminator values than you have classes (legacy). - - Sets the "force" attribute. - - - - Set this discriminator as read-only. Call this if your discriminator column is also part of a mapped composite identifier. - - Sets the "insert" attribute. - - - - An arbitrary SQL expression that is executed when a type has to be evaluated. Allows content-based discrimination. - - SQL expression - - - - Set an attribute on the xml element produced by this discriminator mapping. - - Attribute name - Attribute value - - - - Discovers any implementations and applies them to - an instance. - - - - - Discovers any implementations and applies them to - all s in an instance. - - - - - Base implementation for "classlike" mappings. Finds and applies any - implementations to all s in the classlike container. - - - Classlike mappings are ones that are like classes in their capabilities, components - and join's are two examples. - - Classlike mapping - - - - Convention for a component mapping. Implement this interface to - apply changes to components. - - - - - Discovers any implementations and applies them to - an instance. - - - - - Sets the proxyfactory.factory_class property. - NOTE: NHibernate 2.1 only - - factory class - Configuration - - - - Sets the adonet.batch_size property. - - Batch size - Configuration - - - - Container for Hbm mappings - - - - - Add explicit classes with Hbm mappings - - List of types to map - Hbm mappings configuration - - - - Add all Hbm mappings in the assembly that contains T. - - Type from the assembly - Hbm mappings configuration - - - - Add all Hbm mappings in the assembly - - Assembly to add mappings from - Hbm mappings configuration - - - - Applies any added mappings to the NHibernate Configuration - - NHibernate Configuration instance - - - - Gets whether any mappings were added - - - - - User type convention, implement this interface to apply changes to - property's that use a IUserType. Subclassing - is recommended instead of directly implementing this interface. - - - - - Should apply changes to property's of this type? - - Property type - Accept or not - - - - Convention for all the class mappings in the assemblies Fluent NHibernate knows about. - Implement this interface to alter collections of class mappings. - - - - - HasManyToMany convention, used on many-to-many relationships. - - - - - Discovers any implementations and applies them to - an instance. - - - - - Creates an instance of an IAutoMappingAlteration from a type instance, then adds it to the alterations collection. - - Type of an IAutoMappingAlteration - - - - Creates an instance of an IAutoMappingAlteration from a generic type parameter, then adds it to the alterations collection. - - Type of an IAutoMappingAlteration - Container - - - - Adds an alteration - - Alteration to add - Container - - - - Adds all alterations from an assembly - - Assembly to search - Container - - - - Adds all alterations from an assembly that contains T. - - Type who's assembly to search - Container - - - - Apply alterations to an AutoPersisteceModel - - AutoPersistenceModel instance to apply alterations to - - - - Specifies the name of a multi-column unique constraint. - - Name of constraint - - - - Inverts the next boolean - - - - - Denotes that a mapping part has an access strategy. - - Parent element, property, many-to-one etc... - - - - Set the access and naming strategy for this element. - - - - - Set the access and naming strategy for this identity. - - - - - Sets the unsaved-value of the identity. - - Value that represents an unsaved value. - - - - Sets the column name for the identity field. - - Column name - - - - Set an attribute on the xml element produced by this identity mapping. - - Attribute name - Attribute value - - - - Sets the unsaved-value of the identity. - - Value that represents an unsaved value. - - - - Sets the column name for the identity field. - - Column name - - - - Gets the column name - - - - - - Set the access and naming strategy for this identity. - - - - - Access strategy mapping builder. - - Mapping part to be applied to - - - - Sets the access-strategy to property. - - - - - Sets the access-strategy to field. - - - - - Sets the access-strategy to field and the naming-strategy to camelcase (field.camelcase). - - - - - Sets the access-strategy to field and the naming-strategy to camelcase, with the specified prefix. - - Naming-strategy prefix - - - - Sets the access-strategy to field and the naming-strategy to lowercase. - - - - - Sets the access-strategy to field and the naming-strategy to lowercase, with the specified prefix. - - Naming-strategy prefix - - - - Sets the access-strategy to field and the naming-strategy to pascalcase, with the specified prefix. - - Naming-strategy prefix - - - - Sets the access-strategy to read-only property (nosetter) and the naming-strategy to camelcase. - - - - - Sets the access-strategy to read-only property (nosetter) and the naming-strategy to camelcase, with the specified prefix. - - Naming-strategy prefix - - - - Sets the access-strategy to read-only property (nosetter) and the naming-strategy to lowercase. - - - - - Sets the access-strategy to read-only property (nosetter) and the naming-strategy to lowercase. - - Naming-strategy prefix - - - - Sets the access-strategy to read-only property (nosetter) and the naming-strategy to pascalcase, with the specified prefix. - - Naming-strategy prefix - - - - Sets the access-strategy to use the type referenced. - - Assembly qualified name of the type to use as the access-strategy - - - - Sets the access-strategy to use the type referenced. - - Type to use as the access-strategy - - - - Sets the access-strategy to use the type referenced. - - Type to use as the access-strategy - - - - Access strategy mapping builder. - - Instance of the parent mapping part. - - - - Sets the access-strategy to property. - - - - - Sets the access-strategy to field. - - - - - Sets the access-strategy to field and the naming-strategy to camelcase (field.camelcase). - - - - - Sets the access-strategy to field and the naming-strategy to camelcase, with the specified prefix. - - Naming-strategy prefix - - - - Sets the access-strategy to field and the naming-strategy to lowercase. - - - - - Sets the access-strategy to field and the naming-strategy to lowercase, with the specified prefix. - - Naming-strategy prefix - - - - Sets the access-strategy to field and the naming-strategy to pascalcase, with the specified prefix. - - Naming-strategy prefix - - - - Sets the access-strategy to read-only property (nosetter) and the naming-strategy to camelcase. - - - - - Sets the access-strategy to read-only property (nosetter) and the naming-strategy to camelcase, with the specified prefix. - - Naming-strategy prefix - - - - Sets the access-strategy to read-only property (nosetter) and the naming-strategy to lowercase. - - - - - Sets the access-strategy to read-only property (nosetter) and the naming-strategy to lowercase. - - Naming-strategy prefix - - - - Sets the access-strategy to read-only property (nosetter) and the naming-strategy to pascalcase, with the specified prefix. - - Naming-strategy prefix - - - - Sets the access-strategy to use the type referenced. - - Assembly qualified name of the type to use as the access-strategy - - - - Sets the access-strategy to use the type referenced. - - Type to use as the access-strategy - - - - Sets the access-strategy to use the type referenced. - - Type to use as the access-strategy - - - - Sets the access attribute on the parent element. - - Value for the access attribute - - - - Maps to the Join element in NH 2.0 - - - - - - Convention for dynamic components. Implement this member to apply changes - to dynamic components. - - - - - Convention finder - used to search through assemblies for types that implement a specific convention interface. - - - - - Add an assembly to be queried. - - - All convention types must have a parameterless constructor, or a single parameter of . - - Assembly instance to query - - - - Adds all conventions found in the assembly that contains . - - - All convention types must have a parameterless constructor, or a single parameter of . - - - - - Add a single convention by type. - - - Type must have a parameterless constructor, or a single parameter of . - - Convention type - - - - Add a single convention by type. - - - Types must have a parameterless constructor, or a single parameter of . - - Type of convention - - - - Add an instance of a convention. - - - Useful for supplying conventions that require extra constructor parameters. - - Convention type - Instance of convention - - - - Find any conventions implementing T. - - Convention interface type - IEnumerable of T - - - - Discovers any implementations and applies them to - an instance. - - - - - Initializes a new instance of the class using the - Oracle Data Provider (Oracle.DataAccess) library. The Oracle.DataAccess library must - be available to the calling application/library. - - - - - Initializes a new instance of the class using the - MS Oracle Client (System.Data.OracleClient) library. - - - - - A mapping override for an auto mapped entity. - - Entity who's auto-mapping you're overriding - - - - Alter the automapping for this type - - Automapping - - - - Used to set the Not-Found attribute to ignore. This tells NHibernate to - return a null object rather then throw an exception when the join fails - - - - - - Used to set the Not-Found attribute to ignore. This tells NHibernate to - return a null object rather then throw an exception when the join fails - - - - - Used to set the Not-Found attribute to exception (Nhibernate default). This - tells NHibernate to throw an exception when the join fails - - - - - - Used to set the Not-Found attribute to exception (Nhibernate default). This - tells NHibernate to throw an exception when the join fails - - - - - Default primary key name convention. - - - - - Joined subclass convention, implement this interface to alter joined-subclass mappings. - - - - - Convention for a single class mapping. Implement this interface to apply - changes to class mappings. - - - - - Discovers any implementations and applies them to - an instance. - - - - - Initializes a new instance of the class using the - Oracle Data Provider (Oracle.DataAccess) library. The Oracle.DataAccess library must - be available to the calling application/library. - - - - - Specify alterations to be used with this AutoPersisteceModel - - Lambda to declare alterations - AutoPersistenceModel - - - - Use auto mapping overrides defined in the assembly of T. - - Type to get assembly from - AutoPersistenceModel - - - - Setup the auto mapper - - - - - - - - - Assembly Containing Maps - - - - Alter convention discovery - - - - - Sets the type attribute on property mappings - - - - - Set an attribute on the xml element produced by this component mapping. - - Attribute name - Attribute value - - - - Set the access and naming strategy for this component. - - - - - Base class for attribute based conventions. Create a subclass of this to supply your own - attribute based conventions. - - Attribute identifier - - - - Apply changes to a property with an attribute matching T. - - Instance of attribute found on property. - Property with attribute - - - - Base class for user type conventions. Create a subclass of this to automatically - map all properties that the user type can be used against. Override Accept or - Apply to alter the behavior. - - IUserType implementation - - - - Reference convention, implement this interface to apply changes to Reference/many-to-one - relationships. - - - - - Reveals a hidden property for use instead of expressions. - - Entity type - Name of property - Expression for the hidden property - - - - Reveals a hidden property with a specific return type for use instead of expressions. - - Entity type - Property return type - Name of property - Expression for the hidden property - - - - Default entity table name convention - - - - - Naming strategy prefix. - - - - - Discovers any implementations and applies them to all the - s in the domain. - - - - - Inverts the next boolean - - - - - Specifies the name of a multi-column unique constraint. - - Name of constraint - - - - Inverts the next boolean - - - - - Version column naming convention - - - - - Version convention, implement this interface to apply changes to vesion mappings. - - - - - Default HasManyToMany table name convention - - - - - (REQUIRED) The identity type of the any mapping - - - - - - (REQUIRED) Specifies the column name that will contain the type of the associated entity - - - - - (REQUIRED) Specifies the column name that will hold the identifier - - - - - This is used to map specific class types to value types stored in the EntityTypeColumn - This method should only be called if the MetaType specified for this ANY mapping is a basic data type (such as string) - - The class type to map - The string or character representing the value stored in the EntityTypeColumn in the table - - - - Sets the cascade of this part. Valid options are "none", "all", and "save-update" - - - - - Represents the "Any" mapping in NHibernate. It is impossible to specify a foreign key constraint for this kind of association. For more information - please reference chapter 5.2.4 in the NHibernate online documentation - - - - - Used to specify attributes on the XML Element if the class does not contain the necessary Fluent mapping - - - - - Used to specify attributes on the XML Element if the class does not contain the necessary Fluent mapping - - - - - Writes the Any element to the XmlElement. Typically called during a ClassMap write - - - - - The property on your class that contains the mapped object - - - - - Indicates the level within the Position, that this Part should be written at. The Any part has no intrinsic level it's required to appear at. - - - - - The general ordering of which the Part should be written in the HBM mapping. The Any Part can be placed anywhere in a mapping file after the header components have been set. - - - - - Defines how NHibernate will access the object for persisting/hydrating (Defaults to Property) - - - - - Cascade style (Defaults to none) - - - - - Discovers any implementations and applies them to - an instance. - - - - - Sets a custom collection type - - - - - Sets a custom collection type - - - - - Sets a custom collection type - - - - - Inverts the next boolean - - - - - Set an attribute on the xml element produced by this one-to-many mapping. - - Attribute name - Attribute value - - - - Sets a custom collection type - - - - - Sets a custom collection type - - - - - Sets a custom collection type - - - - - Nullable enum convention. Same behavior as but sets the - property to nullable aswell. - - - - - Subclass convention, implement this interface to alter subclass mappings. - - - - - Discovers any implementations and applies them to - all s in an instance. - - - - - Default HasManyToMany backing field naming convention - - - - - Container for fluent mappings - - - - - Add all fluent mappings in the assembly that contains T. - - Type from the assembly - Fluent mappings configuration - - - - Add all fluent mappings in the assembly - - Assembly to add mappings from - Fluent mappings configuration - - - - Adds a single represented by the specified type. - - Fluent mappings configuration - - - - Adds a single represented by the specified type. - - The type. - Fluent mappings configuration - - - - Sets the export location for generated mappings - - Path to folder for mappings - Fluent mappings configuration - - - - Applies any added mappings to the NHibernate Configuration - - NHibernate Configuration instance - - - - Alter convention discovery - - - - - Gets whether any mappings were added - - - - - Defines a property to be used as a key for this composite-id. - - A member access lambda expression for the property - The composite identity part fluent interface - - - - Defines a property to be used as a key for this composite-id with an explicit column name. - - A member access lambda expression for the property - The column name in the database to use for this key, or null to use the property name - The composite identity part fluent interface - - - - Defines a reference to be used as a many-to-one key for this composite-id with an explicit column name. - - A member access lambda expression for the property - The composite identity part fluent interface - - - - Defines a reference to be used as a many-to-one key for this composite-id with an explicit column name. - - A member access lambda expression for the property - The column name in the database to use for this key, or null to use the property name - The composite identity part fluent interface - - - - Set the access and naming strategy for this identity. - - - - - HasOne convention, used for applying changes to one-to-one relationships. - - - - - Discovers any implementations and applies them to - all s in an instance. - - - - - Discovers any implementations and applies them to - an instance. - - - - - generates identifiers of any integral type that are unique only when no other - process is inserting data into the same table. Do not use in a cluster. - - - - - - supports identity columns in DB2, MySQL, MS SQL Server and Sybase. - The identifier returned by the database is converted to the property type using - Convert.ChangeType. Any integral property type is thus supported. - - - - - - uses a sequence in DB2, PostgreSQL, Oracle or a generator in Firebird. - The identifier returned by the database is converted to the property type - using Convert.ChangeType. Any integral property type is thus supported. - - - - - - - uses a hi/lo algorithm to efficiently generate identifiers of any integral type, - given a table and column (by default hibernate_unique_key and next_hi respectively) - as a source of hi values. The hi/lo algorithm generates identifiers that are unique - only for a particular database. Do not use this generator with a user-supplied connection. - requires a "special" database table to hold the next available "hi" value - - - - - - - - - uses a hi/lo algorithm to efficiently generate identifiers of any integral type, - given a table and column (by default hibernate_unique_key and next_hi respectively) - as a source of hi values. The hi/lo algorithm generates identifiers that are unique - only for a particular database. Do not use this generator with a user-supplied connection. - requires a "special" database table to hold the next available "hi" value - - - - - - - uses an Oracle-style sequence (where supported) - - - - - - - - uses System.Guid and its ToString(string format) method to generate identifiers - of type string. The length of the string returned depends on the configured format. - - http://msdn.microsoft.com/en-us/library/97af8hh4.aspx - - - - - uses a new System.Guid to create a byte[] that is converted to a string. - - - - - - uses a new System.Guid as the identifier. - - - - - - Recommended for Guid identifiers! - uses the algorithm to generate a new System.Guid described by Jimmy Nilsson - in the article http://www.informit.com/articles/article.asp?p=25862. - - - - - - lets the application to assign an identifier to the object before Save() is called. - - - - - - picks identity, sequence or hilo depending upon the capabilities of the underlying database. - - - - - - uses the identifier of another associated object. Usually used in conjunction with a one-to-one primary key association. - - - - - - - Converts an expression to a best guess SQL string - - - - - Converts a Func expression to a best guess SQL string - - - - - Converts a boolean Func expression to a best guess SQL string - - - - - Gets the value of a method call. - - Method call expression - - - - Discovers any implementations and applies them to - all s in an instance. - - - - - Discovers any implementations and applies them to - an instance. - - - - - Fluent mapping configuration - - - - - Applies any mappings to the NHibernate Configuration - - NHibernate Configuration instance - - - - Fluent mappings - - - - - Automatic mapping configurations - - - - - Hbm mappings - - - - - Get whether any mappings of any kind were added - - - - - Container for automatic mappings - - - - - Add automatic mappings - - Lambda returning an auto mapping setup - Auto mappings configuration - - - - Add automatic mappings - - Auto mapping setup - Auto mappings configuration - - - - Sets the export location for generated mappings - - Path to folder for mappings - Auto mappings configuration - - - - Applies any added mappings to the NHibernate Configuration - - NHibernate Configuration instance - - - - Gets whether any mappings were added - - - - - Checks a list of components for validity. - - Type of list element - Property - Value to save - - - - Indicates whether the current is equal to another . - - - true if the current object is equal to the parameter; otherwise, false. - - An Entity to compare with this object. - - - - Determines whether the specified is equal to the current . - - - true if the specified is equal to the current ; otherwise, false. - - The to compare with the current . - The parameter is null.2 - - - - Serves as a hash function for a Entity. - - - A hash code for the current . - - 2 - - - - Discovers any implementations and applies them to - all s in an instance. - - - - - Discovers any implementations and applies them to - an instance. - - - - - Discovers any implementations and applies them to - an instance. - - - - - Discovers any implementations and applies them to - all s in an instance. - - - - - Fluently configure NHibernate - - - - - Begin fluently configuring NHibernate - - Fluent Configuration - - - - Begin fluently configuring NHibernate - - Instance of an NHibernate Configuration - Fluent Configuration - - - - Fluent configuration API for NHibernate - - - - - Apply database settings - - Lambda returning database configuration - Fluent configuration - - - - Apply database settings - - Database configuration instance - Fluent configuration - - - - Apply mappings to NHibernate - - Lambda used to apply mappings - Fluent configuration - - - - Allows altering of the raw NHibernate Configuration object before creation - - Lambda used to alter Configuration - Fluent configuration - - - - Verify's the configuration and instructs NHibernate to build a SessionFactory. - - ISessionFactory from supplied settings. - - - - Verifies the configuration and populates the NHibernate Configuration instance. - - NHibernate Configuration instance - - - - Creates an exception based on the current state of the configuration. - - Inner exception - FluentConfigurationException with state - - - - Provides a mechanism for altering an AutoPersistenceModel prior to - the generation of mappings. - - - - - Alter the model - - AutoPersistenceModel instance to alter - - - - Set an attribute on the xml element produced by this many-to-many mapping. - - Attribute name - Attribute value - - - - Component-element for component HasMany's. - - Component type - - - - Maps a property of the component class as a reference back to the containing entity - - Parent reference property - Component being mapped - - - - Set an attribute on the xml element produced by this component mapping. - - Attribute name - Attribute value - - - - - Specifies the server to connect. This can be either the DNS name of the - server or the IP (as a string). - - The server. - - - - - Specifies the instance (database name) to use. This can be the short name or the - fully qualified name (Oracle service name). - - The instance. - - - - - Specifies the name of the user account accessing the database. - - The username. - - - - - Specifies the password of the user account accessing the database. - - The password. - - - - - Optional. Ports the specified port the oracle database is running on. This defaults to 1521. - - The port. - - - - - Enable or disable pooling connections for this data configuration. - - if set to true enable pooling. - - - - - Specifies the SQL statement cache size to use for this connection. - - Size of the cache. - - - - - Specifies, as a string, other Oracle options to pass to the connection. - - The other options. - - - - - Built-in alteration for altering an AutoPersistenceModel with instance of IAutoMappingOverride<T>. - - - - - Constructor for AutoMappingOverrideAlteration. - - Assembly to load overrides from. - - - - Alter the model - - - Finds all types in the assembly (passed in the constructor) that implement IAutoMappingOverride<T>, then - creates an AutoMap<T> and applies the override to it. - - AutoPersistenceModel instance to alter - - - - Set an attribute on the xml element produced by this property mapping. - - Attribute name - Attribute value - - - - Specifies that a custom type (an implementation of ) should be used for this property for mapping it to/from one or more database columns whose format or type doesn't match this .NET property. - - A type which implements . - This property mapping to continue the method chain - - - - Specifies that a custom type (an implementation of ) should be used for this property for mapping it to/from one or more database columns whose format or type doesn't match this .NET property. - - A type which implements . - This property mapping to continue the method chain - - - - Specifies that a custom type (an implementation of ) should be used for this property for mapping it to/from one or more database columns whose format or type doesn't match this .NET property. - - A type which implements . - This property mapping to continue the method chain - - - - Specifies the name of a multi-column unique constraint. - - Name of constraint - - - - Set the access and naming strategy for this property. - - - - - Inverts the next boolean - - - - - Specifies the position within the parent that this element is output - - - - - Discovers any implementations and applies them to - an instance. - - - - - Default convention finder - doesn't do anything special. - - - - - Find any conventions implementing T. - - Convention interface type - IEnumerable of T - - - - Add an assembly to be queried. - - - All convention types must have a parameterless constructor, or a single parameter of IConventionFinder. - - Assembly instance to query - - - - Adds all conventions found in the assembly that contains T. - - - All convention types must have a parameterless constructor, or a single parameter of IConventionFinder. - - - - - Add a single convention by type. - - - Type must have a parameterless constructor, or a single parameter of IConventionFinder. - - Convention type - - - - Add a single convention by type. - - - Types must have a parameterless constructor, or a single parameter of . - - Type of convention - - - - Add an instance of a convention. - - - Useful for supplying conventions that require extra constructor parameters. - - Convention type - Instance of convention - - - diff --git a/bin/FluentNHibernate.dll b/bin/FluentNHibernate.dll deleted file mode 100644 index ad1e7db30..000000000 Binary files a/bin/FluentNHibernate.dll and /dev/null differ diff --git a/bin/Gallio.dll b/bin/Gallio.dll deleted file mode 100644 index de040122d..000000000 Binary files a/bin/Gallio.dll and /dev/null differ diff --git a/bin/Iesi.Collections.dll b/bin/Iesi.Collections.dll deleted file mode 100644 index 22f7efac9..000000000 Binary files a/bin/Iesi.Collections.dll and /dev/null differ diff --git a/bin/Iesi.Collections.license.txt b/bin/Iesi.Collections.license.txt deleted file mode 100644 index 66c4a8dc5..000000000 --- a/bin/Iesi.Collections.license.txt +++ /dev/null @@ -1,9 +0,0 @@ -Copyright 2002-2004 by Aidant Systems, Inc., and by Jason Smith. - -Copied from http://www.codeproject.com/csharp/sets.asp#xx703510xx that was posted by JasonSmith 12:13 2 Jan '04 - -Feel free to use this code any way you want to. As a favor to me, you can leave the copyright in there. You never know when someone might recognize your name! - -If you do use the code in a commercial product, I would appreciate hearing about it. This message serves as legal notice that I won't be suing you for royalties! The code is in the public domain. - -On the other hand, I don't provide support. The code is actually simple enough that it shouldn't need it. diff --git a/bin/Iesi.Collections.xml b/bin/Iesi.Collections.xml deleted file mode 100644 index 22ebfdec2..000000000 --- a/bin/Iesi.Collections.xml +++ /dev/null @@ -1,1903 +0,0 @@ - - - - Iesi.Collections - - - - -

            DictionarySet is an abstract class that supports the creation of new Set - types where the underlying data store is an IDictionary instance.

            - -

            You can use any object that implements the IDictionary interface to hold set data. - You can define your own, or you can use one of the objects provided in the Framework. - The type of IDictionary you choose will affect both the performance and the behavior - of the Set using it.

            - -

            To make a Set typed based on your own IDictionary, simply derive a - new class with a constructor that takes no parameters. Some Set implmentations - cannot be defined with a default constructor. If this is the case for your class, - you will need to override Clone() as well.

            - -

            It is also standard practice that at least one of your constructors takes an ICollection or - an ISet as an argument.

            -
            -
            - -

            A collection that contains no duplicate elements. This class models the mathematical - Set abstraction, and is the base class for all other Set implementations. - The order of elements in a set is dependant on (a)the data-structure implementation, and - (b)the implementation of the various Set methods, and thus is not guaranteed.

            - -

            None of the Set implementations in this library are guranteed to be thread-safe - in any way unless wrapped in a SynchronizedSet.

            - -

            The following table summarizes the binary operators that are supported by the Set class.

            - - - Operation - Description - Method - Operator - - - Union (OR) - Element included in result if it exists in either A OR B. - Union() - | - - - Intersection (AND) - Element included in result if it exists in both A AND B. - InterSect() - & - - - Exclusive Or (XOR) - Element included in result if it exists in one, but not both, of A and B. - ExclusiveOr() - ^ - - - Minus (n/a) - Take all the elements in A. Now, if any of them exist in B, remove - them. Note that unlike the other operators, A - B is not the same as B - A. - Minus() - - - - -
            -
            - - -

            A collection that contains no duplicate elements. This interface models the mathematical - Set abstraction. - The order of elements in a set is dependant on (a)the data-structure implementation, and - (b)the implementation of the various Set methods, and thus is not guaranteed.

            - -

            None of the Set implementations in this library are guranteed to be thread-safe - in any way unless wrapped in a SynchronizedSet.

            - -

            The following table summarizes the binary operators that are supported by the Set class.

            - - - Operation - Description - Method - - - Union (OR) - Element included in result if it exists in either A OR B. - Union() - - - Intersection (AND) - Element included in result if it exists in both A AND B. - InterSect() - - - Exclusive Or (XOR) - Element included in result if it exists in one, but not both, of A and B. - ExclusiveOr() - - - Minus (n/a) - Take all the elements in A. Now, if any of them exist in B, remove - them. Note that unlike the other operators, A - B is not the same as B - A. - Minus() - - -
            -
            - - - Performs a "union" of the two sets, where all the elements - in both sets are present. That is, the element is included if it is in either a or b. - Neither this set nor the input set are modified during the operation. The return value - is a Clone() of this set with the extra elements added in. - - A collection of elements. - A new Set containing the union of this Set with the specified collection. - Neither of the input objects is modified by the union. - - - - Performs an "intersection" of the two sets, where only the elements - that are present in both sets remain. That is, the element is included if it exists in - both sets. The Intersect() operation does not modify the input sets. It returns - a Clone() of this set with the appropriate elements removed. - - A set of elements. - The intersection of this set with a. - - - - Performs a "minus" of set b from set a. This returns a set of all - the elements in set a, removing the elements that are also in set b. - The original sets are not modified during this operation. The result set is a Clone() - of this Set containing the elements from the operation. - - A set of elements. - A set containing the elements from this set with the elements in a removed. - - - - Performs an "exclusive-or" of the two sets, keeping only the elements that - are in one of the sets, but not in both. The original sets are not modified - during this operation. The result set is a Clone() of this set containing - the elements from the exclusive-or operation. - - A set of elements. - A set containing the result of a ^ b. - - - - Returns if the set contains all the elements in the specified collection. - - A collection of objects. - if the set contains all the elements in the specified collection, otherwise. - - - - Adds the specified element to this set if it is not already present. - - The object to add to the set. - is the object was added, if it was already present. - - - - Adds all the elements in the specified collection to the set if they are not already present. - - A collection of objects to add to the set. - is the set changed as a result of this operation, if not. - - - - Remove all the specified elements from this set, if they exist in this set. - - A collection of elements to remove. - if the set was modified as a result of this operation. - - - - Retains only the elements in this set that are contained in the specified collection. - - Collection that defines the set of elements to be retained. - if this set changed as a result of this operation. - - - - Returns if this set contains no elements. - - - - -

            A collection that contains no duplicate elements. This interface models the mathematical - Set abstraction. - The order of elements in a set is dependant on (a)the data-structure implementation, and - (b)the implementation of the various Set methods, and thus is not guaranteed.

            - -

            None of the Set implementations in this library are guranteed to be thread-safe - in any way unless wrapped in a SynchronizedSet.

            - -

            The following table summarizes the binary operators that are supported by the Set class.

            - - - Operation - Description - Method - - - Union (OR) - Element included in result if it exists in either A OR B. - Union() - - - Intersection (AND) - Element included in result if it exists in both A AND B. - InterSect() - - - Exclusive Or (XOR) - Element included in result if it exists in one, but not both, of A and B. - ExclusiveOr() - - - Minus (n/a) - Take all the elements in A. Now, if any of them exist in B, remove - them. Note that unlike the other operators, A - B is not the same as B - A. - Minus() - - -
            -
            - - - Performs a "union" of the two sets, where all the elements - in both sets are present. That is, the element is included if it is in either a or b. - Neither this set nor the input set are modified during the operation. The return value - is a Clone() of this set with the extra elements added in. - - A collection of elements. - A new Set containing the union of this Set with the specified collection. - Neither of the input objects is modified by the union. - - - - Performs an "intersection" of the two sets, where only the elements - that are present in both sets remain. That is, the element is included if it exists in - both sets. The Intersect() operation does not modify the input sets. It returns - a Clone() of this set with the appropriate elements removed. - - A set of elements. - The intersection of this set with a. - - - - Performs a "minus" of set b from set a. This returns a set of all - the elements in set a, removing the elements that are also in set b. - The original sets are not modified during this operation. The result set is a Clone() - of this Set containing the elements from the operation. - - A set of elements. - A set containing the elements from this set with the elements in a removed. - - - - Performs an "exclusive-or" of the two sets, keeping only the elements that - are in one of the sets, but not in both. The original sets are not modified - during this operation. The result set is a Clone() of this set containing - the elements from the exclusive-or operation. - - A set of elements. - A set containing the result of a ^ b. - - - - Returns if this set contains the specified element. - - The element to look for. - if this set contains the specified element, otherwise. - - - - Returns if the set contains all the elements in the specified collection. - - A collection of objects. - if the set contains all the elements in the specified collection, otherwise. - - - - Adds the specified element to this set if it is not already present. - - The object to add to the set. - is the object was added, if it was already present. - - - - Adds all the elements in the specified collection to the set if they are not already present. - - A collection of objects to add to the set. - is the set changed as a result of this operation, if not. - - - - Removes the specified element from the set. - - The element to be removed. - if the set contained the specified element, otherwise. - - - - Remove all the specified elements from this set, if they exist in this set. - - A collection of elements to remove. - if the set was modified as a result of this operation. - - - - Retains only the elements in this set that are contained in the specified collection. - - Collection that defines the set of elements to be retained. - if this set changed as a result of this operation. - - - - Removes all objects from the set. - - - - - Returns if this set contains no elements. - - - - - Performs a "union" of the two sets, where all the elements - in both sets are present. That is, the element is included if it is in either a or b. - Neither this set nor the input set are modified during the operation. The return value - is a Clone() of this set with the extra elements added in. - - A collection of elements. - A new Set containing the union of this Set with the specified collection. - Neither of the input objects is modified by the union. - - - - Performs a "union" of two sets, where all the elements - in both are present. That is, the element is included if it is in either a or b. - The return value is a Clone() of one of the sets (a if it is not ) with elements of the other set - added in. Neither of the input sets is modified by the operation. - - A set of elements. - A set of elements. - A set containing the union of the input sets. if both sets are . - - - - Performs a "union" of two sets, where all the elements - in both are present. That is, the element is included if it is in either a or b. - The return value is a Clone() of one of the sets (a if it is not ) with elements of the other set - added in. Neither of the input sets is modified by the operation. - - A set of elements. - A set of elements. - A set containing the union of the input sets. if both sets are . - - - - Performs an "intersection" of the two sets, where only the elements - that are present in both sets remain. That is, the element is included if it exists in - both sets. The Intersect() operation does not modify the input sets. It returns - a Clone() of this set with the appropriate elements removed. - - A set of elements. - The intersection of this set with a. - - - - Performs an "intersection" of the two sets, where only the elements - that are present in both sets remain. That is, the element is included only if it exists in - both a and b. Neither input object is modified by the operation. - The result object is a Clone() of one of the input objects (a if it is not ) containing the - elements from the intersect operation. - - A set of elements. - A set of elements. - The intersection of the two input sets. if both sets are . - - - - Performs an "intersection" of the two sets, where only the elements - that are present in both sets remain. That is, the element is included only if it exists in - both a and b. Neither input object is modified by the operation. - The result object is a Clone() of one of the input objects (a if it is not ) containing the - elements from the intersect operation. - - A set of elements. - A set of elements. - The intersection of the two input sets. if both sets are . - - - - Performs a "minus" of set b from set a. This returns a set of all - the elements in set a, removing the elements that are also in set b. - The original sets are not modified during this operation. The result set is a Clone() - of this Set containing the elements from the operation. - - A set of elements. - A set containing the elements from this set with the elements in a removed. - - - - Performs a "minus" of set b from set a. This returns a set of all - the elements in set a, removing the elements that are also in set b. - The original sets are not modified during this operation. The result set is a Clone() - of set a containing the elements from the operation. - - A set of elements. - A set of elements. - A set containing A - B elements. if a is . - - - - Performs a "minus" of set b from set a. This returns a set of all - the elements in set a, removing the elements that are also in set b. - The original sets are not modified during this operation. The result set is a Clone() - of set a containing the elements from the operation. - - A set of elements. - A set of elements. - A set containing A - B elements. if a is . - - - - Performs an "exclusive-or" of the two sets, keeping only the elements that - are in one of the sets, but not in both. The original sets are not modified - during this operation. The result set is a Clone() of this set containing - the elements from the exclusive-or operation. - - A set of elements. - A set containing the result of a ^ b. - - - - Performs an "exclusive-or" of the two sets, keeping only the elements that - are in one of the sets, but not in both. The original sets are not modified - during this operation. The result set is a Clone() of one of the sets - (a if it is not ) containing - the elements from the exclusive-or operation. - - A set of elements. - A set of elements. - A set containing the result of a ^ b. if both sets are . - - - - Performs an "exclusive-or" of the two sets, keeping only the elements that - are in one of the sets, but not in both. The original sets are not modified - during this operation. The result set is a Clone() of one of the sets - (a if it is not ) containing - the elements from the exclusive-or operation. - - A set of elements. - A set of elements. - A set containing the result of a ^ b. if both sets are . - - - - Adds the specified element to this set if it is not already present. - - The object to add to the set. - is the object was added, if it was already present. - - - - Adds all the elements in the specified collection to the set if they are not already present. - - A collection of objects to add to the set. - is the set changed as a result of this operation, if not. - - - - Removes all objects from the set. - - - - - Returns if this set contains the specified element. - - The element to look for. - if this set contains the specified element, otherwise. - - - - Returns if the set contains all the elements in the specified collection. - - A collection of objects. - if the set contains all the elements in the specified collection, otherwise. - - - - Removes the specified element from the set. - - The element to be removed. - if the set contained the specified element, otherwise. - - - - Remove all the specified elements from this set, if they exist in this set. - - A collection of elements to remove. - if the set was modified as a result of this operation. - - - - Retains only the elements in this set that are contained in the specified collection. - - Collection that defines the set of elements to be retained. - if this set changed as a result of this operation. - - - - Returns a clone of the Set instance. This will work for derived Set - classes if the derived class implements a constructor that takes no arguments. - - A clone of this object. - - - - Copies the elements in the Set to an array. The type of array needs - to be compatible with the objects in the Set, obviously. - - An array that will be the target of the copy operation. - The zero-based index where copying will start. - - - - Gets an enumerator for the elements in the Set. - - An IEnumerator over the elements in the Set. - - - - Performs CopyTo when called trhough non-generic ISet (ICollection) interface - - - - - - - Performs Union when called trhough non-generic ISet interface - - - - - - - Performs Minus when called trhough non-generic ISet interface - - - - - - - Performs Intersect when called trhough non-generic ISet interface - - - - - - - Performs ExclusiveOr when called trhough non-generic ISet interface - - - - - - - Returns if this set contains no elements. - - - - - The number of elements currently contained in this collection. - - - - - Returns if the Set is synchronized across threads. Note that - enumeration is inherently not thread-safe. Use the SyncRoot to lock the - object during enumeration. - - - - - An object that can be used to synchronize this collection to make it thread-safe. - When implementing this, if your object uses a base object, like an IDictionary, - or anything that has a SyncRoot, return that object instead of "this". - - - - - Indicates whether the given instance is read-only or not - - - if the ISet is read-only; otherwise, . - In the default implementation of Set, this property always returns false. - - - - - Provides the storage for elements in the Set, stored as the key-set - of the IDictionary object. Set this object in the constructor - if you create your own Set class. - - - - - Adds the specified element to this set if it is not already present. - - The to add to the set. - is the object was added, if it was already present. - - - - Adds all the elements in the specified collection to the set if they are not already present. - - A collection of objects to add to the set. - is the set changed as a result of this operation, if not. - - - - Removes all objects from the set. - - - - - Returns if this set contains the specified element. - - The element to look for. - if this set contains the specified element, otherwise. - - - - Returns if the set contains all the elements in the specified collection. - - A collection of objects. - if the set contains all the elements in the specified collection, otherwise. - - - - Removes the specified element from the set. - - The element to be removed. - if the set contained the specified element, otherwise. - - - - Remove all the specified elements from this set, if they exist in this set. - - A collection of elements to remove. - if the set was modified as a result of this operation. - - - - Retains only the elements in this set that are contained in the specified collection. - - Collection that defines the set of elements to be retained. - if this set changed as a result of this operation. - - - - Copies the elements in the Set to an array of T. The type of array needs - to be compatible with the objects in the Set, obviously. - - An array that will be the target of the copy operation. - The zero-based index where copying will start. - - - - Gets an enumerator for the elements in the Set. - - An IEnumerator over the elements in the Set. - - - - Copies the elements in the Set to an array. The type of array needs - to be compatible with the objects in the Set, obviously. Needed for - non-generic ISet methods implementation - - An array that will be the target of the copy operation. - The zero-based index where copying will start. - - - - The placeholder object used as the value for the IDictionary instance. - - - There is a single instance of this object globally, used for all Sets. - - - - - Returns if this set contains no elements. - - - - - The number of elements contained in this collection. - - - - - None of the objects based on DictionarySet are synchronized. Use the - SyncRoot property instead. - - - - - Returns an object that can be used to synchronize the Set between threads. - - - - - Indicates wether the Set is read-only or not - - - - - Implements a Set based on a Dictionary (which is equivalent of - non-genric HashTable) This will give the best lookup, add, and remove - performance for very large data-sets, but iteration will occur in no particular order. - - - - - Creates a new set instance based on a Dictinary. - - - - - Creates a new set instance based on a Dictinary and - initializes it based on a collection of elements. - - A collection of elements that defines the initial set contents. - - - -

            Implements an immutable (read-only) Set wrapper.

            -

            Although this is advertised as immutable, it really isn't. Anyone with access to the - basisSet can still change the data-set. So GetHashCode() is not implemented - for this Set, as is the case for all Set implementations in this library. - This design decision was based on the efficiency of not having to Clone() the - basisSet every time you wrap a mutable Set.

            -
            -
            - - - Constructs an immutable (read-only) Set wrapper. - - The Set that is wrapped. - - - - Adds the specified element to this set if it is not already present. - - The object to add to the set. - nothing - is always thrown - - - - Adds all the elements in the specified collection to the set if they are not already present. - - A collection of objects to add to the set. - nothing - is always thrown - - - - Removes all objects from the set. - - is always thrown - - - - Returns if this set contains the specified element. - - The element to look for. - if this set contains the specified element, otherwise. - - - - Returns if the set contains all the elements in the specified collection. - - A collection of objects. - if the set contains all the elements in the specified collection, otherwise. - - - - Removes the specified element from the set. - - The element to be removed. - nothing - is always thrown - - - - Remove all the specified elements from this set, if they exist in this set. - - A collection of elements to remove. - nothing - is always thrown - - - - Retains only the elements in this set that are contained in the specified collection. - - Collection that defines the set of elements to be retained. - nothing - is always thrown - - - - Copies the elements in the Set to an array of T. The type of array needs - to be compatible with the objects in the Set, obviously. - - An array that will be the target of the copy operation. - The zero-based index where copying will start. - - - - Gets an enumerator for the elements in the Set. - - An IEnumerator over the elements in the Set. - - - - Returns a clone of the Set instance. - - A clone of this object. - - - - Performs a "union" of the two sets, where all the elements - in both sets are present. That is, the element is included if it is in either a or b. - Neither this set nor the input set are modified during the operation. The return value - is a Clone() of this set with the extra elements added in. - - A collection of elements. - A new Set containing the union of this Set with the specified collection. - Neither of the input objects is modified by the union. - - - - Performs an "intersection" of the two sets, where only the elements - that are present in both sets remain. That is, the element is included if it exists in - both sets. The Intersect() operation does not modify the input sets. It returns - a Clone() of this set with the appropriate elements removed. - - A set of elements. - The intersection of this set with a. - - - - Performs a "minus" of set b from set a. This returns a set of all - the elements in set a, removing the elements that are also in set b. - The original sets are not modified during this operation. The result set is a Clone() - of this Set containing the elements from the operation. - - A set of elements. - A set containing the elements from this set with the elements in a removed. - - - - Performs an "exclusive-or" of the two sets, keeping only the elements that - are in one of the sets, but not in both. The original sets are not modified - during this operation. The result set is a Clone() of this set containing - the elements from the exclusive-or operation. - - A set of elements. - A set containing the result of a ^ b. - - - - Performs CopyTo when called trhough non-generic ISet (ICollection) interface - - - - - - - Performs Union when called trhough non-generic ISet interface - - - - - - - Performs Minus when called trhough non-generic ISet interface - - - - - - - Performs Intersect when called trhough non-generic ISet interface - - - - - - - Performs ExclusiveOr when called trhough non-generic ISet interface - - - - - - - Returns if this set contains no elements. - - - - - The number of elements contained in this collection. - - - - - Returns an object that can be used to synchronize use of the Set across threads. - - - - - Returns an object that can be used to synchronize the Set between threads. - - - - - Indicates that the given instance is read-only - - - - - Implements an ordered Set based on a dictionary. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - A collection of elements that defines the initial set contents. - - - - Implements a Set based on a sorted tree. This gives good performance for operations on very - large data-sets, though not as good - asymptotically - as a HashedSet. However, iteration - occurs in order. Elements that you put into this type of collection must implement IComparable, - and they must actually be comparable. You can't mix string and int values, for example. - - - - - Creates a new set instance based on a sorted tree. - - - - - Creates a new set instance based on a sorted tree. - - The to use for sorting. - - - - Creates a new set instance based on a sorted tree and - initializes it based on a collection of elements. - - A collection of elements that defines the initial set contents. - - - - Creates a new set instance based on a sorted tree and - initializes it based on a collection of elements. - - A collection of elements that defines the initial set contents. - - - - Creates a new set instance based on a sorted tree and - initializes it based on a collection of elements. - - A collection of elements that defines the initial set contents. - The to use for sorting. - - - -

            Implements a thread-safe Set wrapper. The implementation is extremely conservative, - serializing critical sections to prevent possible deadlocks, and locking on everything. - The one exception is for enumeration, which is inherently not thread-safe. For this, you - have to lock the SyncRoot object for the duration of the enumeration.

            -
            -
            - - - Constructs a thread-safe Set wrapper. - - The Set object that this object will wrap. - - - - Adds the specified element to this set if it is not already present. - - The object to add to the set. - is the object was added, if it was already present. - - - - Adds all the elements in the specified collection to the set if they are not already present. - - A collection of objects to add to the set. - is the set changed as a result of this operation, if not. - - - - Removes all objects from the set. - - - - - Returns if this set contains the specified element. - - The element to look for. - if this set contains the specified element, otherwise. - - - - Returns if the set contains all the elements in the specified collection. - - A collection of objects. - if the set contains all the elements in the specified collection, otherwise. - - - - Removes the specified element from the set. - - The element to be removed. - if the set contained the specified element, otherwise. - - - - Remove all the specified elements from this set, if they exist in this set. - - A collection of elements to remove. - if the set was modified as a result of this operation. - - - - Retains only the elements in this set that are contained in the specified collection. - - Collection that defines the set of elements to be retained. - if this set changed as a result of this operation. - - - - Copies the elements in the Set to an array. The type of array needs - to be compatible with the objects in the Set, obviously. - - An array that will be the target of the copy operation. - The zero-based index where copying will start. - - - - Enumeration is, by definition, not thread-safe. Use a lock on the SyncRoot - to synchronize the entire enumeration process. - - - - - - Returns a clone of the Set instance. - - A clone of this object. - - - - Performs CopyTo when called trhough non-generic ISet (ICollection) interface - - - - - - - Returns if this set contains no elements. - - - - - The number of elements contained in this collection. - - - - - Returns , indicating that this object is thread-safe. The exception to this - is enumeration, which is inherently not thread-safe. Use the SyncRoot object to - lock this object for the entire duration of the enumeration. - - - - - Returns an object that can be used to synchronize the Set between threads. - - - - - Indicates whether given instace is read-only or not - - - - -

            DictionarySet is an abstract class that supports the creation of new Set - types where the underlying data store is an IDictionary instance.

            - -

            You can use any object that implements the IDictionary interface to hold set data. - You can define your own, or you can use one of the objects provided in the Framework. - The type of IDictionary you choose will affect both the performance and the behavior - of the Set using it.

            - -

            To make a Set typed based on your own IDictionary, simply derive a - new class with a constructor that takes no parameters. Some Set implmentations - cannot be defined with a default constructor. If this is the case for your class, - you will need to override Clone() as well.

            - -

            It is also standard practice that at least one of your constructors takes an ICollection or - an ISet as an argument.

            -
            -
            - - A collection that contains no duplicate elements. - - - This class models the mathematical set abstraction, and is the base class for all - other set implementations. The order of elements in a set is dependant on - (a) the data-structure implementation, and (b) the implementation of the various - methods, and thus is not guaranteed. - - - None of the implementations in this library are guranteed to be thread-safe - in any way unless wrapped in a . - - - The following table summarizes the binary operators that are supported by the - type. - - - - Operation - Description - Method - Operator - - - Union (OR) - Element included in result if it exists in either A OR B. - Union() - | - - - Intersection (AND) - Element included in result if it exists in both A AND B. - InterSect() - & - - - Exclusive Or (XOR) - Element included in result if it exists in one, but not both, of A and B. - ExclusiveOr() - ^ - - - Minus (n/a) - Take all the elements in A. Now, if any of them exist in B, remove - them. Note that unlike the other operators, A - B is not the same as B - A. - Minus() - - - - - - - - - Performs a "union" of the two sets, where all the elements - in both sets are present. That is, the element is included if it is in either a or b. - Neither this set nor the input set are modified during the operation. The return value - is a clone of this set with the extra elements added in. - - A collection of elements. - A new instance containing the union of this instance with the specified collection. - Neither of the input objects is modified by the union. - - - - Performs a "union" of two sets, where all the elements - in both are present. That is, the element is included if it is in either a or b. - The return value is a clone of one of the sets (a if it is not ) with elements of the other set - added in. Neither of the input sets is modified by the operation. - - A set of elements. - A set of elements. - A set containing the union of the input sets. if both sets are . - - - - Performs a "union" of two sets, where all the elements - in both are present. That is, the element is included if it is in either a or b. - The return value is a clone of one of the sets (a if it is not ) with elements of the other set - added in. Neither of the input sets is modified by the operation. - - A set of elements. - A set of elements. - A set containing the union of the input sets. if both sets are . - - - - Performs an "intersection" of the two sets, where only the elements - that are present in both sets remain. That is, the element is included if it exists in - both sets. The Intersect() operation does not modify the input sets. It returns - a Clone() of this set with the appropriate elements removed. - - A set of elements. - The intersection of this set with a. - - - - Performs an "intersection" of the two sets, where only the elements - that are present in both sets remain. That is, the element is included only if it exists in - both a and b. Neither input object is modified by the operation. - The result object is a Clone() of one of the input objects (a if it is not ) containing the - elements from the intersect operation. - - A set of elements. - A set of elements. - The intersection of the two input sets. if both sets are . - - - - Performs an "intersection" of the two sets, where only the elements - that are present in both sets remain. That is, the element is included only if it exists in - both a and b. Neither input object is modified by the operation. - The result object is a Clone() of one of the input objects (a if it is not ) containing the - elements from the intersect operation. - - A set of elements. - A set of elements. - The intersection of the two input sets. if both sets are . - - - - Performs a "minus" of set b from set a. This returns a set of all - the elements in set a, removing the elements that are also in set b. - The original sets are not modified during this operation. The result set is a Clone() - of this Set containing the elements from the operation. - - A set of elements. - A set containing the elements from this set with the elements in a removed. - - - - Performs a "minus" of set b from set a. This returns a set of all - the elements in set a, removing the elements that are also in set b. - The original sets are not modified during this operation. The result set is a Clone() - of set a containing the elements from the operation. - - A set of elements. - A set of elements. - A set containing A - B elements. if a is . - - - - Performs a "minus" of set b from set a. This returns a set of all - the elements in set a, removing the elements that are also in set b. - The original sets are not modified during this operation. The result set is a Clone() - of set a containing the elements from the operation. - - A set of elements. - A set of elements. - A set containing A - B elements. if a is . - - - - Performs an "exclusive-or" of the two sets, keeping only the elements that - are in one of the sets, but not in both. The original sets are not modified - during this operation. The result set is a clone of this set containing - the elements from the exclusive-or operation. - - A set of elements. - A set containing the result of a ^ b. - - - - Performs an "exclusive-or" of the two sets, keeping only the elements that - are in one of the sets, but not in both. The original sets are not modified - during this operation. The result set is a clone of one of the sets - (a if it is not ) containing - the elements from the exclusive-or operation. - - A set of elements. - A set of elements. - A set containing the result of a ^ b. if both sets are . - - - - Performs an "exclusive-or" of the two sets, keeping only the elements that - are in one of the sets, but not in both. The original sets are not modified - during this operation. The result set is a clone of one of the sets - (a if it is not ) containing - the elements from the exclusive-or operation. - - A set of elements. - A set of elements. - A set containing the result of a ^ b. if both sets are . - - - - Adds the specified element to this set if it is not already present. - - The object to add to the set. - is the object was added, if it was already present. - - - - Adds all the elements in the specified collection to the set if they are not already present. - - A collection of objects to add to the set. - is the set changed as a result of this operation, if not. - - - - Removes all objects from the set. - - - - - Returns if this set contains the specified element. - - The element to look for. - if this set contains the specified element, otherwise. - - - - Returns if the set contains all the elements in the specified collection. - - A collection of objects. - if the set contains all the elements in the specified collection, otherwise. - - - - Removes the specified element from the set. - - The element to be removed. - if the set contained the specified element, otherwise. - - - - Remove all the specified elements from this set, if they exist in this set. - - A collection of elements to remove. - if the set was modified as a result of this operation. - - - - Retains only the elements in this set that are contained in the specified collection. - - Collection that defines the set of elements to be retained. - if this set changed as a result of this operation. - - - - Returns a clone of the set instance. This will work for derived set - classes if the derived class implements a constructor that takes no arguments. - - A clone of this object. - - - - Copies the elements in the set to an array. The type of array needs - to be compatible with the objects in the set, obviously. - - An array that will be the target of the copy operation. - The zero-based index where copying will start. - - - - Returns an enumerator that iterates through the set. - - - An object that can be used to iterate through the set. - - - - - Returns if this set contains no elements. - - - - - The number of elements currently contained in this collection. - - - - - Returns if the set is synchronized across threads. Note that - enumeration is inherently not thread-safe. Use the to lock the - object during enumeration. - - - - - An object that can be used to synchronize this collection to make it thread-safe. - When implementing this, if your object uses a base object, like an , - or anything that has a , return that object instead - of . - - - - - Provides the storage for elements in the Set, stored as the key-set - of the IDictionary object. Set this object in the constructor - if you create your own Set class. - - - - - Adds the specified element to this set if it is not already present. - - The object to add to the set. - is the object was added, if it was already present. - - - - Adds all the elements in the specified collection to the set if they are not already present. - - A collection of objects to add to the set. - is the set changed as a result of this operation, if not. - - - - Removes all objects from the set. - - - - - Returns if this set contains the specified element. - - The element to look for. - if this set contains the specified element, otherwise. - - - - Returns if the set contains all the elements in the specified collection. - - A collection of objects. - if the set contains all the elements in the specified collection, otherwise. - - - - Removes the specified element from the set. - - The element to be removed. - if the set contained the specified element, otherwise. - - - - Remove all the specified elements from this set, if they exist in this set. - - A collection of elements to remove. - if the set was modified as a result of this operation. - - - - Retains only the elements in this set that are contained in the specified collection. - - Collection that defines the set of elements to be retained. - if this set changed as a result of this operation. - - - - Copies the elements in the Set to an array. The type of array needs - to be compatible with the objects in the Set, obviously. - - An array that will be the target of the copy operation. - The zero-based index where copying will start. - - - - Gets an enumerator for the elements in the Set. - - An IEnumerator over the elements in the Set. - - - - The placeholder object used as the value for the IDictionary instance. - - - There is a single instance of this object globally, used for all Sets. - - - - - Returns if this set contains no elements. - - - - - The number of elements contained in this collection. - - - - - None of the objects based on DictionarySet are synchronized. Use the - SyncRoot property instead. - - - - - Returns an object that can be used to synchronize the Set between threads. - - - - - Implements a Set based on a hash table. This will give the best lookup, add, and remove - performance for very large data-sets, but iteration will occur in no particular order. - - - - - Creates a new set instance based on a hash table. - - - - - Creates a new set instance based on a hash table and - initializes it based on a collection of elements. - - A collection of elements that defines the initial set contents. - - - - Implements a Set that automatically changes from a list to a hash table - when the size reaches a certain threshold. This is good if you are unsure about - whether you data-set will be tiny or huge. Because this uses a dual implementation, - iteration order is not guaranteed! - - - - - Creates a new set instance based on either a list or a hash table, depending on which - will be more efficient based on the data-set size. - - - - - Creates a new set instance based on either a list or a hash table, depending on which - will be more efficient based on the data-set size, and - initializes it based on a collection of elements. - - A collection of elements that defines the initial set contents. - - - -

            Implements an immutable (read-only) Set wrapper.

            -

            Although this is advertised as immutable, it really isn't. Anyone with access to the - basisSet can still change the data-set. So GetHashCode() is not implemented - for this Set, as is the case for all Set implementations in this library. - This design decision was based on the efficiency of not having to Clone() the - basisSet every time you wrap a mutable Set.

            -
            -
            - - - Constructs an immutable (read-only) Set wrapper. - - The Set that is wrapped. - - - - Adds the specified element to this set if it is not already present. - - The object to add to the set. - is the object was added, if it was already present. - - - - Adds all the elements in the specified collection to the set if they are not already present. - - A collection of objects to add to the set. - is the set changed as a result of this operation, if not. - - - - Removes all objects from the set. - - - - - Returns if this set contains the specified element. - - The element to look for. - if this set contains the specified element, otherwise. - - - - Returns if the set contains all the elements in the specified collection. - - A collection of objects. - if the set contains all the elements in the specified collection, otherwise. - - - - Removes the specified element from the set. - - The element to be removed. - if the set contained the specified element, otherwise. - - - - Remove all the specified elements from this set, if they exist in this set. - - A collection of elements to remove. - if the set was modified as a result of this operation. - - - - Retains only the elements in this set that are contained in the specified collection. - - Collection that defines the set of elements to be retained. - if this set changed as a result of this operation. - - - - Copies the elements in the Set to an array. The type of array needs - to be compatible with the objects in the Set, obviously. - - An array that will be the target of the copy operation. - The zero-based index where copying will start. - - - - Gets an enumerator for the elements in the Set. - - An IEnumerator over the elements in the Set. - - - - Returns a clone of the Set instance. - - A clone of this object. - - - - Performs a "union" of the two sets, where all the elements - in both sets are present. That is, the element is included if it is in either a or b. - Neither this set nor the input set are modified during the operation. The return value - is a Clone() of this set with the extra elements added in. - - A collection of elements. - A new Set containing the union of this Set with the specified collection. - Neither of the input objects is modified by the union. - - - - Performs an "intersection" of the two sets, where only the elements - that are present in both sets remain. That is, the element is included if it exists in - both sets. The Intersect() operation does not modify the input sets. It returns - a Clone() of this set with the appropriate elements removed. - - A set of elements. - The intersection of this set with a. - - - - Performs a "minus" of set b from set a. This returns a set of all - the elements in set a, removing the elements that are also in set b. - The original sets are not modified during this operation. The result set is a Clone() - of this Set containing the elements from the operation. - - A set of elements. - A set containing the elements from this set with the elements in a removed. - - - - Performs an "exclusive-or" of the two sets, keeping only the elements that - are in one of the sets, but not in both. The original sets are not modified - during this operation. The result set is a Clone() of this set containing - the elements from the exclusive-or operation. - - A set of elements. - A set containing the result of a ^ b. - - - - Returns if this set contains no elements. - - - - - The number of elements contained in this collection. - - - - - Returns an object that can be used to synchronize use of the Set across threads. - - - - - Returns an object that can be used to synchronize the Set between threads. - - - - - Implements a Set based on a list. Performance is much better for very small lists - than either HashedSet or SortedSet. However, performance degrades rapidly as - the data-set gets bigger. Use a HybridSet instead if you are not sure your data-set - will always remain very small. Iteration produces elements in the order they were added. - However, element order is not guaranteed to be maintained by the various Set - mathematical operators. - - - - - Creates a new set instance based on a list. - - - - - Creates a new set instance based on a list and - initializes it based on a collection of elements. - - A collection of elements that defines the initial set contents. - - - - Implements a set based on a sorted tree. This gives good performance for operations on very - large data-sets, though not as good - asymptotically - as a . - However, iteration occurs in order. Elements that you put into this type of collection must - implement , and they must actually be comparable. You can't mix - and values, for example. - - - - - Creates a new set instance based on a sorted tree. - - - - - Creates a new set instance based on a sorted tree. - - The to use for sorting. - - - - Creates a new set instance based on a sorted tree and - initializes it based on a collection of elements. - - A collection of elements that defines the initial set contents. - - - - Creates a new set instance based on a sorted tree and - initializes it based on a collection of elements. - - A collection of elements that defines the initial set contents. - The to use for sorting. - - - - Implements a thread-safe wrapper. - - - The implementation is extremely conservative, serializing critical sections - to prevent possible deadlocks, and locking on everything. The one exception - is for enumeration, which is inherently not thread-safe. For this, you have - to the object for the duration - of the enumeration. - - - - - Constructs a thread-safe wrapper. - - The object that this object will wrap. - - - - Adds the specified element to this set if it is not already present. - - The object to add to the set. - is the object was added, if it was already present. - - - - Adds all the elements in the specified collection to the set if they are not already present. - - A collection of objects to add to the set. - is the set changed as a result of this operation, if not. - - - - Removes all objects from the set. - - - - - Returns if this set contains the specified element. - - The element to look for. - if this set contains the specified element, otherwise. - - - - Returns if the set contains all the elements in the specified collection. - - A collection of objects. - if the set contains all the elements in the specified collection, otherwise. - - - - Removes the specified element from the set. - - The element to be removed. - if the set contained the specified element, otherwise. - - - - Remove all the specified elements from this set, if they exist in this set. - - A collection of elements to remove. - if the set was modified as a result of this operation. - - - - Retains only the elements in this set that are contained in the specified collection. - - Collection that defines the set of elements to be retained. - if this set changed as a result of this operation. - - - - Copies the elements in the set to an array. The type of array needs - to be compatible with the objects in the set, obviously. - - An array that will be the target of the copy operation. - The zero-based index where copying will start. - - - - Returns an enumerator that iterates through the set. - - - An object that can be used to iterate through the set. - - - Enumeration is, by definition, not thread-safe. Use a on the - to synchronize the entire enumeration process. - - - - - Returns a clone of this instance. - - A clone of this object. - - - - Returns if this set contains no elements. - - - - - The number of elements contained in this collection. - - - - - Returns , indicating that this object is thread-safe. The exception to this - is enumeration, which is inherently not thread-safe. Use the object to - lock this object for the entire duration of the enumeration. - - - - - Returns an object that can be used to synchronize the set between threads. - - -
            -
            diff --git a/bin/Inflector.Net.dll b/bin/Inflector.Net.dll deleted file mode 100644 index 6a16680f8..000000000 Binary files a/bin/Inflector.Net.dll and /dev/null differ diff --git a/bin/MbUnit.dll b/bin/MbUnit.dll deleted file mode 100644 index 5361cb1e0..000000000 Binary files a/bin/MbUnit.dll and /dev/null differ diff --git a/bin/Microsoft.Practices.ServiceLocation.dll b/bin/Microsoft.Practices.ServiceLocation.dll deleted file mode 100644 index 3f8895473..000000000 Binary files a/bin/Microsoft.Practices.ServiceLocation.dll and /dev/null differ diff --git a/bin/Microsoft.Web.Mvc.dll b/bin/Microsoft.Web.Mvc.dll deleted file mode 100644 index 47009d75b..000000000 Binary files a/bin/Microsoft.Web.Mvc.dll and /dev/null differ diff --git a/bin/MvcContrib.Castle.dll b/bin/MvcContrib.Castle.dll deleted file mode 100644 index b68cc20a5..000000000 Binary files a/bin/MvcContrib.Castle.dll and /dev/null differ diff --git a/bin/MvcContrib.Castle.xml b/bin/MvcContrib.Castle.xml deleted file mode 100644 index 69c7b8639..000000000 --- a/bin/MvcContrib.Castle.xml +++ /dev/null @@ -1,183 +0,0 @@ - - - - MvcContrib.Castle - - - - - Parameter binder that uses the Castle DataBinder to bind action parameters. - Example: - - - - - - Creates a new CastleBind attribute with the specified parameter prefix. - The model will be bound from Request.Form. - - Prefix to use when extracting from the request store. - - - - Creates a new CastleBind attribute. The name of the parameter will be used as the request prefix. - The model will be bound from Request.Form - - - - - - - The requst store that should be used to bind the model - Prefix to use when extract - - - - Creates a new instance of the CastleBind attribute. The name of the parameter will be used as the request prefix. - - The requst store that should be used to bind the model - - - - Binds the model object using a castle IDataBinder - - - The current binding context - A ModelBinderResult containing the bound object - - - - Finds the binder to use. If the controller implements ICastleBindingContainer then its binder is used. Otherwise, a new DataBinder is created. - - - - - - Creates the binder to use. - - IDataBinder - - - - Properties to exclude from binding - - - - - Controllers that implement this interface will have access to the IDataBinder instance used by the CastleBinderAttribute. - - - - - The Binder that is used by the CastleBindAttribute to perform parameter binding. - - - - - Indicates the transaction support for a method. - This attribute is modeled after Castle's ATM: - http://www.castleproject.org/container/facilities/v1rc3/atm/index.html - - Castle ATM used DynamicProxy to wrap the Transaction methods. This causes problems with Parameter Binders because DynamicProxy does - not copy parameter attributes, a known bug (DYNPROXY-ISSUE-14) currently market as Won't Fix. (10/19/08) - - There is no Controller attribute for using the MvcTransactionAttribute, - simply mark the methods that you want transactioned with MvcTransaction - - [MvcTransaction] - public void ActionResult AddItem - { - //do work - } - - Thrown Exceptions will cause a rollback. At minimum you'll need to configure an ITransactionManager with the DependencyResolver. - For example with NHibernate and Rhino Tools this would go in your global.aspx.cs: - - Container.AddFacility("rhino_transaction", new RhinoTransactionFacility()); - DependencyResolver.InitializeWith(new WindsorDependencyResolver(Container)); - - - - - - Declares unspecified values for transaction and isolation, which - means that the transaction manager will use the default values - for them - - - - - Declares the transaction mode, but omits the isolation, - which means that the transaction manager should use the - default value for it. - - - - - - Declares both the transaction mode and isolation - desired for this method. The transaction manager should - obey the declaration. - - - - - - - Returns the - - - - - Returns the - - - - - Gets or sets a value indicating whether the transaction should be distributed. - - - true if a distributed transaction should be created; otherwise, false. - - - - - Controller Factory class for instantiating controllers using the Windsor IoC container. - - - - - Creates a new instance of the class. - - The Windsor container instance to use when creating controllers. - - - - An IModelBinder implementation that supports resolving binders via Windsor - - Configuration is much the same as the WindsorControllerFactory: - - container.Register(AllTypes.Of<IModelBinder>() - .FromAssembly(typeof(MyModelBinder).Assembly) - .Configure(c => c.LifeStyle.Singleton.Named(c.Implementation.Name.ToLower()))); - - - - - Creates a new instance of the WindsorModelBinder using the specified IWindsorContainer instance. - - The Windsor Container to use - - - - Creates a new instance of the WindsorModelBinder using the specified IWindsorContainer instance and the specified default binder - - The Windsor container to use - The default model binder to delegate to (if the binder cannot be found in Windsor) - - - diff --git a/bin/MvcContrib.FluentHtml.dll b/bin/MvcContrib.FluentHtml.dll deleted file mode 100644 index 99635d07a..000000000 Binary files a/bin/MvcContrib.FluentHtml.dll and /dev/null differ diff --git a/bin/MvcContrib.FluentHtml.xml b/bin/MvcContrib.FluentHtml.xml deleted file mode 100644 index 387311013..000000000 --- a/bin/MvcContrib.FluentHtml.xml +++ /dev/null @@ -1,1139 +0,0 @@ - - - - MvcContrib.FluentHtml - - - - - Used internally by the ValidationBehavior to handle ModelState values for a particular element type. - - - - - Marker interface indicating that a particular element supports the maxlength HTML attribute. - - - - - Generate an HTML input element of type 'button.' - - - - - Base class for HTML input element of type '.' - - - - - Base class for input elements. - - Derived class type. - - - - Base class for form elements. - - Derived type - - - - Base class for elements that are disablable. - - - - - - Base class for HTML elements. - - The derived class type. - - - - Interface for elements that are associated with a model member. - - - - - Interface for elements. - - - - - Set the value of the specified attribute. - - The name of the attribute. - The value of the attribute. - - - - Set the value of the specified attribute. - - The name of the attribute. - - - - Remove an attribute. - - The name of the attribute to remove. - - - - TagBuilder object used to generate HTML. - - - - - How the tag should be closed. - - - - - The text for the label rendered before the element. - - - - - The text for the label rendered after the element. - - - - - The class for labels rendered before or after the element. - - - - - - Set the 'id' attribute. - - The value of the 'id' attribute. - - - - Add a value to the 'class' attribute. - - The value of the class to add. - - - - Set the 'title' attribute. - - The value of the 'title' attribute. - - - - Set the 'style' attribute. - - A list of funcs, each epxressing a style name value pair. Replace dashes with - underscores in style names. For example 'margin-top:10px;' is expressed as 'margin_top => "10px"'. - - - - Set the 'onclick' attribute. - - The value for the attribute. - - - - - Set the value of a specified attribute. - - The name of the attribute. - The value of the attribute. - - - - Generate a label before the element. - - The inner text of the label. - The value of the 'class' attribute for the label. - - - - Generate a label before the element. - - The inner text of the label. - - - - Generate a label after the element. - - The inner text of the label. - The value of the 'class' attribute for the label. - - - - Generate a label after the element. - - The inner text of the label. - - - - TagBuilder object used to generate HTML for elements. - - - - - Set the disabled attribute. - - Whether the element should be disabled. - - - - If no label before has been explicitly set, set the label before using the element name. - - - - - If no label after has been explicitly set, set the label after using the element name. - - - - - If no label has been explicitly set, set the label using the element name. - - - - - If no label before has been explicitly set, set the label before using the element name. - - - - - Determines how the HTML element is closed. - - - - - Set the 'value' attribute. - - The value for the attribute. - - - - Set the 'size' attribute. - - The value for the attribute. - - - - Generate an HTML input element of type 'button.' - - Value of the 'value' and 'name' attributes. Also used to derive the 'id' attribute. - - - - Generate an HTML input element of type 'button.' - - Value of the 'value' and 'name' attributes. Also used to derive the 'id' attribute. - Behaviors to apply to the element. - - - - Generate an HTML input element of type 'checkbox.' - - - - - Base class for HTML input element of type 'checkbox.' - - - - - Set the checked attribute. - - Whether the checkbox should be checked. - - - - Generate an HTML input element of type 'checkbox.' - - Value used to set the 'name' an 'id' attributes of the element - - - - Generate an HTML input element of type 'checkbox.' - - Value of the 'name' attribute of the element. Also used to derive the 'id' attribute. - Expression indicating the view model member assocaited with the element. - Behaviors to apply to the element. - - - - A list of checkboxes buttons. - - - - - Base class for a list of checkboxes. - - - - - The selected values. - - - - - Set the selected values. - - Values matching the values of options to be selected. - - - - Specify a format string for the HTML of each checkbox button and label. - - A format string. - - - - Specify the class for the input and label elements of each item. - - A format string. - - - - Generate a label (provides no visual difference, but can be tied to an input element to help with naviagation). - - - - - Set the inner text of the span element. - - The value of the inner text. - - - - Specify a format string to be applied to the value. The format string can be either a - specification (e.g., '$#,##0.00') or a placeholder (e.g., '{0:$#,##0.00}'). - - A format string. - - - - Generates a label element. - - Value to be used for the 'for' attribute of the element. Should be the 'id' of the input element this label is for. - Expression indicating the view model member assocaited with the element. - Behaviors to apply to the element. - - - - Generates a label element. - - Value to be used for the 'for' attribute of the element. Should be the 'id' of the input element this label is for. - - - - Generates a label element. - - - - - Generate an HTML input element of type 'Reset.' - - - - - Base class for HTML input element of type 'Reset.' - - - - - Generate an HTML input element of type 'Reset.' - - Value of the 'value' and 'name' attributes. Also used to derive the 'id' attribute. - - - - Generate an HTML input element of type 'Reset.' - - Value of the 'value' and 'name' attributes. Also used to derive the 'id' attribute. - Behaviors to apply to the element. - - - - Generates an HTML input element of type 'hidden.' - - - - - Generates an HTML input element of type 'hidden.' - - - - - Base class for text input elements. - - The derived type - - - - Set the 'maxlength' attribute. - - Value for the maxlength attribute. - - - - Specify a format string to be applied to the value. The format string can be either a - specification (e.g., '$#,##0.00') or a placeholder (e.g., '{0:$#,##0.00}'). - - A format string. - - - - Generates an HTML input element of type 'hidden.' - - Value of the 'name' attribute of the element. Also used to derive the 'id' attribute. - - - - Generates an HTML input element of type 'hidden.' - - Value of the 'name' attribute of the element. Also used to derive the 'id' attribute. - Expression indicating the model member assocaited with the element. - Behaviors to apply to the element. - - - - Generates an HTML input element of type 'hidden' with '.Index" appended to the name. - - Base value of the 'name' attribute of the element. Also used to derive the 'id' attribute. - - - - Generates an HTML input element of type 'hidden' with '.Index" appended to the name. - - Base value of the 'name' attribute of the element. Also used to derive the 'id' attribute. - Expression indicating the model member assocaited with the element. - Behaviors to apply to the element. - - - - Generates an input element of type 'file.' - - - - - Generates an input element of type 'file.' - - Value of the 'name' attribute of the element. Also used to derive the 'id' attribute. - - - - Generates an input element of type 'file.' - - Value of the 'name' attribute of the element. Also used to derive the 'id' attribute. - Behaviors to apply to the element. - - - - Generates a literal element (span) accompanied by a hidden input element having the same value. Use this - if you want to display a value and also have that same value be included in the form post. - - - - - Base class to generate a literal element (span) accompanied by a hidden input element having the same - value. Use this if you want to display a value and also have that same value be included in the form post. - - - - - Generates a literal element (span) accompanied by a hidden input element having the same value. Use - this if you want to display a value and also have that same value be included in the form post. - - Value of the 'name' attribute of the element. Also used to derive the 'id' attribute. - Expression indicating the view model member assocaited with the element - Behaviors to apply to the element - - - - Generates a literal element (span) accompanied by a hidden input element having the same value. Use - this if you want to display a value and also have that same value be included in the form post. - - Value used to set the 'name' an 'id' attributes of the element. - - - - Base class for a literal (text inside a span element). - - - - - Set the inner text of the span element. - - The value of the inner text. - - - - Specify a format string to be applied to the value. The format string can be either a - specification (e.g., '$#,##0.00') or a placeholder (e.g., '{0:$#,##0.00}'). - - A format string. - - - - A radio button. - - - - - Base class for a radio button. - - - - - Set the checked attribute. - - Whether the radio button should be checked. - - - - Specify a format string for the HTML output. - - A format string. - - - - A set of radio buttons. - - - - - Base class for a set of radio buttons. - - - - - Set the selected option. - - A value matching the option to be selected. - - - - - Specify a format string for the HTML of each radio button and label. - - A format string. - - - - Specify the class for the input and label elements of each item. - - A format string. - - - - Adds an error to the current model state. - - The view model your view is using. - The current model state. - An expression specifying the property on the view model to add an error for. - The error message you're adding for the specified property. - - - - Adds an error to the current model state. - - The view model your view is using. - The current model state. - An expression specifying the property on the view model to add an error for. - The exception you're adding for the specified property. - - - - Converts pascal case string into a phrase. Treats consecutive capital - letters as a word. For example, 'HasABCDAcronym' would be tranformed to - 'Has ABCD Acronym' - - A string containing pascal case words - - - - Base class for HTML input element of type 'submit.' - - - - - base class for an HTML textarea element. - - - - - Set the inner text. - - The value of the inner text. - - - - - Set the 'columns' attribute. - - The value of the columns attribute. - - - - Specify a format string to be applied to the value. The format string can be either a - specification (e.g., '$#,##0.00') or a placeholder (e.g., '{0:$#,##0.00}'). - - A format string. - - - - Generate a validation message (text inside a span element). - - - - - Generate a literal (text inside a span element). - - - - - Generates a literal element (span). - - The name of the element. - Expression indicating the view model member assocaited with the element - Behaviors to apply to the element - - - - Generates a literal element (span). - - The name of the element. - - - - Generate a select HTML element with multiselect attribute = 'true.' - - - - - Base class for select elements. - - The derived type. - - - - Set the 'size' attribute. - - The value of the 'size' attribute. - - - - - Generate a select HTML element with multiselect attribute = 'true.' - - Value of the 'name' attribute of the element. Also used to derive the 'id' attribute. - - - - Generate a select HTML element with multiselect attribute = 'true' - - Value of the 'name' attribute of the element. Also used to derive the 'id' attribute. - Expression indicating the view model member assocaited with the element - Behaviors to apply to the element - - - - Set the selected values. - - Values matching the values of options to be selected. - - - - Generate a select HTML element with multiselect attribute = 'true.' - - - - - Generate a select HTML element with multiselect attribute = 'true.' - - Value of the 'name' attribute of the element. Also used to derive the 'id' attribute. - - - - Generate a select HTML element with multiselect attribute = 'true' - - Value of the 'name' attribute of the element. Also used to derive the 'id' attribute. - Expression indicating the view model member assocaited with the element - Behaviors to apply to the element - - - - Set the selected values. - - Values matching the values of options to be selected. - - - - Generate a select option. - - - - - Generate a select option. - - - - - Set the value of the 'value' attribute. - - The value. - - - - Set the inner text. - - The value of the inner text. - - - - Set the selected attribute. - - Whether the option should be selected. - - - - Set as disabled or enabled. - - Whether the option is disabled. - - - - Generate an HTML input element of type 'password.' - - - - - Generate an HTML input element of type 'password.' - - Value of the 'name' attribute of the element. Also used to derive the 'id' attribute. - - - - Generate an HTML input element of type 'password.' - - Value of the 'name' attribute of the element. Also used to derive the 'id' attribute. - Expression indicating the model member assocaited with the element. - Behaviors to apply to the element. - - - - Generate and HTML select element. - - - - - Generate an HTML select element. - - Value of the 'name' attribute of the element. Also used to derive the 'id' attribute. - - - - Generate an HTML select element. - - Value of the 'name' attribute of the element. Also used to derive the 'id' attribute. - Expression indicating the model member assocaited with the element. - Behaviors to apply to the element. - - - - Set the selected option. - - A value matching the option to be selected. - - - - - Generate and HTML select element. - - - - - Generate an HTML select element. - - Value of the 'name' attribute of the element. Also used to derive the 'id' attribute. - - - - Generate an HTML select element. - - Value of the 'name' attribute of the element. Also used to derive the 'id' attribute. - Expression indicating the model member assocaited with the element. - Behaviors to apply to the element. - - - - Set the selected option. - - A value matching the option to be selected. - - - - - Generate an HTML input element of type 'submit.' - - - - - Generate an HTML input element of type 'submit.' - - Value of the 'value' and 'name' attributes. Also used to derive the 'id' attribute. - - - - Generate an HTML input element of type 'submit.' - - Value of the 'value' and 'name' attributes. Also used to derive the 'id' attribute. - Behaviors to apply to the element. - - - - Generate an HTML textarea element. - - Value of the 'name' attribute of the element. Also used to derive the 'id' attribute. - - - - Generate an HTML textarea element. - - Value of the 'name' attribute of the element. Also used to derive the 'id' attribute. - Expression indicating the view model member assocaited with the element - Behaviors to apply to the element - - - - Generate an HTML input element of type 'text.' - - - - - Generate an HTML input element of type 'text.' - - Value of the 'name' attribute of the element. Also used to derive the 'id' attribute. - - - - Generate an HTML input element of type 'text.' - - Value of the 'name' attribute of the element. Also used to derive the 'id' attribute. - Expression indicating the view model member assocaited with the element - Behaviors to apply to the element - - - - Extensions to IViewDataContainer - - - - - Generate an HTML input element of type 'text' and set its value from ViewData based on the name provided. - - The view. - Value of the 'name' attribute of the element. Also used to derive the 'id' attribute. - - - - Generate an HTML input element of type 'password' and set its value from ViewData based on the name provided. - - The view. - Value of the 'name' attribute of the element. Also used to derive the 'id' attribute. - - - - Generate an HTML select element and set its selected value from ViewData based on the name provided. - - The view. - Value of the 'name' attribute of the element. Also used to derive the 'id' attribute. - - - - Generate an HTML select element with a multiselect attribute = 'true' and set its selected - values from ViewData based on the name provided. - - The view. - Value of the 'name' attribute of the element. Also used to derive the 'id' attribute. - - - - Generate an HTML input element of type 'hidden' and set its value from ViewData based on the name provided. - - The view. - Value of the 'name' attribute of the element. Also used to derive the 'id' attribute. - - - - Generate an HTML textarea element and set the value from ViewData. - - The view. - Value of the 'name' attribute of the element. Also used to derive the 'id' attribute. - - - - Generate an HTML input element of type 'checkbox' and set checked from ViewData based on the name provided. - The checkbox element has an accompanying input element of type 'hidden' to support binding upon form post. - - The view. - Value of the 'name' attribute of the element. Also used to derive the 'id' attribute. - - - - Generate a list of HTML input elements of type 'checkbox' and set its value from the ViewModel based on the expression provided. - Each checkbox element has an accompanying input element of type 'hidden' to support binding upon form post. - - The view. - Value of the 'name' attribute of the element. Also used to derive the 'id' attribute. - - - - Generate an HTML input element of type 'submit.' - - The view. - Value of the 'value' and 'name' attributes. Also used to derive the 'id' attribute. - - - - Generate an HTML input element of type 'button.' - - The view. - Value of the 'value' and 'name' attributes. Also used to derive the 'id' attribute. - - - - Generate an HTML input element of type 'reset.' - - The view. - Value of the 'value' and 'name' attributes. Also used to derive the 'id' attribute. - - - - Generate an HTML label element; - - The view. - The id of the target element to point to in the 'for' attribute. - - - - Generate an HTML span element. - - The view. - The inner text. - - - - Generate an HTML span element. - - The view. - The name of the element. - The inner text. - - - - Generate an HTML span element and an HTML input element of type 'hidden' and set the inner text - of the span and the value of the hidden input element from ViewData based on the specified name. - - The view. - Value of the 'name' attribute of the element. Also used to derive the 'id' attribute. - - - - Generate an HTML input element of type 'file' and set its value from ViewData based on the name provided. - - The view. - Value of the 'name' attribute of the element. Also used to derive the 'id' attribute. - - - - Generate an HTML input element of type 'radio.' - - The view. - Value of the 'name' attribute of the of the input elements. Also used to derive the 'id' attributes. - - - - Generate a set of HTML input elements of type 'radio' -- each wrapped inside a label. The whole thing is wrapped in an HTML - div element. The values of the input elements and he label text are taken from the options specified. - - The view. - Value of the 'name' attribute of the of the input elements. Also used to derive the 'id' attributes. - - - - Extensions of IViewModelContainer<T> - - - - - Generate an HTML input element of type 'text' and set its value from the ViewModel based on the expression provided. - - The type of the ViewModel. - The view. - Expression indicating the ViewModel member associated with the element. - - - - Generate an HTML input element of type 'password' and set its value from the ViewModel based on the expression provided. - - The type of the ViewModel. - The view. - Expression indicating the ViewModel member associated with the element. - - - - Generate an HTML input element of type 'hidden' and set its value from the ViewModel based on the expression provided. - - The type of the ViewModel. - The view. - Expression indicating the ViewModel member associated with the element. - - - - Generate an HTML input element of type 'checkbox' and set its value from the ViewModel based on the expression provided. - The checkbox element has an accompanying input element of type 'hidden' to support binding upon form post. - - The type of the ViewModel. - The view. - Expression indicating the ViewModel member associated with the element. - - - - Generate a list of HTML input elements of type 'checkbox' and set its value from the ViewModel based on the expression provided. - Each checkbox element has an accompanying input element of type 'hidden' to support binding upon form post. - - The type of the ViewModel. - The view. - Expression indicating the ViewModel member associated with the element. - - - - Generate an HTML textarea element and set its value from the ViewModel based on the expression provided. - - The type of the ViewModel. - The view. - Expression indicating the ViewModel member associated with the element. - - - - Generate an HTML select element and set the selected option value from the ViewModel based on the expression provided. - - The type of the ViewModel. - The view. - Expression indicating the ViewModel member associated with the element. - - - - Generate an HTML select element and set the selected options from the ViewModel based on the expression provided. - - The type of the ViewModel. - The view. - Expression indicating the ViewModel member associated with the element. - - - - Generate an HTML label element, point its "for" attribute to the input element from the provided expression, and set its inner text from the ViewModel based on the expression provided. - - The type of the ViewModel. - The view. - Expression indicating the ViewModel member that has an input element associated with it. - - - - Generate an HTML span element and set its inner text from the ViewModel based on the expression provided. - - The type of the ViewModel. - The view. - Expression indicating the ViewModel member associated with the element. - - - - Generate an HTML span element and hidden input element. Set the inner text of the span element and the value - of the hidden input element from the ViewModel based on the expression provided. - - The type of the ViewModel. - The view. - Expression indicating the ViewModel member associated with the element. - - - - Generate an HTML input element of type 'radio'. - - The type of the ViewModel. - The view. - Expression indicating the ViewModel member associated with the element. - - - - Generate a set of HTML input elements of type 'radio' -- each wrapped inside a label. The whole thing is wrapped in an HTML - div element. The values of the input elements and he label text are taken from the options specified. - - The type of the ViewModel. - The view. - Expression indicating the ViewModel member associated with the element. - - - - If ModelState contains an error for the specified view model member, generate an HTML span element with the - ModelState error message is the specified message is null. If no class is specified the class attribute - of the span element will be 'field-validation-error'. - - The type of the ViewModel. - The view. - Expression indicating the ViewModel member associated with the element. - - - - If ModelState contains an error for the specified view model member, generate an HTML span element with the - specified message as inner text, or with the ModelState error message if the specified message is null. If no - class is specified the class attribute of the span element will be 'field-validation-error'. - - The type of the ViewModel. - The view. - Expression indicating the ViewModel member associated with the element. - The error message. - - - - Generate an HTML input element of type 'hidden,' set it's name from the expression with '.Index' appended. - - The type of the ViewModel. - The view. - Expression indicating the ViewModel member to use to derive the 'name' attribute. - - - - Generate an HTML input element of type 'hidden,' set it's name from the expression with '.Index' appended - and set its value from the ViewModel from the valueExpression provided. - - The type of the ViewModel. - The view. - Expression indicating the ViewModel member to use to derive the 'name' attribute. - Expression indicating the ViewModel member to use to get the value of the element. - - - - Returns a name to match the value for the HTML name attribute form elements using the same expression. - - The type of the ViewModel. - The view. - Expression indicating the ViewModel member. - - - - Returns a name to match the value for the HTML id attribute form elements using the same expression. - - The type of the ViewModel. - The view. - Expression indicating the ViewModel member. - - - - Generate an HTML input element of type 'submit.' - - The view. - Value of the 'value' and 'name' attributes. Also used to derive the 'id' attribute. - - - diff --git a/bin/MvcContrib.ModelAttributes.dll b/bin/MvcContrib.ModelAttributes.dll deleted file mode 100644 index 944de7924..000000000 Binary files a/bin/MvcContrib.ModelAttributes.dll and /dev/null differ diff --git a/bin/MvcContrib.TestHelper.XML b/bin/MvcContrib.TestHelper.XML deleted file mode 100644 index aab3ff08b..000000000 --- a/bin/MvcContrib.TestHelper.XML +++ /dev/null @@ -1,545 +0,0 @@ - - - - MvcContrib.TestHelper - - - - - Exception that is thrown when a ActionResult assertion fails. - - - - - Creates a new instance of the class. - - Message thrown in the exception. - - - - Contains extension methods for testing action results. - - - - - Asserts that the ActionResult is of the specified type. - - Type of action result to convert to. - Action Result to convert. - - - - - Asserts that the action result is a RenderViewResult. - - The result to convert. - - - - - Asserts that the action result is a RenderPartialViewResult - - The result to convert - - - - - Asserts that the action result is a HttpRedirectResult. - - The result to convert. - - - - - Asserts that the action result is an ActionRedirectResult. - - The result to convert. - - - - - Asserts that an ActionRedirectResult is for the specified controller. - - The result to check. - The name of the controller. - - - - - Asserts that an ActionRedirectReslt is for the specified action. - - The result to check. - The name of the action. - - - - - Asserts that an ActionRedirectResult is for the specified action on the specified controller - - The type of the controller. - The result to check. - The action to call on the controller. - - - - - Asserts that an ActionRedirectResult contains a specified value in its RouteValueCollection. - - The result to check. - The name of the parameter to check for. - The expected value. - - - - - Gets a parameter from a RedirectToRouteResult. - - The result to check. - The controller that you redirected FROM. - The name of the parameter to check for. - - - - - Asserts that a RenderViewResult is rendering the specified view. - - The result to check. - The name of the view. - - - - - Asserts that a RenderPartialViewResult is rendering the specified partial view - - The result to check - The name of the partial view - - - - - Asserts that a HttpRedirectResult is redirecting to the specified URL. - - The result to check - The URL that the result should be redirecting to. - - - - - Asserts that a RenderViewResult's value has been set using a strongly typed value, returning that value if successful. - If the type is a reference type, a view data set to null will be returned as null. - If the type is a value type, a view data set to null will throw an exception. - - The custom type for the view data. - The result to check. - The ViewData in it's strongly-typed form. - - - - Asserts that a RenderViewResult's value has been set using a strongly typed value, returning that value if successful. - If the type is a reference type, a view data set to null will be returned as null. - If the type is a value type, a view data set to null will throw an exception. - - The custom type for the view data. - The result to check. - The ViewData in it's strongly-typed form. - - - - This exception is thrown by the TestHelper extension methods. This allows this project to be unit test framework agnostic. - - - - - Contains basic extension methods to simplify testing. - - - - - Asserts that the object is of type T. Also returns T to enable method chaining. - - - - Message to display when assertion fails - - - - - Asserts that the object is the expected value. - - - - - - - Compares the two strings (case-insensitive). - - - - - - - Asserts that the object should not be null. - - - - - - - - Asserts that two objects are equal. - - - - - - - - - Initializes a new instance of the class. - - - - - Adds the specified name. - - The name. - The value. - - - - Clears this instance. - - - - - Removes the specified name. - - The name. - - - - Removes all. - - - - - Removes an object at the index. - - The index. - - - - Copies the elements of the to an , starting at a particular index. - - The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing. - The zero-based index in at which copying begins. - - is null. - - is less than zero. - - is multidimensional.-or- is equal to or greater than the length of .-or- The number of elements in the source is greater than the available space from to the end of the destination . - The type of the source cannot be cast automatically to the type of the destination . - - - - Not Implemented - - - - - Gets the contents. - - The contents. - - - - Gets or sets the with the specified name. - - - - - - Gets or sets the at the specified index. - - - - - - Gets the number of elements contained in the . - - - The number of elements contained in the . - - - - Gets a value indicating whether access to the is synchronized (thread safe). - - - true if access to the is synchronized (thread safe); otherwise, false. - - - - Gets an object that can be used to synchronize access to the . - - - An object that can be used to synchronize access to the . - - - - Not Implemented - - - - - Not Implemented - - - - - Not Implemented - - - - - Not Implemented - - - - - Not Implemented - - - - - Not Implemented - - - - - Not Implemented - - - - - Not Implemented - - - - - Not Implemented - - - - - Not Implemented - - - - - Not Implemented - - - - - Used to simplify testing routes. - - - - - Returns the corresponding route for the URL. Returns null if no route was found. - - The app relative url to test. - A matching , or null. - - - - Asserts that the route matches the expression specified. Checks controller, action, and any method arguments - into the action as route values. - - The controller. - The routeData to check - The action to call on TController. - - - - Converts the URL to matching RouteData and verifies that it will match a route with the values specified by the expression. - - The type of controller - The ~/ based url - The expression that defines what action gets called (and with which parameters) - - - - - Verifies the routeData maps to the controller type specified. - - - - - - - - Verifies the routeData will instruct the routing engine to ignore the route. - - - - - - - Gets a value from the by key. Does a - case-insensitive search on the keys. - - - - - - - - This is primary class used to create controllers. - After initializing, call InitializeController to create a controller with proper environment elements. - Exposed properties such as Form, QueryString, and HttpContext allow access to text environment. - RenderViewData and RedirectToActionData record those methods - - - - - Initializes a new instance of the class. - - - - - Creates the controller with proper environment variables setup. - - The controller to initialize - - - - Creates the controller with proper environment variables setup. - - The type of controller to create - Arguments to pass to the constructor for the controller - A new controller of the specified type - - - - Creates the controller with proper environment variables setup, using IoC for arguments - - The type of controller to create - A new controller of the specified type - - - - Gets the HttpContext that built controllers will have set internally when created with InitializeController - - The HTTPContext - - - - Gets the HttpPostedFiles that controllers will have set internally when created with InitializeController - - The HttpFileCollection Files - - - - Gets the Form data that built controllers will have set internally when created with InitializeController - - The NameValueCollection Form - - - - Gets the QueryString that built controllers will have set internally when created with InitializeController - - The NameValueCollection QueryString - - - - Gets or sets the AcceptTypes property of Request that built controllers will have set internally when created with InitializeController - - - - - Gets the Session that built controllers will have set internally when created with InitializeController - - The IHttpSessionState Session - - - - Gets the TempDataDictionary that built controllers will have set internally when created with InitializeController - - The TempDataDictionary - - - - Gets or sets the RouteData that built controllers will have set internally when created with InitializeController - - The RouteData - - - - Gets or sets the AppRelativeCurrentExecutionFilePath that built controllers will have set internally when created with InitializeController - - The RouteData - - - - Gets or sets the AppRelativeCurrentExecutionFilePath string that built controllers will have set internally when created with InitializeController - - The ApplicationPath string - - - - Gets or sets the PathInfo string that built controllers will have set internally when created with InitializeController - - The PathInfo string - - - - Gets or sets the RawUrl string that built controllers will have set internally when created with InitializeController - - The RawUrl string - - - - Defines an extended which allows modifications to assist with testing. - - - Using this interface allows us to work around that fact that the indexers on - are read only and cannot be changed by overrides. - - - - - Gets or sets the with the specified name. - - - - - An implementation of HttpFileCollectionBase to assit with testing. - - - - - Initializes a new instance of the class. - - - - - Gets a string array containing the keys (names) of all members in the file collection. - - An array of file names. - - - - Gets the object with the specified name from the file collection. - - Name of item to be returned. - The System.Web.HttpPostedFile specified by name. - - - - Gets or sets the with the specified name. - - - - diff --git a/bin/MvcContrib.TestHelper.dll b/bin/MvcContrib.TestHelper.dll deleted file mode 100644 index faff5f55a..000000000 Binary files a/bin/MvcContrib.TestHelper.dll and /dev/null differ diff --git a/bin/MvcContrib.XML b/bin/MvcContrib.XML deleted file mode 100644 index 84981ad10..000000000 --- a/bin/MvcContrib.XML +++ /dev/null @@ -1,2362 +0,0 @@ - - - - MvcContrib - - - - - Action result that serializes the specified object into XML and outputs it to the response stream. - - people = _peopleService.GetPeople(); - return new XmlResult(people); - } - ]]> - - - - - - Creates a new instance of the XmlResult class. - - The object to serialize to XML. - - - - Serialises the object that was passed into the constructor to XML and writes the corresponding XML to the result stream. - - The controller context for the current request. - - - - The object to be serialized to XML. - - - - - Sets paramter values from Request.QueryString - - - - - Sets parameter values from Request.Form - - - - - Sets parameter values from all of the above locations in the above order - If a parameter value is found in more than one location, they will be returned in comma separated form in the above order - e.g. QueryString = 4, Form = 6 "4,6" - - - - - Sets parameter values from Controller.TempData only - - - - - Sets parameter values from all fo the above locations in the above order - If a parameter value is found in more than one location, they will be returned in comma separated form in the above order - e.g. QueryString = 4, Form = 6, TempData = 2, RouteData = 1 "4,6,3,2" - - - - - Ensures that an action is not executed unless it is accessed through an HTTP GET. - - - - - Ensures that the action decorated by this attribute is only valid if the HTTP method is a GET. - - The current controller context - The current action method - True if the action is being accessed via an HTTP GET - - - - Ensures that an action is not executed unless it is accessed through an HTTP POST. - - - - - Ensures that the action decorated by this attribute is only valid if the HTTP method is a POST. - - The current controller context - The current action method - True if the action is being accessed via an HTTP POST - - - - Binder that creates SubControllers that are needed for an action method - - - - - Creates the subcontroller given its type. Override this method to wire into an IoC container - - The type of subcontroller - an object instance - - - - Extension methods on IEnumerable. - - - - - Converts the source sequence into an IEnumerable of SelectListItem - - Source sequence - Lambda that specifies the name for the SelectList items - Lambda that specifies the value for the SelectList items - IEnumerable of SelectListItem - - - - Converts the source sequence into an IEnumerable of SelectListItem - - Source sequence - Lambda that specifies the name for the SelectList items - Lambda that specifies the value for the SelectList items - Those items that should be selected - IEnumerable of SelectListItem - - - - Converts the source sequence into an IEnumerable of SelectListItem - - Source sequence - Lambda that specifies the name for the SelectList items - Lambda that specifies the value for the SelectList items - Lambda that specifies whether the item should be selected - IEnumerable of SelectListItem - - - - Decorates a controller class to denote the default layout for all actions on the controller. - Use: define a layout at the class level (without an extension) and omit the layout from each return View() call. - This will override the masterName selection from your individual actions. To override this attribute at the action level, - apply the attribute to that action. - - To specify no layout, use [Layout(null)] or [Layout("")]. - - - - - Creates a LayoutAttribute. - - The default layout to use. Do not specify the extension. - - - - Captures the result executing to inject a default layout. - - - - - - The default layout. Do not specify the extension. - - - - - When a RedirectToRouteResult is returned from an action, anything in the ViewData.ModelState dictionary will be copied into TempData. - When a ViewResult is returned from an action, any ModelState entries that were previously copied to TempData will be copied back to the ModelState dictionary. - - - - - When a RedirectToRouteResult is returned from an action, anything in the ViewData.ModelState dictionary will be copied into TempData. - When a ViewResult is returned from an action, any ModelState entries that were previously copied to TempData will be copied back to the ModelState dictionary. - - - - - - When placed on a controller or action, this attribute will ensure - that parameters passed into RedirectToAction<T>() will get - passed to the controller or action that this attribute is placed on. - - - - - Filter attribute for handling errors. - When an error occurs, the RescueAttribute will first search for a view that matches the exception name, - then render the specified view if no matching exception view is found. - The rescue attribute can be limited to certain exception types. - - - - - - - - - - Creates a new instance of the RescueAttribute class. - - The name of the view to render when an exception is thrown if no matching view is found. - - - - Creates a new instance of the RescueAttribute class. - - The name of the view to render when an exception is thrown if no matching view is found. - The types of exception that this attribute will be restricted in catching. - - - - After the action has been executed, the Rescue will be invoked if the filterContext has an Exception. - - The current filter context. - - - - Determines if the view exists. Override in an inherited class to implement a custom view finding scheme. - - The type of exception that was thrown. - The current controllercontext. - True if the view is found, otherwise false. - - - - Creates the ViewContext to be used when rendering the rescue. - - The exception which will become the ViewData. - The current controllercpontext. - A ViewContext object. - - - - The view to render. - - - - - The exception types used by this rescue. - - - - - When false, only the specified rescue will be called. - When true, rescues with a name matching the exception will be called. - - - - - When true, ajax calls are not rescued (default). - When false, rescue will handle ajax calls. - - - - - Collection of exception types to be explicitly ignored. - - - - - Static class containing extension methods for controllers - - - - - Redirects to an action on the same controller using expression-based syntax - - The type of the controller on which to call the action - The instance of the controller of type which provides access to this method - An expression which identifies the action to redirect to on the controller of type - A pointing to the action specified by the expression - - - - Redirects to an action on the same or another controller using expression-based syntax - - The type of the controller on which to call the action - The instance of the controller which provides access to this method - An expression which identifies the action to redirect to on the controller of type - A pointing to the action specified by the expression - - - - The ExpressionHelper.GetRouteValuesFromExpression() method in MVC Futures will - put all parameters from the lambda expression into the route value dictionary, - but if the parameter is a reference type, that doesn't make sense and leads to - URLs like http://mysite.com/account/add?model=MyProject.AccountViewModel and - extraneous errors in ModelState. So we'll strip out those reference types - in here. - - If you really wanted to have a reference type in the route value dictionary, - you should override ToString() in the object and have it return something - meaningful that could be added to the route value dictionary. If you do that, - this method will see the route value as a string and will not strip it out. - - - - - - Determines whether the specified type is a controller - - Type to check - True if type is a controller, otherwise false - - - Troy DeMonbreun - - This is an action attribute base class that defines a required RouteData or Request parameter - "precondition" for the action. On precondition failure, the specified Exception type will be thrown. - More info here. - - - - Troy DeMonbreun - - This is an action attribute that defines (via a predicate method) a required RouteData or Request - parameter "precondition" for the action. On precondition failure, the specified Exception type will be thrown. - More info here. - - - - [PredicatePreconditionFilter("id", PreconditionFilter.ParamType.RouteData, "IsGreaterThanZero", typeof(ArgumentOutOfRangeException))] - OR - [PredicatePreconditionFilter("id", PreconditionFilter.ParamType.Request, "IsGreaterThanZero", typeof(ArgumentOutOfRangeException))] - - - - - - Attribute constructor - - Name of key to validate - Type of key to validate - Predicate<object> method that encapsulates validation logic - Exception to throw on failed validation - - - - Signals failure if RouteData key does not exist, RouteData key value is null, - or predicate evaluates to false - - - - Troy DeMonbreun - - This is an action attribute that defines (via a regular expression) a required RouteData or Request - parameter "precondition" for the action. On precondition failure, the specified Exception type will be thrown. - More info here. - - - - [RegExPreconditionFilter("id", PreconditionFilter.ParamType.RouteData, "^[1-9][0-9]*$", typeof(ArgumentOutOfRangeException))] - OR - [RegExPreconditionFilter("id", PreconditionFilter.ParamType.Request, "^[1-9][0-9]*$", typeof(ArgumentOutOfRangeException))] - - - - - - Attribute constructor - - Name of key to validate - Type of key to validate - Regular expression to be matched - Exception to throw on failed validation - - - - Signals failure if RouteData key does not exist, RouteData key value is null or empty string, - or regular expression does not match RouteData key value - - - - - Takes the System.Action from GetResult of subcontrollers and adds it to ViewData using the key that is equal to the action parameter name for the subcontroller. - - - - - Adds to ViewData before the Action executes. - - - - - - Action filter that copies the contents of TempData into ViewData if a ViewResult is returned by a controller action. - - - - - If a ViewResult is returned by a Controller Action, the contents of the TempData dictionary is copied to the ViewData dictionary. - - The ActionExecutedContext - - - - Untyped, case insensitive dictionary that can be initialised using lambdas. - - - "foo", @class => "bar"); - ]]> - - - - Case insensitive, strongly typed dictionary with string keys and values that can be initialised using lambdas. - The type of values to create. - - dict = new Dictionary(2, StringComparer.OrdinalIgnoreCase); - //dict.Add("id", "foo"); - //dict.Add("class", "bar") - IDictionary dict = new Hash(id => "foo", @class => "bar"); - ]]> - - - - Creates an empty case insensitive dictionary of keys and values. - - - Extension Method to initialize an - - The key / value pairs to add to the dictionary. - The the dictionary. - - - Extension Method to initialize an - - The key / value pairs to add to the dictionary. - The the dictionary. - - - - Takes an anonymous object and converts it to a - - The object to convert - A generic dictionary - - - - Static class containing extenstion to HttpContextBase - - - - - Determines if the current request is an ajax request - - Instance of the HttpRequestBase for the request - - - - - Interface that represents a subcontroller - - - - - Gets and action that can later be invoked to produce the behavior of the subcontroller - - The controller depending on the subcontroller. The subcontroller uses the ControllerContext of the parent to create a new RequestContext. - System.Action - - - - SubController with typed Model property for parameter passing from a parent controller. - - - - - - Gets and sets a model object that matches the generic type. - - - - - Implementation of IPagination that wraps a pre-paged data source. - - - - - Generic form of - - Type of object being paged - - - - A collection of objects that has been split into pages. - - - - - The current page number - - - - - The number of items in each page. - - - - - The total number of items. - - - - - The total number of pages. - - - - - The index of the first item in the page. - - - - - The index of the last item in the page. - - - - - Whether there are pages before the current page. - - - - - Whether there are pages after the current page. - - - - - Creates a new instance of CustomPagination - - A pre-paged slice of data - The current page number - The number of items per page - The total number of items in the overall datasource - - - - Executes an IQueryable in order to created a paged set of objects. - The query is not executed until the LazyPagination is enumerated or one of its properties is invoked. - The results of the query are cached. - - Type of objects in the collection. - - - - Default page size. - - - - - Creates a new instance of the class. - - The query to page. - The current page number. - Number of items per page. - - - - Executes the query if it has not already been executed. - - - - - Calls Queryable.Skip/Take to perform the pagination. - - The paged set of results. - - - - The query to execute. - - - - - Extension methods for creating paged lists. - - - - - Converts the specified IEnumerable into an IPagination using the default page size and returns the specified page number. - - Type of object in the collection - Source enumerable to convert to the paged list. - The page number to return. - An IPagination of T - - - - Converts the speciied IEnumerable into an IPagination using the specified page size and returns the specified page. - - Type of object in the collection - Source enumerable to convert to the paged list. - The page number to return. - Number of objects per page. - An IPagination of T - - - - HTTP Handler that outputs route debugging information. - - - - - Route handler that ensures all requestes are routed to the DebugHttpHandler. - - - - - Use this class to define url->controller action mappings - - - - - Fluent interface start method - - The url pattern - - - - Sets the default controller, action and parameters via a lambda method, you can also - specify additional defaults - - default action - other default parameters - - - - Sets the default controller, action and parameters via a lambda method - - - - - - Add constraints to this route - - The constraints defined as an anonymous object - - - - Add defaults to this route, if you use the ToDefaultAction - method the controller and action default will be overwritten. - - The defaults defined as an anonymous object - - - - Sets the list of namespaces to look for controllers - - An array of namespaces - - - - Add this route to the route collection with the specified name - - The name of the route - The route collection to add the route to - - - - This class can be used to create routes from a regular expression. - It is also bidirectional and can be used to generate urls from a given route. - - - - - Initializes a new instance of the class given a regular expression and a route handler. - - The regular expression that this route handler is supposed to handle. - The route handler to handle this route. - - - - Initializes a new instance of the class given a regular expression and a route - handler and a url generator to use to generate urls that would be handled by this route. - - The regular expression that this route handler is supposed to handle. - The URL generator; used to generate urls for this route. - The route handler to handle this route. - - - - Initializes a new instance of the class. - - The regular expression that this route handler is supposed to handle. - Default route values for this route. - The route handler to handle this route. - - - - Initializes a new instance of the class. - - The regular expression that this route handler is supposed to handle. - The URL generator; used to generate urls for this route. - Default route values for this route. - The route handler to handle this route. - - - - Initializes a new instance of the class. - - The regular expression that this route handler is supposed to handle. - A function to use to generate a virtual path given the request context, incoming route value dictionary and this instance. - The route handler to handle this route. - - - - Initializes a new instance of the class. - - The regular expression that this route handler is supposed to handle. - A function to use to generate a virtual path given the request context, incoming route value dictionary and this instance. - Default route values for this route. - The route handler to handle this route. - - - - Initializes a new instance of the class. - - The regular expression that this route handler is supposed to handle. - The URL generator; used to generate urls for this route. - A function to use to generate a virtual path given the request context, incoming route value dictionary and this instance. - Default route values for this route. - The route handler to handle this route. - - - - Used to get a virtual path for a given set of route settings. - If the combination of defaults/values doesn't satisfy the url generator tokens: null is returned, - signaling that this route isn't correct for the given values. - - - This function is not used for figuring out the routes. It is only used for generating links for new routes. - - The request context. - The settings to use to generate this virtual path. - A virtual path that represents the given settings. - - - - Gets the route data from an incoming request; parses the incoming virtual - path and returns the route data that was inside the url. - - The HTTP context containing the url data. - Route data gleaned from the context. - - - - Gets the route data from the request portion of the url. - - The request string (the part after the virtual directory but before the query string). - Route data gleaned from the context. - - - - Gets the default route value dictionary containing the default route settings. - - The default settings for this route. - - - - Gets the route handler handling this route. - - The route handler that handles this route. - - - - Gets the string used to generate mvc urls for this route. - - The string used to generate urls for this route. - - - - Helper class for switching the default route handler to the debug route handler. - - - - - Iterates over each route in the route collection and replaces the default route handler with a DebugRouteHandler. - - The route table - - - - Inspired by Castle's EmailTemplateService. - - - - - Provides the ability to deserialize a Request into a CLR object. - - - - - Deserializes the specified request collection. - - The type to deserialize to. - The collection. - The prefix. - The deserialized object - - - - Deserializes the specified request collection. - - The type to deserialize to. - The collection. - The deserialized object - - - - Deserializes the specified request collection. - - The collection. - Type of the target. - The deserialized object - - - - Deserializes the specified request collection. - - The collection. - The prefix. - Type of the target. - The deserialized object - - - A Rails inspired Restful Routing Handler - - - Matches anything. - - - Matches a base64 encoded - - - Matches a @"\{?[a-fA-F0-9]{8}(?:-(?:[a-fA-F0-9]){4}){3}-[a-fA-F0-9]{12}\}?" - - - Matches a Positive @"\d{1,10}" - - - Matches a Positive @"\d{1,19}" - - - - Adds the set of SimplyRestful routes to the . - By default a positive integer validator is set for the Id parameter of the . - - The route collection to add the routes to. - - - - - Adds the set of SimplyRestful routes to the . - By default a positive integer validator is set for the Id parameter of the . - - The route collection to add the routes to. - An area inside the site to prefix the with. - - - SimplyRestfulRouteHandler.BuildRoutes(RouteTable.Routes, "private/admin") - // Generates the Urls private/admin/[controller]/new, private/admin/[controller]/[id]/edit, etc. - - - - - Adds the set of SimplyRestful routes to the . - - The route collection to add the routes to. - The path to the controller, you can use the special matching [controller] - The - validator to add to the Id parameter of the , use null to not validate the id. - The name of the controller. Only required if you are trying to route to a specific controller using a non-standard url. - - - Ensures that a exists. - The as an to try and use to resolve an instance of the - If no can be resolved the default is used. - - - Fixes an area prefix for the route url. - The area prefix to fix. - A non null string with leading and trailing /'s stripped - - - Builds a Default object for a route. - The default action for the route. - The default controller for the route. - An Anonymous Type with a default Action property and and default Controller property - if is not null or empty. - - - - SubController base class for subcontrollers. SubControllers can be infinitely nested. - - - - - Gets new RequestContext using objects from parent controller. This ensures subcontrollers have their own state that doesn't conflict with the parent. - - Parent controller - RequestContext - - - - Gets the name from the type by trimming "controller" and "subcontroller" from the type name. The subcontroller action must match the controller name. - - - - - - SubController with generic Model property. - - - - - Renders an Action delegate and captures all output to a string. - - - Renders the action and returns a string. - The delegate to render. - The rendered text. - - - - Exactly like a tag builder, except doesn't leave empty attributes in the generated html - TagBuilder:
          • - CleanTabBuilder:
          • -
            -
            - - - By default, the DataList displays the items in a single column, However, you can specify any number of columns. - - - - Html.DataList(_dataSource) - .NumberOfColumns(3) - .RepeatHorizontally() - .CellTemplate(x => { Writer.Write(x.ToLower()); }) - .CellCondition(x => x == "test1") - .EmptyDateSourceTemplate(() => { Writer.Write("There is no data available."); }) - .NoItemTemplate(() => { Writer.Write("No Data."); }); - - - - - - - Initializes a new instance of the class. - - The data source. - The writer. - - - - Initializes a new instance of the class. - - The data source. - The writer. - The table attributes. - - - - The main cell template. - - The template. - - - - - If you provide an empty date source the it will use this template in the first cell. - - The template. - - - - - If you have lets say two items and you repeat 3 times - then one cell is going to be empty so fill it with this template. - - The template. - - - - - Filters the items that will be rendered (This should normally be done in the database) - - The condition to check. - - - - - Attributes that go on every cell (<td id="foo" class="bar">). - - CellAttributes(id => "foo", @class => "bar") - The attributes. - - - - - Checks if a item should be rendered, this checks . - - The item. - - - - - The amount of Columns to render. - - The amount. - - - - - Repeats the items vertically. - - - - - - Repeats the items horizontally. - - - - - - Renders the cell. - - The item. - - - - Renders this DataList. - - - - - Renders to the TextWriter, and returns null. - This is by design so that it can be used with inline syntax in views. - - null - - - - Gets or sets the repeat direction. - - The repeat direction. - - - - Gets or sets the the amount of columns to display. - - - If this property is set to 0, the DataList will displays its items in a single row or column, based on the value of the RepeatDirection property. - - The repeat columns. - - - - Gets or sets the item renderer. You should use - - The item renderer. - - - - Create a DataList. - - - The helper. - The data source. - - - - - Create a DataList. - - - The helper. - The data source. - The table attributes. - - - - - Default model for grid - - - - - Defines a grid model - - - - - Creates a new instance of the GridModel class - - - - - Text that will be displayed when the grid has no data. - - Text to display - - - - Defines additional attributes for the grid. - - - - - - Defines additional attributes for the grid - - - - - - Specifies the Renderer to use with this grid. If omitted, the HtmlTableGridRenderer will be used. - - The Renderer to use - - - - Column builder for this grid model - - - - - Section overrides for this grid model. - - - - - Section overrides for this grid model. - - - - - Converts the specified attributes dictionary of key-value pairs into a string of HTML attributes. - - - - - - Converts the specified attributes dictionary of key-value pairs into a string of HTML attributes. - - Should it start with a space if isn't empty. - - - - - Extension methods for the Grid that enable the alternative 'Action' syntax for rendering custom sections. - - - - - Executes a delegate that can be used to specify custom HTML to replace the built in rendering of the start of the row. - - The grid - Action that renders the HTML. - - - - Executes a delegate that can be used to specify custom HTML to replace the built in rendering of the start of the row. - - The grid - Action that renders the HTML. - - - - Executes a delegate that can be used to specify custom HTML to replace the built in rendering of the end of the row. - - The grid - Action that renders the HTML. - - - - Specifies that an action should be used to render the column header. - - The current column - The action to render - - - - - Specifies that an action should be used to render the contents of this column. - - The current column - The action to render - - - - - Builds grid columns - - - - - Specifies a column should be constructed for the specified property. - - Lambda that specifies the property for which a column should be constructed - - - - Specifies that a custom column should be constructed with the specified name. - - - - - - Column for the grid - - - - - Grid Column fluent interface - - - - - Specified an explicit name for the column. - - Name of column - - - - - If the property name is PascalCased, it should not be split part. - - - - - - A custom format to use when building the cell's value - - Format to use - - - - - Delegate used to hide the contents of the cells in a column. - - - - - Determines whether the column should be displayed - - - - - - - Do not HTML Encode the output - - - - - - Defines additional attributes for the column heading. - - - - - - - Defines additional attributes for the cell. - - Lambda expression that should return a dictionary containing the attributes for the cell - - - - - Custom header renderer - - - - - Custom item renderer - - - - - Creates a new instance of the GridColumn class - - - - - Gets the value for a particular cell in this column - - Instance from which the value should be obtained - Item to be rendered - - - - Name of the column - - - - - Display name for the column - - - - - The type of the object being rendered for thsi column. - Note: this will return null if the type cannot be inferred. - - - - - Custom header renderer - - - - - Custom item renderer - - - - - Additional attributes for the column header - - - - - Additional attributes for the cell - - - - - Defines a grid to be rendered. - - Type of datasource for the grid - - - - Specifies that the grid should be rendered using a specified renderer. - - Renderer to use - - - - - Specifies the columns to use. - - - - - - - Text to render when grid is empty. - - Empty Text - - - - - Additional custom attributes - - - - - - Additional custom attributes for each row - - Lambda expression that returns custom attributes for each row - - - - - Additional custom attributes for the header row. - - Attributes for the header row - - - - - Renders the grid to the TextWriter specified at creation - - - - - - The GridModel that holds the internal representation of this grid. - - - - - Specifies a custom GridModel to use. - - The GridModel storing information about this grid - - - - - Creates a new instance of the Grid class. - - The datasource for the grid - The TextWriter where the grid should be rendered - - - - - Renders to the TextWriter, and returns null. - This is by design so that it can be used with inline syntax in views. - - - - - - The GridModel that holds the internal representation of this grid. - - - - - The datasource for the grid. - - - - - Extension methods related to the Grid - - - - - Creates a grid using the specified datasource. - - Type of datasouce element - - - - - Creates a grid from an entry in the viewdata. - - Type of element in the grid datasource. - - - - - Defines additional attributes for the column heading. - - - - - - Defines additional attributes for a grid. - - - - - - Defines additional attributes for the cell. - - - - - Associates custom attributes with every grid row. - - - - - Renders the specified text at the start of every row instead of the default output. - - - - - Renders the specified text at the end of every row instead of the default output. - - - - - Renders the specified text at the start of every row instead of the default output. - - The grid - Lambda takes an instance of GridRowViewData and returns the string to render - - - - - Renders the specified text at the start of every row instead of the default output. - - The grid - Lambda takes an instance of GridRowViewData and returns the string to render - - - - - The HTML that should be used to render the header for the column. This should include TD tags. - - The current column - The format to use. - - - - - Specifies that a partial view should be used to render the contents of this column. - - The current column - The name of the partial view - - - - - Specifies custom attributes for the header row. - - - - - Specifies that the grid's columns should be automatically generated from the public properties on the model object. - - - - - Base class for Grid Renderers. - - - - - A renderer responsible for rendering a grid. - - - - - Renders a grid - - The grid model to render - Data source for the grid - The TextWriter to which the grid should be rendered/ - View context - - - - Represents a Grid Row - - - - - - Invokes the custom renderer defined (if any) for the start of the row. - Returns TRUE if custom rendering occurred (indicating that further rendering should stop) otherwise FALSE. - - - - - Invokes the custom renderer defined (if any) for the start of the row. - Returns TRUE if custom rendering occurred (indicating that further rendering should stop) otherwise FALSE. - - - - - Returns custom attributes for the row. - - - - - Used as viewdata for partials rendered for RowStart/RowEnd - - - - - Creates a new instance of the GridRowViewData class. - - - - - The current item for this row in the data source. - - - - - Whether this is an alternating row - - - - - Sections for a grid. - - - - - Renders a grid as an HTML table. - - - - - Converts the specified attributes dictionary of key-value pairs into a string of HTML attributes. - - - - - - Context class used when rendering the grid. - - - - A representation of a query to find Elements in the Dom. - - - The query string. - The CSS Selector query string. - - - Converts a regular string into a DomQuery. - The CSS Selector query. - The DomQuery - The query will always have == false - and will always return an empty collection of . - - - - True if the query is only a single element id - - - True if the query string is only a selection of html id's. - IJSGenerator implementors can use this to develop more efficient - javascript than always calling a css selector function. - - - The list of raw id's that are included in the query string. - - - - A column to be rendered as part of a grid. - - Type of object to be rendered in the grid. - - - - Creates a new instance of the - - - - - Replaces pascal casing with spaces. For example "CustomerId" would become "Customer Id". - Strings that already contain spaces are ignored. - - String to split - The string after being split - - - - Delegate that will be invoked on each item in the in the datasource in order to obtain the current item's value. - - - - - Name of the column - - - - - Custom format for the cell output. - - - - - Whether or not PascalCased names should be split. - - - - - Delegate used to hide the contents of the cells in a column. - - - - - Delegate used to hide the entire column - - - - - Delegate that can be used to perform custom rendering actions. - - - - - Delegate used to specify a custom heading. - - - - - Whether to HTML-Encode the output (default is true). - - - - - The attributs to apply to the header of the column. - - - - - Constructs GridColumn objects representing the columns to be rendered in a grid. - - - - - - Used in the construction of columns that have been specified using a lambda expression. - - Type of object to generate grid rows for. - - - - Used in the construction of grid columns. - - Type of object to generate grid rows for. - - - - Specifies that when rendered, the value for the column should have the specified string formatting applied to it. - - The format to apply. - - - - - By default, all output is HTML-Encoded. Specifying DoNotEncode will disable the encoding for all cells in this column. - - - - - - Can be used to hide the contents of all the cells in the current column. If the specified func returns false then the contents of the cells will not be rendered. - - Delegate that will be invoked to determine whether the contents of the cells should be rendered. - - - - - Can be used to hide the entire column. If the specified func returns false then the column will not be rendered. - - Delegate that will be invoked to determine whether the column should be rendered. - - - - - Can be used to perform custom rendering for a column's heading. - - Delegate to invoke to perform the rendering. - - - - - Applies the specified attributes to the header. - - A dictionary containing HTML attributes - - - - - By default, a property such as "CustomerName" will be be parsed in order to produce a column heading of "Customer Name". - Calling DoNotSplit will disable the parsing of the property names for this column heading. - - - - - - Used in the construction of Grid columns. - - Type of item to render the column for. - - - - Specifies a custom delegate for the rendering of a particular cell. - - The delegate to invoke - The grid column builder. - - - - Used in the construction of grid columns. - - Type of object to generate grid rows for. - - - - Uses a lambda expression to specify which property the column should be rendered for. - - Lambda expression for the property. - A Column builder. - - - - Uses a lambda expression to specify which property the column should be rendered for. - - Lambda expression for the property. - Custom column heading. - A Column builder. - - - - Specifies a string representation of a property name for which a column should be created. - Using this approach will resort to using reflection to obtain the property value. - - Property name to generate the column for. - A Column builder - - - - Used to provide custon sections to the grid. - - - - - Executes a delegate that can be used to specify custom HTML to replace the built in rendering of the start of the row. - - Action that renders the HTML. - - - - Executes a delegate that can be used to specify custom HTML to replace the built in rendering of the start of the row with alternate row as additional parameter. - - Action that renders the HTML. - - - - Executes a delegate that can be used to specify custom HTML to replace the built in rendering of the end of the row. - - Action that renders the HTML. - - - - Applies the specified attributes to the header of the current column. - - - - - - - Grabs the property name from a member expression. - - The expression - The name of the property - - - - Extension methods on the HtmlHelper for creating Grid instances. - - - - - Implementation of the grid for rendering HTML in a gridview style. - - Type of object to be rendered in each row. - - - - Base class for SmartGrid functionality. - - The type of object for each row in the grid. - - - - Renders text to the output stream - - The text to render - - - - Performs the rendering of the grid. - - - - - Iterates over the items collection, builds up the markup for each row and outputs the results. - - - - - If there are items to display, iterate over each column and output the results. - If there are no items to display, return false to indicate execution of RenderItems should not take place. - - boolean indication whether or not items should be rendered. - - - - Renders the start of a row to the output stream. - - The item to be rendered into this row. - Whether the row is an alternate row - - - - Renders the end of a row to the output stream. - - The item being rendered in to this row. - - - - The items to be displayed in the grid. - - - - - The columns to generate. - - - - - The writer to output the results to. - - - - - Message to be displayed if the Items property is empty. - - - - - Creates a new instance of the class using the specified viewDataKey to extract the data source from the viewdata. - - Key to use to extract the - The view context - Columns - Custom html attributes and options - Where to write the output - - - - Creates a new instance of the using the specified data source. - - Data source - Columns - Custom attributes and options - Where to write the output - HTTP Context - - - - Renders the pagination section of the grid. - Eg "Showing 1 - 10 of 20 | last, prev, next, last" - - - - - - Creates a pagination link and includes and curren - - - - - - - - Converts the specified attributes dictionary of key-value pairs into a string of HTML attributes. - - - - - - Custom HTML attributes. - - - - - The HTTP Context. - - - - - Normalizes a url in the form ~/path/to/resource.aspx. - - - - - - - - Renders a link tag referencing the stylesheet. Assumes the CSS is in the /content/css directory unless a - full relative URL is specified. - - - - - - - - Renders a script tag referencing the javascript file. Assumes the file is in the /scripts directory - unless a full relative URL is specified. - - - - - - - - Renders a favicon link tag. Points to ~/favicon.ico. - - - - - - - Extension methods to turn quickly turn a value / key pair into an attribute="value" html string - - - - - Returns ' attribute="value"' if value is not null or empty - - The value to print - The html attribute - An attribute string - - - - Returns ' class="value"' if value is not null or empty - - The value to print - An attribute string - - - - Used internally to create the menu, use MvcContrib.UI.MenuBuilder.Menu to create a menu. - - - - - Used internally to create the menu, use MvcContrib.UI.MenuBuilder.Menu to create a menu. - - - - - Renders the menu according to the current RequestContext to the specified TextWriter - - The current RequestContext - The TextWriter for output - - - - Used internally to render the menu. Do not call this directly without first calling Prepare, or call RenderHtml(RequestContext ...) - - - - - Called internally by RenderHtml(RequestContext, TextWriter) to remove empty items from lists and generate urls. - Can also be called externally to prepare the menu for serialization into Json/Xml - - The current RequestContext - if this item should be rendered - - - - The class to use when displaying an insecure menu item, won't be used if hiding insecure items (default behavior) - - - this - - - - Should the menu item be hidden or display with limited functionality when disabled - - Set to true to hide the item, false to show it in a disabled format - this - - - - Replaces pascal casing with spaces. For example "CustomerId" would become "Customer Id". - Strings that already contain spaces are ignored. - - String to split - The string after being split - - - - Apply this tag to an action to set a help text associated with it. - - - - - Specify the help text associated with this action - - - - - - Apply this tag to an action to set the title associated with it - - - - - Specify the title text associated with this action - - - - - - Use this class to build fluent menus, with Menu.Begin - See the MvcContrib.Samples.UI for details - - - - - Use this at the top of a fluent menu, with items in the params - - All of the menu items in this menu - The menu that was just created - - - - Creates a submenu of items - - The title for this list - The items in this menu - The list of items - - - - Creates a submenu of items - - The title for this list - The items in this menu - The location of the icon to display - The list of items - - - - Adds an item in secure fashion, confirming the user has permissions to access this item - The permissions are determined via the AuthorizeAttribute. A title will be build out of the action name. - - The controller that this action is in - The action that this menu should invoke - The menu item to be added to the list - - - - Adds an item in secure fashion, confirming the user has permissions to access this item - The permissions are determined via the AuthorizeAttribute - - The controller that this action is in - The action that this menu should invoke - The title for this menu item - The menu item to be added to the list - - - - Adds an item in secure fashion, confirming the user has permissions to access this item - The permissions are determined via the AuthorizeAttribute - - The controller that this action is in - The action that this menu should invoke - The title for this menu item - The location of an icon file - The menu item to be added to the list - - - - Adds an item. A title will be build out of the action name. - - The controller that this action is in - The action that this menu should invoke - The menu item to be added to the list - - - - Adds an item. A title will be build out of the action name. - - The controller that this action is in - The action that this menu should invoke - The title for this menu item - The menu item to be added to the list - - - - Adds an item. A title will be build out of the action name. - - The controller that this action is in - The action that this menu should invoke - The title for this menu item - The location of an icon file - The menu item to be added to the list - - - - Adds an item that is a direct link instead of being built off of an action. Used links outside your site. - - The title for this menu item - The location to visit - The menu item to be added to the list - - - - Adds an item that is a direct link instead of being built off of an action. Used links outside your site. - - The title for this menu item - The location to visit - The location of the icon file - The menu item to be added to the list - - - - The class to use on every anchor tag - - - - - The class to use on every icon's image tag - - - - - The class to use on every LI tag - - - - - The class to use on every UL tag - - - - - The directory that icon images are located in - - - - - Should items that the user is not authorized to see be hidden or disabled? True for hidden. - - - - - The default css class to use for disabled items, if they are shown instead of hidden - - - - - The default css class to use for selected items, based on the requested url and action - - - - - Render the menu to the current ViewContext - - - The menu to render - - - - Used internally to create the menu, use MvcContrib.UI.MenuBuilder.Menu to create a menu. - - - - - This class opens up the AuthorizeCore method which is protected in the MVC framework. - If this method is made public, this entire file could be eliminated. - - - - - Used internally to create the menu, use MvcContrib.UI.MenuBuilder.Menu to create a menu. - - - - - Renders a pager component from an IPagination datasource. - - - - - Creates a new instance of the Pager class. - - The IPagination datasource - The current HTTP Request - - - - Specifies the query string parameter to use when generating pager links. The default is 'page' - - - - - Specifies the format to use when rendering a pagination containing a single page. - The default is 'Showing {0} of {1}' (eg 'Showing 1 of 3') - - - - - Specifies the format to use when rendering a pagination containing multiple pages. - The default is 'Showing {0} - {1} of {2}' (eg 'Showing 1 to 3 of 6') - - - - - Text for the 'first' link. - - - - - Text for the 'prev' link - - - - - Text for the 'next' link - - - - - Text for the 'last' link - - - - - Uses a lambda expression to generate the URL for the page links. - - Lambda expression for generating the URL used in the page links - - - - Extension methods for the pager. - - - - - Creates a pager component using the item from the viewdata with the specified key as the datasource. - - The HTML Helper - The viewdata key - A Pager component - - - - Creates a pager component using the specified IPagination as the datasource. - - The HTML Helper - The datasource - A Pager component - - - - Adds an object using the type as the dictionary key - - -
            -
            diff --git a/bin/MvcContrib.dll b/bin/MvcContrib.dll deleted file mode 100644 index 24ad3a848..000000000 Binary files a/bin/MvcContrib.dll and /dev/null differ diff --git a/bin/NHibernate.ByteCode.Castle.dll b/bin/NHibernate.ByteCode.Castle.dll deleted file mode 100644 index 2070f67f9..000000000 Binary files a/bin/NHibernate.ByteCode.Castle.dll and /dev/null differ diff --git a/bin/NHibernate.ByteCode.Castle.xml b/bin/NHibernate.ByteCode.Castle.xml deleted file mode 100644 index 5dd548703..000000000 --- a/bin/NHibernate.ByteCode.Castle.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - NHibernate.ByteCode.Castle - - - - - A for use with the Castle Dynamic Class Generator. - - - - - Initializes a new object. - - - The Class to Proxy. - The Id of the Object we are Proxying. - - - - The ISession this Proxy is in. - - - - Invoke the actual Property/Method using the Proxy or instantiate the actual - object and use it when the Proxy can't handle the method. - - The from the generated Castle.DynamicProxy. - - - - Build a proxy using the Castle.DynamicProxy library. - - The value for the Id. - The Session the proxy is in. - A fully built INHibernateProxy. - - - diff --git a/bin/NHibernate.Linq.dll b/bin/NHibernate.Linq.dll deleted file mode 100644 index 823425a5c..000000000 Binary files a/bin/NHibernate.Linq.dll and /dev/null differ diff --git a/bin/NHibernate.Validator.dll b/bin/NHibernate.Validator.dll deleted file mode 100644 index 31231328b..000000000 Binary files a/bin/NHibernate.Validator.dll and /dev/null differ diff --git a/bin/NHibernate.Validator.xml b/bin/NHibernate.Validator.xml deleted file mode 100644 index c2ac85b73..000000000 --- a/bin/NHibernate.Validator.xml +++ /dev/null @@ -1,1435 +0,0 @@ - - - - NHibernate.Validator - - - - - Enables recursive validation of an associated object - - - - - Engine that take a object and check every expressed attribute restrictions - - - - - Apply constraints on a entity instance and return all the failures. - if is null, an empty array is returned - - object to apply the constraints - - - - - Apply constraints on a entity instance and return all the failures for the given property. - if is null, an empty array is returned. - - Object to apply the constraints - The name of the property to validate. - - - - - Assert a valid Object. A - will be throw in a Invalid state. - - Object to be asserted - - - - Apply constraints of a particular property value of a entity type and return all the failures. - The InvalidValue objects returns return null for and . - - - - - - - - Apply the registred constraints rules on the hibernate metadata (to be applied on DB schema) - - hibernate metadata - - - - Get the list of constraints declared for a give member of the entityValidator - - The name of the property. - The list of attribute of the given property. - - - - Return true if this contains rules for apply, false in other case. - - - - - Used to create an instance when deserialize - - - - - Create the validator engine for this entity type. - - - Used in Unit Testing. - - - - - - Create the validator engine for a particular entity class, using a resource bundle - for message rendering on violation - - - Used in Unit Testing. - - entity type - - The CultureInfo for the . - Validator definition mode - - - - Create the validator engine for a particular entity class, using a resource bundle - for message rendering on violation - - - Used in Unit Testing. - - entity type - - Custom interpolator. - The CultureInfo for the . - Validator definition mode - - - - Initialize the type. - - - - - - - Apply constraints on a entity instance and return all the failures. - if is null, an empty array is returned - - object to apply the constraints - - - - - Validate the child validation to objects and collections - - value to validate - - - - Get the ClassValidator for the - parametter from . If doesn't exist, a - new is returned. - - type - - - - - Create a from a attribute. - If the attribute is not a type return null. - - attribute - the validator for the attribute - - - - Create the validator for the children, who got the - on the fields or properties - - - - - Add recursively the inheritance tree of types (Classes and Interfaces) - to the parameter - - Type to be analyzed - Collections of types - - - - Assert a valid Object. A - will be throw in a Invalid state. - - Object to be asserted - - - - Apply constraints of a particular property value of a entity type and return all the failures. - The InvalidValue objects returns return null for InvalidValue#Entity and InvalidValue#RootEntity. - Note: this is not recursive. - - Name of the property or field to validate - Real value to validate. Is not an entity instance. - - - - - Apply the registred constraints rules on the hibernate metadata (to be applied on DB schema) - - hibernate metadata - - - - Return true if this contains rules for apply, false in other case. - - - - - Just In Time ClassValidatorFactory - - - - - Responsible for validator message interpolation (variable replacement etc) - this extension point is useful if the call has some contextual informations to - interpolate in validator messages - - - - - Before insert, executes the validator framework - - - Because, usually, we validate on insert and on update we are - using the same environment for PreInsert and PreUpdate event listeners, - the initialization of the environment (the ValidatorEngine) was or will be done in - ValidatePreInsertEventListener by NH. - This give us better performance on NH startup. - - - - - Common environment for insert and update NH event listeners - - - - - Initialize the validators, any non significant validators are not kept - - - - - - Contract for validator that need initialization. - - The attribute that hold validator parameters. - - - - A validator for a particular attribute - - - - - does the object/element pass the constraints - - Object to be validated - Context for the validator constraint - if the instance is valid - - - - Take the attribute values and Initialize the Validator - - parameters - - - - Interface implemented by the validator - when a constraint may be represented in a - hibernate metadata property - - - - - Indicates failure of an assertion: a possible bug in NHibernate.Validator - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The message that describes the error. - - - - Initializes a new instance of the class. - - The message that describes the error. - - The exception that is the cause of the current exception. If the innerException parameter - is not a null reference, the current exception is raised in a catch block that handles - the inner exception. - - - - - Initializes a new instance of the class. - - - The that holds the serialized object - data about the exception being thrown. - - - The that contains contextual information about the source or destination. - - - - - Get the validator for a type. If doesn't exists, will create one, add to the engine and return it. - - Type for the validator - Validator encountered or created-and-added. - - - - The Attribute element has to represent an EAN-13 or UPC-A - which aims to check for user mistake, not actual number validity! - http://en.wikipedia.org/wiki/European_Article_Number - - - - - All validators attributes must implement this interface. - - - - - does the object/element pass the constraints - - Object to be validated - if the instance is valid - - - - Take the annotations values and Initialize the Validator - - parameters - - - - The annotated element has to be false - - - - - Get all mapped classes. - - All mapped classes for the current loader. - - - - Load all mappings configured in the nhv-configuration configuration section. - - The list of configured mappings. - - - - Adds all of the assembly's mappings. - - The assembly full name to load. - - - - - Adds all of the assembly's mappings. - - The assembly. - - - - Must be a valid IP address. - - - - - Just In Time Class Mapping Factory - - - The JITClassMappingFactory work outside the engine configuration. - - - - - Helper to parse nhv-configuration XmlNode. - - - - - The XML node name for hibernate configuration section in the App.config/Web.config and - for the hibernate.cfg.xml . - - - - The XML Namespace for the nhibernate-configuration - - - XPath expression for shared-engine-class node - - - XPath expression for property nodes - - - XPath expression for mapping nodes - - - - Convert a given string to a . - - The string - The result . - when the string don't have a valid value. - - - - Create the attribute of a entity-validator from XML definitions. - - The entity class where associate the attribute. - The attribute name in the mapping. - The instance. - - We are using the conventions: - - The attribute must be defined in the same namespace of the . - - The attribute class may have the postfix "Attribute" without need to use it in the mapping. - - - - - Contract for Shared Engine Provider - - - - - Provide the shared engine instance. - - The validator engine. - - - - Configuration parsed values for nhv-configuration section. - - - - - Contract for configuration sources. - - - - - Assembly qualified name for shared engine provider. - - - - - Configured properties. - - - - - Configured Mappings. - - - - - Configured properties - - - - - Configured Mappings - - - - - Initializes a new instance of the class. - - An empty configuration. - - - - Initializes a new instance of the class. - - The XML reader to parse. - - The nhv-configuration.xsd is applied to the XML. - - When nhibernate-configuration.xsd can't be applied. - - - - - - - - - - - - - - - - Utils methods for type issues. - - - - - Get the Generic Arguments of a - - - - - - - Get the type of the a Field or Property. - If is a: Generic Collection or a Array, return the type of the elements. - - MemberInfo, represent a property or field - type of the member or collection member - - - - Indicates if a is - - - is enumerable or not - - - - Get the of a . - - - - - - - Get the value of some Property or Field. - - - - - - - - The file, where string is pointing to, must exist. - - - - - Check if string is a number. - - - - - Checks wheter the member is a number having up to IntegerDigits, - and FractionalDigits fractional digits. - - FractionalDigits default value: 0. - - - For example: - - - With [Digits(3)] //here FractionalDigits is zero. - - Valid values: 0; 9; 99; 99.0; null; 01; - - Invalid values: 1000; 10.1; "aa"; new object(); - - - With [Digits(2,3)] - - Valid values: 0; 100.100; 99.99; - - Invalid values: 1000.0; 9.233; 1233; - - - With [Digits(0,2)] - - Valid values: 0; 0.1; 0.12; - - Invalid values: 1.12; 0.123 - - - - - - - Max restriction on a numeric annotated element - - - - - The annotated element has to be true - - - - - Min restriction on a numeric annotated element (or the string representation of a numeric) - - - - - Override this method to obtain flexibility. - The default interpolator can replace the message with public property values. - - Current buffer where the final string message is written. - Entity or value - Property name to be used. - - - - Define how to investigate validators of a class. - - - - - Validators are discovered, by reflection, only investigating the class attributes - - - - - Validator are discovered only parsing the xml of the class - - - - - Validators are discovered, by reflection, investigating the class attributes - and then using the xml(or any other external source), merging both. - Conflicts are solved using xml-configuration over attribute-configuration. - - - - - Validators are discovered, by reflection, investigating the class attributes - and then using the xml(or any other external source), merging both. - Conflicts are solved using attribute-configuration over xml-configuration. - - - - - The annotated element must follow the regex pattern - - - - - A single violation of a class level or method level constraint. - - - Created by . The ctor is public only for test scope. - - - - - NHibernate Validator properties - - - - - Apply DDL changes on Hibernate metamodel when using validator with Hibernate Annotations. - Default to true. - - - - - Enable listeners auto registration in Hibernate Annotations and EntityManager. - Default to true. - - - - - Message interpolator class used. The same instance is shared across all ClassValidators - - - - - Mapping loader implementor. - - - - - Constraint Validator Factory used to create Validators. - - - - - Define validation mode. - Default - - - Allowed values are available in . - - - - - - Base name of resource file for embedded validators. - - - - - Define the provider of shared engine between various logical layers. - - - The main target of shared engine is have only one engine for the NHibernate events of validator. - If an application configure a certain shared engine provider and use it to get the ValidatorEngine - the result is that the events for NH configure the ValidatorEngine and the application can - share the same engine ensuring that app and NH-event make the same validation. - - The configuration of shared_engine_provider is ignored outside app/web config file. - - - - - Shared engine provider instance. - - - The Shared engine instance can be injected at run-time even if if not the better way to work with it. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The annotated elemnt has to be in the appropriate range. Apply on numeric values or string - representation of the numeric value. - - - - - Ensure the member to be not null. - - - - - Before update, executes the validator framework - - - Because, usually, we validate on insert and on update we are - using the same environment for PreInsert and PreUpdate event listeners, - the initialization of the environment (the ValidatorEngine) was or will be done in - ValidatePreInsertEventListener by NH. - This give us better performance on NH startup. - - - - - Check that a String is not empty (length > 0) - or that a IEnumerable is not empty (Count > 0) - - - To validate for NotNull and Not Empty use NotNullNotEmptyAttribute. - - - - - Check that a given date is in the future. - - - - - The engine of NHibernate Validator - - - The engine is the easy way to work with NHibernate.Validator. - It hold all class validators. - Usually an application will create a single . - - - . - - - - Configure NHibernate.Validator using the <nhv-configuration> section - from the application config file, if found, or the file nhvalidator.cfg.xml if the - <nhv-configuration> section not include the session-factory configuration. - If both are found merge the two configuration. - - - To configure NHibernate explicitly using nhvalidator.cfg.xml, appling merge/override - of the application configuration file, use this code: - - configuration.Configure("path/to/nhvalidator.cfg.xml"); - - - - - - Configure NHibernate.Validator using the file specified. - - The location of the XML file to use to configure NHibernate.Validator. - - Calling Configure(string) will override/merge the values set in app.config or web.config - - - - - Configure NHibernate.Validator using the specified . - - The that contains the Xml to configure NHibernate.Validator. - - Calling Configure(XmlReader) will overwrite the values set in app.config or web.config - - - - - Configure NHibernate.Validator using the specified . - - The that is the configuration reader to configure NHibernate.Validator. - - Calling Configure(INHVConfiguration) will overwrite the values set in app.config or web.config. - - You can use this overload is you are working with Attributes or Xml-files. - - - - - - Configure NHibernate.Validator using the specified . - - The that is the configuration reader to configure NHibernate.Validator. - The instance. - - Calling Configure(INHVConfiguration) will overwrite the values set in app.config or web.config - - - - - Apply constraints/rules on a entity instance. - - The entity instance to validate - All the failures or an empty array if is null. - - If the of the was never inspected, or - it was not configured, the will be automatic added to the engine. - - - - - Apply constraints/rules on a entity instance. - - The entity instance to validate - - False if there is one or more the failures; True otherwise (including when is null). - - - If the of the was never inspected, or - it was not configured, the will be automatic added to the engine. - - - - - Assert a valid entity. - - The entity instance to validate - when have an invalid state. - - If the of the was never inspected, or - it was not configured, the will be automatic added to the engine. - - - - - Use the for a given . - - The entity type - The name of a property - The value of the property. - All the invalid values. - - If the was never inspected, or - it was not configured, the will be automatic added to the engine. - - - - - Use the for a given . - - The entity type - The property type. - The lamda expression of the property getter. - The potencial value of the property. - - If the was never inspected, or - it was not configured, the will be automatic added to the engine. - - - - - Use the for a given entity instance. - - The entity instance to validate - The name of a property - All the invalid values. - - If the of the was never inspected, or - it was not configured, the will be automatic added to the engine. - - - - - Use the for a given entity instance. - - The entity instance to validate - The name of a property - The value of the property. - All the invalid values. - - - - Add a validator to the engine or override existing one. - - The type of an entity. - - Create an istance of for the given . - - - - - Add a validator to the engine or override existing one. - - The type of an entity. - Inspector for sub-elements - - - - Gets an acquaintance . - - The type of an entity. - A acquaintance for the give type - or null if the the was never used in the engine instance. - - - - Gets a for a given - - The given . - - A validator for a or null if the - is not supported by . - - - In general a common application don't need to use this method but it can be useful for some kind of framework. - - - - - Default MessageInterpolator - - - - - Default Mode to construct validators - - - - - Database schema-level validation enabled - - - - - NHibernate event-based validation - - - - - Adds all of the assembly's embedded resources whose names end with .nhv.xml. - - The assembly. - This configuration object. - - - - Load and return a mapping for a given type. - - The given type. - The mapping. - - The method use a convention to find the resource that represent the mapping for the given class. - - The mapping must be compiled like embedded resource in the same assembly of the given type - - The name o the resource must be the same name of the type and end with ".nhv.xml" - - The resource must stay in the same namespace of the type - - - - - Utils metods for attributes - - - - - Returns true if the attribute can be declared more than one time for the same element - - - - - - - Ensure a IEnumerable (including string) to be not null and not empty. - - - Valid values: "abc"; new int[] {1}; new List<int>(new int[] { 1 }); - Invalid values: null; ""; 123; new int[0]; new List<int>(); - - - - - - - The message to be sent to the user if it is not valid - - - - - Definitions of countries IBAN (Key=Country code as defined in ISO 3166; Value=IbanDefinition) - - - - - IBAN cleaner - - Not cleaned IBAN - The validatable IBAN - true if the have all valid character; otherwise false - - - - Validate the CIN for a given encoded IBAN - - The encoded IBAN. - true if the CIN is valid (mod=1); otherwise false - - - - The string has to be a well-formed email address - - - - - Readonly NHV configuration section handler - - - - - Size range for Arrays, Collections (do not use with strings). - - - -[SizeAttribute] range from 0 to int.MaxValue. - Valid values: new int[0]; - - [SizeAttribute(1,3)] range from 1 to 3. - Valid values: new int[1]; new int[3] - Invalid values: new int[0]; new int[4]; "123"; 123; - - - - - - - Min = 0 - Max = int.MaxValue - - - - - Min and Max are specified in the parameters. - - Min value to ensure - Max value to ensure - - - - In order to point to a validator in other assembly. - - - - - - - - - - Check that a Date representation apply in the future - - - - - Validate EAN13 and UPC-A - http://en.wikipedia.org/wiki/European_Article_Number - - - - - Check that a date representation apply in the past - - - - - This expression matches an IBAN Code (International Bank Account Number) - - - - - Interface implemented by the validator - when a constraint may be represented in the - hibernate metadata - - - - - Apply the constraint in the hibernate metadata - - PersistentClass - - - - The element of an validation. - - - - - Create a new instance of for a root element. - - The type of the entity. - The validator. - - The root element is the entity it self. - - - - - Create a new instance of for a composite element. - - The type of the composite element. - The validator of the composite element. - The getter of the composite element inside the root entity. - - - - Add a . - - The sub element - - - - - - The type of the entity - - - - - The validator of the . - - - - - The getter of the composite element inside the root entity. - - - - - Composite Elements. - - - - - Has SubElements ? - - - - - Apply some length restrictions to the annotated element. It has to be a string - - - - - Configuration parsed values for a mapping XML node - - - There are 3 possible combinations of mapping attributes - 1 - resource and assembly: NHV will read the mapping resource from the specified assembly - 2 - file only: NHV will read the mapping from the file. - 3 - assembly only: NHV will find all the resources ending in nhv.xml from the assembly. - - - - - Initializes a new instance of the class. - - Mapped file. - When is null or empty. - - - - Initializes a new instance of the class. - - The assembly name. - The mapped embedded resource. - When is null or empty. - - - - Is the mapping element empty - - True if the element is empty; false otherwise. - - - - The file of a mapped validator. - - - - - The assembly name where validator mapping is. - - - - - The name of an embedded resource in the . - - - - diff --git a/bin/NHibernate.dll b/bin/NHibernate.dll deleted file mode 100644 index f45b6b6fb..000000000 Binary files a/bin/NHibernate.dll and /dev/null differ diff --git a/bin/NHibernate.license.txt b/bin/NHibernate.license.txt deleted file mode 100644 index 8a88d1489..000000000 --- a/bin/NHibernate.license.txt +++ /dev/null @@ -1,460 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - diff --git a/bin/NHibernate.xml b/bin/NHibernate.xml deleted file mode 100644 index 00db400b3..000000000 --- a/bin/NHibernate.xml +++ /dev/null @@ -1,40421 +0,0 @@ - - - - NHibernate - - - - - Implementation of BulkOperationCleanupAction. - - - - - An operation which may be scheduled for later execution. - Usually, the operation is a database insert/update/delete, - together with required second-level cache management. - - - - Called before executing any actions - - - Execute this action - - - - Do we need to retain this instance until after the transaction completes? - - - False if this class defines a no-op has after transaction completion. - - - - Called after the transaction completes - - - - What spaces (tables) are affected by this action? - - - - - Create an action that will evict collection and entity regions based on queryspaces (table names). - - - - - Any action relating to insert/update/delete of a collection - - - - - Initializes a new instance of . - - The that is responsible for the persisting the Collection. - The Persistent collection. - The identifier of the Collection. - The that the Action is occurring in. - - - Called before executing any actions - - - Execute this action - - - - Do we need to retain this instance until after the transaction completes? - - - False if this class defines a no-op has after transaction completion. - - - - Called after the transaction completes - - - - Compares the current object with another object of the same type. - - - A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has the following meanings: Value Meaning Less than zero This object is less than the other parameter.Zero This object is equal to other. Greater than zero This object is greater than other. - - An object to compare with this object. - - - - What spaces (tables) are affected by this action? - - - - Execute this action - - This method is called when a new non-null collection is persisted - or when an existing (non-null) collection is moved to a new owner - - - - - Removes a persistent collection from its loaded owner. - - The collection to to remove; must be non-null - The collection's persister - The collection key - Indicates if the snapshot is empty - The session - Use this constructor when the collection is non-null. - - - - Removes a persistent collection from a specified owner. - - The collection's owner; must be non-null - The collection's persister - The collection key - Indicates if the snapshot is empty - The session - Use this constructor when the collection to be removed has not been loaded. - - - - Acts as a stand-in for an entity identifier which is supposed to be - generated on insert (like an IDENTITY column) where the insert needed to - be delayed because we were outside a transaction when the persist - occurred (save currently still performs the insert). - - The stand-in is only used within the see cref="NHibernate.Engine.PersistenceContext" - in order to distinguish one instance from another; it is never injected into - the entity instance or returned to the client... - - - - - Base class for actions relating to insert/update/delete of an entity - instance. - - - - - Instantiate an action. - - The session from which this action is coming. - The id of the entity - The entity instance - The entity persister - - - - Entity name accessor - - - - - Entity Id accessor - - - - - Entity Instance - - - - - Session from which this action originated - - - - - The entity persister. - - - - Format an SQL statement using simple rules: - a) Insert newline after each comma; - b) Indent three spaces after each inserted newline; - If the statement contains single/double quotes return unchanged, - it is too complex and could be broken by simple formatting. - - - - Represents the the understood types or styles of formatting. - - - Centralize logging handling for SQL statements. - - - Constructs a new SqlStatementLogger instance. - - - Constructs a new SqlStatementLogger instance. - Should we log to STDOUT in addition to our internal logger. - Should we format SQL ('prettify') prior to logging. - - - Log a IDbCommand. - Title - The SQL statement. - The requested formatting style. - - - Log a IDbCommand. - The SQL statement. - The requested formatting style. - - - - Manages prepared statements and batching. Class exists to enforce separation of concerns - - - - - Manages s and s - for an . - - -

            - Abstracts ADO.NET batching to maintain the illusion that a single logical batch - exists for the whole session, even when batching is disabled. - Provides transparent IDbCommand caching. -

            -

            - This will be useful once ADO.NET gets support for batching. Until that point - no code exists that will do batching, but this will provide a good point to do - error checking and making sure the correct number of rows were affected. -

            -
            -
            - - - Get an for using in loading / querying. - - The to convert to an . - The of the command. - The SqlTypes of parameters - in . - - An that is ready to be executed. - - - - If not explicitly released by , it will be - released when the session is closed or disconnected. - - - This does NOT add anything to the batch - it only creates the IDbCommand and - does NOT cause the batch to execute... - - - - - - Get a non-batchable an to use for inserting / deleting / updating. - Must be explicitly released by CloseCommand() - - The to convert to an . - The of the command. - The SqlTypes of parameters - in . - - An that is ready to have the parameter values set - and then executed. - - - - - Close a opened using PrepareCommand() - - The to ensure is closed. - The to ensure is closed. - - - - Close a opened using - - The to ensure is closed. - - - - Get a batchable to use for inserting / deleting / updating - (might be called many times before a single call to ExecuteBatch() - - - After setting parameters, call AddToBatch() - do not execute the statement - explicitly. - - The to convert to an . - The of the command. - The SqlTypes of parameters - in . - - - - - Add an insert / delete / update to the current batch (might be called multiple times - for a single PrepareBatchStatement()) - - Determines whether the number of rows affected by query is correct. - - - - Execute the batch - - - - - Close any query statements that were left lying around - - - Use this method instead of Dispose if the - can be used again. - - - - - Gets an by calling ExecuteReader on the . - - The to execute to get the . - The from the . - - The Batcher is responsible for ensuring that all of the Drivers rules for how many open - s it can have are followed. - - - - - Executes the . - - The to execute. - The number of rows affected. - - The Batcher is responsible for ensuring that all of the Drivers rules for how many open - s it can have are followed. - - - - - Must be called when an exception occurs. - - - - - - Cancel the current query statement - - - - - Gets the value indicating whether there are any open resources - managed by this batcher (IDbCommands or IDataReaders). - - - - - Gets or sets the size of the batch, this can change dynamically by - calling the session's SetBatchSize. - - The size of the batch. - - - - Initializes a new instance of the class. - - The owning this batcher. - - - - - Prepares the for execution in the database. - - - This takes care of hooking the up to an - and if one exists. It will call Prepare if the Driver - supports preparing commands. - - - - - Ensures that the Driver's rules for Multiple Open DataReaders are being followed. - - - - - - - - - - - - - - Adds the expected row count into the batch. - - The number of rows expected to be affected by the query. - - If Batching is not supported, then this is when the Command should be executed. If Batching - is supported then it should hold of on executing the batch until explicitly told to. - - - - - A flag to indicate if Dispose() has been called. - - - - - Finalizer that ensures the object is correctly disposed of. - - - - - Takes care of freeing the managed and unmanaged resources that - this class is responsible for. - - - - - Takes care of freeing the managed and unmanaged resources that - this class is responsible for. - - Indicates if this BatcherImpl is being Disposed of or Finalized. - - If this BatcherImpl is being Finalized (isDisposing==false) then make sure not - to call any methods that could potentially bring this BatcherImpl back to life. - - - - - Gets the current that is contained for this Batch - - The current . - - - - Gets or sets the size of the batch, this can change dynamically by - calling the session's SetBatchSize. - - The size of the batch. - - - - Gets the the Batcher was - created in. - - - The the Batcher was - created in. - - - - - Gets the for this batcher. - - - - Implementation of ColumnNameCache. - - - - Manages the database connection and transaction for an . - - - This class corresponds to ConnectionManager and JDBCContext in Hibernate, - combined. - - - - The batcher managed by this ConnectionManager. - - - - Expected row count. Valid only for batchable expectations. - - - - Factory for instances. - - - - Provide the class of according to the configuration - and the capabilities of the driver. - - - By default, .Net doesn't have any batching capabilities, drivers that does have - batching support. - The BatcherFactory trough session-factory configuration section. - This interface was added in NHibernate for backdraw compatibility to have the ability - to specify a default for a specific . - - - - - An implementation of the - interface that does no batching. - - - - - Initializes a new instance of the class. - - The for this batcher. - - - - - Executes the current and compares the row Count - to the expectedRowCount. - - - The expected number of rows affected by the query. A value of less than 0 - indicates that the number of rows to expect is unknown or should not be a factor. - - - Thrown when there is an expected number of rows to be affected and the - actual number of rows is different. - - - - - This Batcher implementation does not support batching so this is a no-op call. The - actual execution of the is run in the AddToBatch - method. - - - - - - A BatcherFactory implementation which constructs Batcher instances - that do not perform batch operations. - - - - - Summary description for OracleDataClientBatchingBatcher. - By Tomer Avissar - - - - - A ResultSet delegate, responsible for locally caching the columnName-to-columnIndex - resolution that has been found to be inefficient in a few vendor's drivers (i.e., Oracle - and Postgres). - - - - - - Summary description for SqlClientBatchingBatcher. - - - - - Expose the batch functionality in ADO.Net 2.0 - Microsoft in its wisdom decided to make my life hard and mark it internal. - Through the use of Reflection and some delegates magic, I opened up the functionality. - - Observable performance benefits are 50%+ when used, so it is really worth it. - - - - - Append a command to the batch - - - - - - This is required because SqlClient.SqlCommandSet will throw if - the command has no parameters. - - - - - - Executes the batch - - - This seems to be returning the total number of affected rows in all queries - - - - - Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - - 2 - - - - Return the batch command to be executed - - - - - The number of commands batched in this instance - - - - - Any exception that occurs in the O-R persistence layer. - - - Exceptions that occur in the database layer are left as native exceptions. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The message that describes the error. - - - - Initializes a new instance of the class. - - - The exception that is the cause of the current exception. If the innerException parameter - is not a null reference, the current exception is raised in a catch block that handles - the inner exception. - - - - - Initializes a new instance of the class. - - The message that describes the error. - - The exception that is the cause of the current exception. If the innerException parameter - is not a null reference, the current exception is raised in a catch block that handles - the inner exception. - - - - - Initializes a new instance of the class - with serialized data. - - - The that holds the serialized object - data about the exception being thrown. - - - The that contains contextual information about the source or destination. - - - - - CodeDOM-based bytecode provider. - - - - - Retrieve the delegate for this provider - capable of generating reflection optimization components. - - The class to be reflected upon. - All property getters to be accessed via reflection. - All property setters to be accessed via reflection. - The reflection optimization delegate. - - - - The specific factory for this provider capable of - generating run-time proxies for lazy-loading purposes. - - - - - NHibernate's object instaciator. - - - For entities and its implementations. - - - - - Instanciator of NHibernate's collections default types. - - - - - ctor - - The target class - Array of setters - Array of getters - - - - Set up the compiler options - - - - - Add an assembly to the list of ReferencedAssemblies - required to build the class - - - - - - Build the generated code - - Generated code - An instance of the generated class - - - - Check if the property is public - - - If IsPublic==true I can directly set the property - If IsPublic==false I need to use the setter/getter - - - - - - - Generate the required code - - C# code - - - - Represents optimized entity property access. - - - - - Factory that generate object based on IReflectionOptimizer needed to replace the use - of reflection. - - - Used in and - - - - - - Generate the IReflectionOptimizer object - - The target class - Array of setters - Array of getters - if the generation fails - - - - Represents reflection optimization for a particular class. - - - - - Represents optimized entity instantiation. - - - - - Perform instantiation of an instance of the underlying class. - - The new instance. - - - - Class constructor. - - - - - Generates a dynamic method which creates a new instance of - when invoked. - - - - - Generates a dynamic method on the given type. - - - - - Generates a dynamic method on the given type. - - - - - - Interface for instanciate all NHibernate objects. - - - - - Creates an instance of the specified type. - - The type of object to create. - A reference to the created object. - - - - Creates an instance of the specified type. - - The type of object to create. - true if a public or nonpublic default constructor can match; false if only a public default constructor can match. - A reference to the created object. - - - - Creates an instance of the specified type using the constructor - that best matches the specified parameters. - - The type of object to create. - An array of constructor arguments. - A reference to the created object. - - - - Emits an ldc.i4 opcode using the fastest available opcode choice. - - - - - Emits IL to unbox a value type and if null, create a new instance of the value type. - - - This does not work if the value type doesn't have a default constructor - we delegate - that to the ISetter. - - - - - Defines a new delegate type. - - - - - Type factory for collections types. - - - - - Creates a new for an . - - The role the collection is in. - The name of the property in the - owner object containing the collection ID, or if it is - the primary key. - The to use to create the array. - Is embedded in XML (not supported yet) - - An for the specified role. - - - - - Creates a new for an - with bag semantics. - - The role the collection is in. - The name of the property in the - owner object containing the collection ID, or if it is - the primary key. - Is embedded in XML (not supported yet) - - A for the specified role. - - - - - Creates a new for an - with bag semantics. - - The type of elements in the list. - The role the collection is in. - - The name of the property in the owner object containing the collection ID, - or if it is the primary key. - - Is embedded in XML (not supported yet) - - A for the specified role. - - - - - Creates a new for an . - - The role the collection is in. - The name of the property in the - owner object containing the collection ID, or if it is - the primary key. - Is embedded in XML (not supported yet) - - A for the specified role. - - - - - Creates a new for an - with list - semantics. - - The type of elements in the list. - The role the collection is in. - - The name of the property in the - owner object containing the collection ID, or if it is - the primary key. - - Is embedded in XML (not supported yet) - - A for the specified role. - - - - - Creates a new for an - with id-bag semantics. - - The role the collection is in. - The name of the property in the - owner object containing the collection ID, or if it is - the primary key. - Is embedded in XML (not supported yet) - - A for the specified role. - - - - - Creates a new for an - with identifier - bag semantics. - - The type of elements in the list. - The role the collection is in. - The name of the property in the - owner object containing the collection ID, or if it is - the primary key. - - Is embedded in XML (not supported yet) - - A for the specified role. - - - - - Creates a new for an . - - The role the collection is in. - The name of the property in the - owner object containing the collection ID, or if it is - the primary key. - Is embedded in XML (not supported yet) - - A for the specified role. - - - - - Creates a new for an - that is sorted by an . - - The role the collection is in. - The name of the property in the - owner object containing the collection ID, or if it is - the primary key. - The that does the sorting. - Is embedded in XML (not supported yet) - - A for the specified role. - - - - - Creates a new for an . - - The type of elements in the collection. - The role the collection is in. - The name of the property in the - owner object containing the collection ID, or if it is - the primary key. - Is embedded in XML (not supported yet) - A for the specified role. - - - - Creates a new for a sorted . - - The type of elements in the collection. - The role the collection is in. - The name of the property in the - owner object containing the collection ID, or if it is - the primary key. - Is embedded in XML (not supported yet) - The to use for the set. - A for the specified role. - - - - Creates a new for an ordered . - - The type of elements in the collection. - The role the collection is in. - - The name of the property in the owner object containing the collection ID, - or if it is the primary key. - - Is embedded in XML (not supported yet) - A for the specified role. - - - - Creates a new for an . - - The role the collection is in. - - The name of the property in the - owner object containing the collection ID, or if it is - the primary key. - Is embedded in XML (not supported yet) - - A for the specified role. - - - - - Creates a new for an - that maintains insertion order of elements. - - The role the collection is in. - The name of the property in the - owner object containing the collection ID, or if it is - the primary key. - Is embedded in XML (not supported yet) - - A for the specified role. - - - - - Creates a new for an - that is sorted by an . - - The role the collection is in. - The name of the property in the - owner object containing the collection ID, or if it is - the primary key. - The that does the sorting. - Is embedded in XML (not supported yet) - - A for the specified role. - - - - - Creates a new for an - . - - The type of keys in the dictionary. - The type of values in the dictionary. - The role the collection is in. - The name of the property in the - owner object containing the collection ID, or if it is - the primary key. - - Is embedded in XML (not supported yet) - - A for the specified role. - - - - - An interface for factories of proxy factory instances. - - - Used to abstract from the tupizer. - - - - - Build a proxy factory specifically for handling runtime - lazy loading. - - The lazy-load proxy factory. - - - - A implementation that returns - , disabling reflection optimization. - - - - - A cached instance of a persistent class - - - - - An item of cached data, timestamped with the time it was cached, when it was locked, - when it was unlocked - - - - - Caches data that is sometimes updated while maintaining the semantics of - "read committed" isolation level. If the database is set to "repeatable - read", this concurrency strategy almost maintains the semantics. - Repeatable read isolation is compromised in the case of concurrent writes. - This is an "asynchronous" concurrency strategy. - - - If this strategy is used in a cluster, the underlying cache implementation - must support distributed hard locks (which are held only momentarily). This - strategy also assumes that the underlying cache implementation does not do - asynchronous replication and that state has been fully replicated as soon - as the lock is released. - for a faster algorithm - - - - - - Implementors manage transactional access to cached data. - - - - Transactions pass in a timestamp indicating transaction start time. - - - When used to cache entities and collections the key is the identifier of the - entity/collection and the value should be set to the - for an entity and the results of - for a collection. - - - - - - Attempt to retrieve an object from the Cache - - The key (id) of the object to get out of the Cache. - A timestamp prior to the transaction start time - The cached object or - - - - - Attempt to cache an object, after loading from the database - - The key (id) of the object to put in the Cache. - The value - A timestamp prior to the transaction start time - the version number of the object we are putting - a Comparer to be used to compare version numbers - indicates that the cache should avoid a put if the item is already cached - if the object was successfully cached - - - - - We are going to attempt to update/delete the keyed object - - The key - - - This method is used by "asynchronous" concurrency strategies. - - - - Called after an item has become stale (before the transaction completes). - - - - This method is used by "synchronous" concurrency strategies. - - - - Called after an item has been updated (before the transaction completes), - instead of calling Evict(). - - - - - - This method is used by "synchronous" concurrency strategies. - - - - Called after an item has been inserted (before the transaction completes), instead of calling Evict(). - - - - - This method is used by "synchronous" concurrency strategies. - - - - Called when we have finished the attempted update/delete (which may or - may not have been successful), after transaction completion. - - The key - The soft lock - - This method is used by "asynchronous" concurrency strategies. - - - - Called after an item has been updated (after the transaction completes), - instead of calling Release(). - - - - - - This method is used by "asynchronous" concurrency strategies. - - - - Called after an item has been inserted (after the transaction completes), instead of calling release(). - - - - - This method is used by "asynchronous" concurrency strategies. - - - - Evict an item from the cache immediately (without regard for transaction isolation). - - - - - - - Evict all items from the cache immediately. - - - - - - Clean up all resources. - - - - - - Gets the cache region name. - - - - - Gets or sets the for this strategy to use. - - The for this strategy to use. - - - - Generate an id for a new lock. Uniqueness per cache instance is very - desirable but not absolutely critical. Must be called from one of the - synchronized methods of this class. - - - - - - Do not return an item whose timestamp is later than the current - transaction timestamp. (Otherwise we might compromise repeatable - read unnecessarily.) Do not return an item which is soft-locked. - Always go straight to the database instead. - - - Note that since reading an item from that cache does not actually - go to the database, it is possible to see a kind of phantom read - due to the underlying row being updated after we have read it - from the cache. This would not be possible in a lock-based - implementation of repeatable read isolation. It is also possible - to overwrite changes made and committed by another transaction - after the current transaction read the item from the cache. This - problem would be caught by the update-time version-checking, if - the data is versioned or timestamped. - - - - - Stop any other transactions reading or writing this item to/from - the cache. Send them straight to the database instead. (The lock - does time out eventually.) This implementation tracks concurrent - locks by transactions which simultaneously attempt to write to an - item. - - - - - Do not add an item to the cache unless the current transaction - timestamp is later than the timestamp at which the item was - invalidated. (Otherwise, a stale item might be re-added if the - database is operating in repeatable read isolation mode.) - - Whether the item was actually put into the cache - - - - decrement a lock and put it back in the cache - - - - - Re-cache the updated state, if and only if there there are - no other concurrent soft locks. Release our lock. - - - - - Is the client's lock commensurate with the item in the cache? - If it is not, we know that the cache expired the original - lock. - - - - - Gets the cache region name. - - - - - Lock the item - - - - - Is this item visible to the timestamped transaction? - - - - - - - Don't overwrite already cached items - - - - - - - - - The timestamp on the cached data - - - - - The actual cached data - - - - - Not a lock! - - - - - Represents any exception from an . - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The message that describes the error. - - - - Initializes a new instance of the class. - - - The exception that is the cause of the current exception. If the innerException parameter - is not a null reference, the current exception is raised in a catch block that handles - the inner exception. - - - - - Initializes a new instance of the class. - - The message that describes the error. - - The exception that is the cause of the current exception. If the innerException parameter - is not a null reference, the current exception is raised in a catch block that handles - the inner exception. - - - - - Initializes a new instance of the class - with serialized data. - - - The that holds the serialized object - data about the exception being thrown. - - - The that contains contextual information about the source or destination. - - - - - Factory class for creating an . - - - - - No providers implement transactional caching currently, - it was ported from Hibernate just for the sake of completeness. - - - - - Creates an from the parameters. - - The name of the strategy that should use for the class. - The name of the class the strategy is being created for. - if the object being stored in the cache is mutable. - Used to retrieve the global cache region prefix. - Properties the cache provider can use to configure the cache. - An to use for this object in the . - - - - Allows multiple entity classes / collection roles to be - stored in the same cache region. Also allows for composite - keys which do not properly implement equals()/hashCode(). - - - - - Construct a new key for a collection or entity instance. - Note that an entity name should always be the root entity - name, not a subclass entity name. - - The identifier associated with the cached data - The Hibernate type mapping - The entity or collection-role name. - The entiyt mode of the originating session - The session factory for which we are caching - - - - A soft lock which supports concurrent locking, - timestamped with the time it was released - - - This class was named Lock in H2.1 - - - - - Marker interface, denoting a client-visible "soft lock" on a cached item. - - - - - Increment the lock, setting the - new lock timeout - - - - - Decrement the lock, setting the unlock - timestamp if now unlocked - - - - - - Can the timestamped transaction re-cache this - locked item now? - - - - - locks are not returned to the client! - - - - - Was this lock held concurrently by multiple - transactions? - - - - - Yes, this is a lock - - - - - Used by - - - - - Implementors define a caching algorithm. - - - - - All implementations must be threadsafe. - - - The key is the identifier of the object that is being cached and the - value is a . - - - - - - Get the object from the Cache - - - - - - - - - - - - - - Remove an item from the Cache. - - The Key of the Item in the Cache to remove. - - - - - Clear the Cache - - - - - - Clean up. - - - - - - If this is a clustered cache, lock the item - - The Key of the Item in the Cache to lock. - - - - - If this is a clustered cache, unlock the item - - The Key of the Item in the Cache to unlock. - - - - - Generate a timestamp - - - - - - Get a reasonable "lock timeout" - - - - - Gets the name of the cache region - - - - - A simple -based cache - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cache Provider plugin for NHibernate that is configured by using - cache.provider_class="NHibernate.Cache.HashtableCacheProvider" - - - - - Support for pluggable caches - - - - - Configure the cache - - the name of the cache region - configuration settings - - - - - generate a timestamp - - - - - - Callback to perform any necessary initialization of the underlying cache implementation - during ISessionFactory construction. - - current configuration settings - - - - Callback to perform any necessary cleanup of the underlying cache implementation - during . - - - - - Contract for sources of optimistically lockable data sent to the second level cache. - - - Note currently EntityPersisters are - the only viable source. - - - - - Does this source represent versioned (i.e., and thus optimistically lockable) data? - - True if this source represents versioned data; false otherwise. - - - Get the comparator used to compare two different version values together. - An appropriate comparator. - - - - Defines the contract for caches capable of storing query results. These - caches should only concern themselves with storing the matching result ids. - The transactional semantics are necessarily less strict than the semantics - of an item cache. - - - - - Defines a factory for query cache instances. These factories are responsible for - creating individual QueryCache instances. - - - - - A cache provider placeholder used when caching is disabled. - - - - - Configure the cache - - the name of the cache region - configuration settings - - - - - Generate a timestamp - - - - - Callback to perform any necessary initialization of the underlying cache implementation during SessionFactory - construction. - - current configuration settings. - - - - Callback to perform any necessary cleanup of the underlying cache implementation during SessionFactory.close(). - - - - - Caches data that is sometimes updated without ever locking the cache. - If concurrent access to an item is possible, this concurrency strategy - makes no guarantee that the item returned from the cache is the latest - version available in the database. Configure your cache timeout accordingly! - This is an "asynchronous" concurrency strategy. - for a much stricter algorithm - - - - - Get the most recent version, if available. - - - - - Add an item to the cache - - - - - Do nothing - - - - - Invalidate the item - - - - - Invalidate the item - - - - - Do nothing - - - - - Invalidate the item (again, for safety). - - - - - Invalidate the item (again, for safety). - - - - - Do nothing - - - - - Gets the cache region name. - - - - - Initializes a new instance of the class. - - the session factory for this query key, required to get the identifiers of entities that are used as values. - The query string. - The query parameters. - The filters. - - - - Caches data that is never updated - - - - - Unsupported! - - - - - Unsupported! - - - - - Unsupported! - - - - - Do nothing. - - - - - Do nothing. - - - - - Do nothing. - - - - - Unsupported! - - - - - Gets the cache region name. - - - - - The standard implementation of the Hibernate - interface. This implementation is very good at recognizing stale query - results and re-running queries when it detects this condition, recaching - the new results. - - - - - Standard Hibernate implementation of the IQueryCacheFactory interface. Returns - instances of . - - - - - Generates increasing identifiers (in a single application domain only). - - - Not valid across multiple application domains. Identifiers are not necessarily - strictly increasing, but usually are. - - - - - - - - - - - - - - Tracks the timestamps of the most recent updates to particular tables. It is - important that the cache timeout of the underlying cache implementation be set - to a higher value than the timeouts of any of the query caches. In fact, we - recommend that the the underlying cache not be configured for expiry at all. - Note, in particular, that an LRU cache expiry policy is never appropriate. - - - - - - - - Helper to parse hibernate-configuration XmlNode. - - - - - The XML node name for hibernate configuration section in the App.config/Web.config and - for the hibernate.cfg.xml . - - - - The XML Namespace for the nhibernate-configuration - - - XPath expression for bytecode-provider property. - - - XPath expression for reflection-optimizer property. - - - XPath expression for session-factory whole node. - - - XPath expression for session-factory.property nodes - - - XPath expression for session-factory.mapping nodes - - - XPath expression for session-factory.class-cache nodes - - - XPath expression for session-factory.collection-cache nodes - - - XPath expression for session-factory.event nodes - - - XPath expression for session-factory.listener nodes - - - - Convert a string to . - - The string that represent . - - The converted to . - for invalid values. - - - See for allowed values. - - - - - Convert a string to . - - The string that represent . - - The converted to . - - If the values is invalid. - - See for allowed values. - - - - - Convert a string to . - - The string that represent . - - The converted to . - - If the values is invalid. - - See for allowed values. - - - - - Convert a string to . - - The string that represent . - - The converted to . - - If the values is invalid. - - See for allowed values. - - - - - Values for class-cache and collection-cache strategy. - - - - Xml value: read-only - - - Xml value: read-write - - - Xml value: nonstrict-read-write - - - Xml value: transactional - - - - Values for class-cache include. - - Not implemented in Cache. - - - Xml value: all - - - Xml value: non-lazy - - - - Configuration parsed values for a class-cache XML node. - - - - - Initializes a new instance of the class. - - The class full name. - Cache strategy. - When is null or empty. - - - - Initializes a new instance of the class. - - The class full name. - Cache strategy. - Values for class-cache include. - When is null or empty. - - - - Initializes a new instance of the class. - - The class full name. - Cache strategy. - The cache region. - When is null or empty. - - - - Initializes a new instance of the class. - - The class full name. - Cache strategy. - Values for class-cache include. - The cache region. - When is null or empty. - - - - The class full name. - - - - - The cache region. - - If null or empty the is used during configuration. - - - - Cache strategy. - - - - - class-cache include. - - - Not implemented in Cache. - Default value . - - - - - Configuration parsed values for a collection-cache XML node. - - - - - Initializes a new instance of the class. - - The cache role. - Cache strategy. - When is null or empty. - - - - Initializes a new instance of the class. - - The cache role. - Cache strategy. - The cache region. - When is null or empty. - - - - The role. - - - - - The cache region. - - If null or empty the is used during configuration. - - - - Cache strategy. - - - - - Configuration parsed values for a event XML node. - - - - - Initializes a new instance of the class. - - The listener. - The type. - - - - The default type of listeners. - - - - - Listeners for this event. - - - - - Values for bytecode-provider system property. - - - - Xml value: codedom - - - Xml value: lcg - - - Xml value: null - - - - Configuration parsed values for hibernate-configuration section. - - - - - Initializes a new instance of the class. - - The XML reader to parse. - - The nhibernate-configuration.xsd is applied to the XML. - - When nhibernate-configuration.xsd can't be applied. - - - - Value for bytecode-provider system property. - - Default value . - - - - Value for reflection-optimizer system property. - - Default value true. - - - - The if the session-factory exists in hibernate-configuration; - Otherwise null. - - - - - Configuration parsed values for a listener XML node - - - - - Initializes a new instance of the class. - - The class full name. - When is null or empty. - - - - Initializes a new instance of the class. - - The class full name. - The listener type. - When is null or empty. - - - - The class full name. - - - - - The listener type. - - Default value mean that the value is ignored. - - - - Configuration parsed values for a mapping XML node - - - There are 3 possible combinations of mapping attributes - 1 - resource and assembly: NHibernate will read the mapping resource from the specified assembly - 2 - file only: NHibernate will read the mapping from the file. - 3 - assembly only: NHibernate will find all the resources ending in hbm.xml from the assembly. - - - - - Initializes a new instance of the class. - - Mapped file. - When is null or empty. - - - - Initializes a new instance of the class. - - The assembly name. - The mapped embedded resource. - When is null or empty. - - - - Configuration parsed values for a session-factory XML node. - - - - - Initializes a new instance of the class. - - The session factory name. Null or empty string are allowed. - - - - The session factory name. - - - - - Session factory propeties bag. - - - - - Session factory mapping configuration. - - - - - Session factory class-cache configurations. - - - - - Session factory collection-cache configurations. - - - - - Session factory event configurations. - - - - - Session factory listener configurations. - - - - - Responsible for checking that a resource name matches the default pattern of "*.hbm.xml". This is the - default filter for . - - - - - Responsible for determining whether an embedded resource should be parsed for HBM XML data while - iterating through an . - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A base class for HBM schema classes that provides helper methods. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Responsible for converting a of HBM XML into an instance of - . - - - - - Responsible for building a list of objects from a range of acceptable - sources. - - - - - Calls the greedy constructor, passing it new instances of and - . - - - - Adds any embedded resource streams which pass the . - An assembly containing embedded mapping documents. - A custom filter. - - - Adds any embedded resource streams which pass the default filter. - An assembly containing embedded mapping documents. - - - - Responsible for converting a of HBM XML into an instance of - . - - Uses an to deserialize HBM. - - - - Converts a partial class name into a fully qualified one - - - - - - - - Converts a partial class name into a fully one - - - - The class FullName (without the assembly) - - The FullName is equivalent to the default entity-name - - - - - Attempts to find a type by its full name. Throws a - using the provided in case of failure. - - name of the class to find - Error message to use for - the in case of failure. Should contain - the {0} formatting placeholder. - A instance. - - Thrown when there is an error loading the class. - - - - - Similar to , but handles short class names - by calling . - - - - - - - - - Called for all collections. parameter - was added in NH to allow for reflection related to generic types. - - - - - Called for arrays and primitive arrays - - - - - Called for Maps - - - - - Called for all collections - - - - - Extracts the names of classes mapped in a given file, - and the names of the classes they extend. - - - - - Returns a collection of containing - information about all classes in this stream. - - A validated representing - a mapping file. - - - - Holds information about mapped classes found in the hbm.xml files. - - - - - Allows the application to specify properties and mapping documents to be used when creating - a . - - - - Usually an application will create a single , build a single instance - of , and then instantiate objects in threads - servicing client requests. - - - The is meant only as an initialization-time object. - is immutable and does not retain any association back to the - - - - - The XML Namespace for the nhibernate-mapping - - - Default name for hibernate configuration file. - - - - Clear the internal state of the object. - - - - - Create a new Configuration object. - - - - - Get the mapping for a particular class - - - - Get the mapping for a particular entity - An entity name. - the entity mapping information - - - - Get the mapping for a particular collection role - - a collection role - - - - - Read mappings from a particular XML file. This method is equivalent - to . - - - - - - - Read mappings from a particular XML file. - - a path to a file - This configuration object. - - - - Read mappings from a . This method is equivalent to - . - - an XML string - The name to use in error reporting. May be . - This configuration object. - - - - Read mappings from a . - - an XML string - This configuration object. - - - - Read mappings from a URL. - - a URL - This configuration object. - - - - Read mappings from a URL. - - a to read the mappings from. - This configuration object. - - - - Read mappings from an . - - A loaded that contains the mappings. - The name of the document, for error reporting purposes. - This configuration object. - - - - Takes the validated XmlDocument and has the Binder do its work of - creating Mapping objects from the Mapping Xml. - - The NamedXmlDocument that contains the validated mapping XML file. - - - - Create a new to add classes and collection - mappings to. - - - - - Read mappings from a . - - The stream containing XML - This Configuration object. - - The passed in through the parameter - is not guaranteed to be cleaned up by this method. It is the caller's responsiblity to - ensure that is properly handled when this method - completes. - - - - - Read mappings from a . - - The stream containing XML - The name of the stream to use in error reporting. May be . - This Configuration object. - - The passed in through the parameter - is not guaranteed to be cleaned up by this method. It is the caller's responsiblity to - ensure that is properly handled when this method - completes. - - - - - Adds the mappings in the resource of the assembly. - - The path to the resource file in the assembly. - The assembly that contains the resource file. - This configuration object. - - - - Adds the mappings from ebedded resources of the assembly. - - Paths to the resource files in the assembly. - The assembly that contains the resource files. - This configuration object. - - - - Read a mapping from an embedded resource, using a convention. - - The type to map. - This configuration object. - - The convention is for class Foo.Bar.Foo to be mapped by - the resource named Foo.Bar.Foo.hbm.xml, embedded in - the class' assembly. If the mappings and classes are defined - in different assemblies or don't follow the naming convention, - this method cannot be used. - - - - - Adds all of the assembly's embedded resources whose names end with .hbm.xml. - - The name of the assembly to load. - This configuration object. - - The assembly must be loadable using . If this - condition is not satisfied, load the assembly manually and call - instead. - - - - - Adds all of the assembly's embedded resources whose names end with .hbm.xml. - - The assembly. - This configuration object. - - - - Read all mapping documents from a directory tree. Assume that any - file named *.hbm.xml is a mapping document. - - a directory - - - - Generate DDL for dropping tables - - - - - - Generate DDL for creating tables - - - - - - Call this to ensure the mappings are fully compiled/built. Usefull to ensure getting - access to all information in the metamodel when calling e.g. getClassMappings(). - - - - - This method may be called many times!! - - - - - Instantiate a new , using the properties and mappings in this - configuration. The will be immutable, so changes made to the - configuration after building the will not affect it. - - An instance. - - - - Set the default assembly to use for the mappings added to the configuration - afterwards. - - The default assembly name. - This configuration instance. - - This setting can be overridden for a mapping file by setting default-assembly - attribute of <hibernate-mapping> element. - - - - - Set the default namespace to use for the mappings added to the configuration - afterwards. - - The default namespace. - This configuration instance. - - This setting can be overridden for a mapping file by setting default-namespace - attribute of <hibernate-mapping> element. - - - - - Sets the default interceptor for use by all sessions. - - The default interceptor. - This configuration instance. - - - - Specify a completely new set of properties - - - - - Adds an of configuration properties. The - Key is the name of the Property and the Value is the - value of the Property. - - An of configuration properties. - - This object. - - - - - Sets the value of the configuration property. - - The name of the property. - The value of the property. - - This configuration object. - - - - - Gets the value of the configuration property. - - The name of the property. - The configured value of the property, or if the property was not specified. - - - - Configure NHibernate using the <hibernate-configuration> section - from the application config file, if found, or the file hibernate.cfg.xml if the - <hibernate-configuration> section not include the session-factory configuration. - - A configuration object initialized with the file. - - To configure NHibernate explicitly using hibernate.cfg.xml, appling merge/override - of the application configuration file, use this code: - - configuration.Configure("path/to/hibernate.cfg.xml"); - - - - - - Configure NHibernate using the file specified. - - The location of the XML file to use to configure NHibernate. - A Configuration object initialized with the file. - - Calling Configure(string) will override/merge the values set in app.config or web.config - - - - - Configure NHibernate using a resource contained in an Assembly. - - The that contains the resource. - The name of the manifest resource being requested. - A Configuration object initialized from the manifest resource. - - Calling Configure(Assembly, string) will overwrite the values set in app.config or web.config - - - - - Configure NHibernate using the specified XmlReader. - - The that contains the Xml to configure NHibernate. - A Configuration object initialized with the file. - - Calling Configure(XmlReader) will overwrite the values set in app.config or web.config - - - - - Set up a cache for an entity class - - - - - Set up a cache for a collection role - - - - - Create an object-oriented view of the configuration properties - - A object initialized from the settings properties. - - - - Set a custom naming strategy - - the NamingStrategy to set - - - - - Load and validate the mappings in the against - the nhibernate-mapping-2.2 schema, without adding them to the configuration. - - - This method is made public to be usable from the unit tests. It is not intended - to be called by end users. - - The XmlReader that contains the mapping. - The name of the document, for error reporting purposes. - NamedXmlDocument containing the validated XmlDocument built from the XmlReader. - - - - Adds the Mappings in the after validating it - against the nhibernate-mapping-2.2 schema. - - The XmlReader that contains the mapping. - This Configuration object. - - - - Adds the Mappings in the after validating it - against the nhibernate-mapping-2.2 schema. - - The XmlReader that contains the mapping. - The name of the document to use for error reporting. May be . - This Configuration object. - - - - Set or clear listener for a given . - - The . - The array of AssemblyQualifiedName of each listener for . - - must implements the interface related with . - All listeners of the given will be cleared if the - is null or empty. - - - when an element of have an invalid value or cant be instantiated. - - - - - Set or clear listener for a given . - - The . - The listener for or null to clear. - must implements the interface related with . - - - - - Set or clear listeners for a given . - - The . - The listener for or null to clear. - Listeners of must implements one of the interface of event listenesr. - - - - - Generate DDL for altering tables - - - - - - The class mappings - - - - - The collection mappings - - - - - The table mappings - - - - - The named queries - - - - - Retrieve the user-supplied delegate to handle non-existent entity scenarios. - - - Specify a user-supplied delegate to be used to handle scenarios where an entity could not be - located by specified id. This is mainly intended for EJB3 implementations to be able to - control how proxy initialization errors should be handled... - - - - - Gets or sets the to use. - - The to use. - - - - Gets or sets the that contains the configuration - properties and their values. - - - The that contains the configuration - properties and their values. - - - - - Get the query language imports (entityName/className -> AssemblyQualifiedName) - - - - - The named SQL queries - - - - - Naming strategy for tables and columns - - - - - Defines operations common to "compiled" mappings (ie. SessionFactory) and - "uncompiled" mappings (ie Configuration that are used by implementors of IType - - - - - Summary description for ConfigurationSectionHandler. - - - - - The default - - See for a better alternative - - - - A set of rules for determining the physical column and table names given the information in the mapping - document. May be used to implement project-scoped naming standards for database objects. - - - - - Return a table name for an entity class - - the fully-qualified class name - a table name - - - - Return a column name for a property path expression - - a property path - a column name - - - - Alter the table name given in the mapping document - - a table name - a table name - - - - Alter the column name given in the mapping document - - a column name - a column name - - - - Return a table name for a collection - - the fully-qualified name of the owning entity class - a property path - a table name - - - - Return the logical column name used to refer to a column in the metadata - (like index, unique constraints etc) - A full bijection is required between logicalNames and physical ones - logicalName have to be case insersitively unique for a given table - - given column name if any - property name of this column - - - - The singleton instance - - - - - Return the unqualified class name - - - - - - - Return the unqualified property name - - - - - - - Return the argument - - - - - - - Return the argument - - - - - - - Return the unqualified property name - - - - - - - - Provides access to configuration information. - - - NHibernate has two property scopes: - - - Factory-level properties may be passed to the when it is - instantiated. Each instance might have different property values. If no properties are - specified, the factory gets them from Environment - - - System-level properties are shared by all factory instances and are always determined - by the properties - - - In NHibernate, <hibernate-configuration> section in the application configuration file - corresponds to Java system-level properties; <session-factory> - section is the session-factory-level configuration. - - It is possible to use the application configuration file (App.config) together with the NHibernate - configuration file (hibernate.cfg.xml) at the same time. - Properties in hibernate.cfg.xml override/merge properties in application configuration file where same - property is found. For others configuration a merge is applied. - - - - - Used to find the .Net 2.0 named connection string - - - - A default database schema (owner) name to use for unqualified tablenames - - - A default database catalog name to use for unqualified tablenames - - - The EntityMode in which set the Session opened from the SessionFactory. - - - Enable formatting of SQL logged to the console - - - Should named queries be checked during startup (the default is enabled). - Mainly intended for test environments. - - - Enable statistics collection - - - - Issue warnings to user when any obsolete property names are used. - - - - - - - NHibernate version (informational). - - - - - Gets a copy of the configuration found in <hibernate-configuration> section - of app.config/web.config. - - - This is the replacement for hibernate.properties - - - - - The bytecode provider to use. - - - This property is read from the <nhibernate> section - of the application configuration file by default. Since it is not - always convenient to configure NHibernate through the application - configuration file, it is also possible to set the property value - manually. This should only be done before a configuration object - is created, otherwise the change may not take effect. - - - - - Whether to enable the use of reflection optimizer - - - This property is read from the <nhibernate> section - of the application configuration file by default. Since it is not - always convenient to configure NHibernate through the application - configuration file, it is also possible to set the property value - manually. This should only be done before a configuration object - is created, otherwise the change may not take effect. - - - - - Represents a mapping queued for delayed processing to await - processing of an extends entity upon which it depends. - - - - - An exception that occurs at configuration time, rather than runtime, as a result of - something screwy in the hibernate.cfg.xml. - - - - - An exception that usually occurs at configuration time, rather than runtime, as a result of - something screwy in the O-R mappings - - - - - Initializes a new instance of the class. - - The message that describes the error. - - - - Initializes a new instance of the class. - - - The exception that is the cause of the current exception. If the innerException parameter - is not a null reference, the current exception is raised in a catch block that handles - the inner exception. - - - - - Initializes a new instance of the class. - - The message that describes the error. - - The exception that is the cause of the current exception. If the innerException parameter - is not a null reference, the current exception is raised in a catch block that handles - the inner exception. - - - - - Initializes a new instance of the class - with serialized data. - - - The that holds the serialized object - data about the exception being thrown. - - - The that contains contextual information about the source or destination. - - - - - Initializes a new instance of the class. - - Default message is used. - - - - Initializes a new instance of the class. - - - The exception that is the cause of the current exception. If the innerException parameter - is not a null reference, the current exception is raised in a catch block that handles - the inner exception. - - - - - Initializes a new instance of the class. - - The message that describes the error. - - - - Initializes a new instance of the class. - - The message that describes the error. - - The exception that is the cause of the current exception. If the innerException parameter - is not a null reference, the current exception is raised in a catch block that handles - the inner exception. - - - - - Initializes a new instance of the class - with serialized data. - - - The that holds the serialized object - data about the exception being thrown. - - - The that contains contextual information about the source or destination. - - - - - Summary description for ImprovedNamingStrategy. - - - - - The singleton instance - - - - - Return the unqualified class name, mixed case converted to underscores - - - - - - - Return the full property path with underscore separators, mixed case converted to underscores - - - - - - - Convert mixed case to underscores - - - - - - - Convert mixed case to underscores - - - - - - - Return the full property path prefixed by the unqualified class name, with underscore separators, mixed case converted to underscores - - - - - - - - A collection of mappings from classes and collections to relational database tables. - - Represents a single <hibernate-mapping> element. - - - - Binding table between the logical column name and the name out of the naming strategy - for each table. - According that when the column name is not set, the property name is considered as such - This means that while theoretically possible through the naming strategy contract, it is - forbidden to have 2 real columns having the same logical name - - - - - Binding between logical table name and physical one (ie after the naming strategy has been applied) - - - - - - - - - - - - - - - - - Adds an import to allow for the full class name Namespace.Entity (AssemblyQualifiedName) - to be referenced as Entity or some other name in HQL. - - The name of the type that is being renamed. - The new name to use in HQL for the type. - Thrown when the rename already identifies another type. - - - - - - - - - The default namespace for persistent classes - - - - - The default assembly for persistent classes - - - - - - - - - - - Gets or sets a boolean indicating if the Fully Qualified Type name should - automatically have an import added as the class name. - - if the class name should be used as an import. - - Auto-import is used to shorten the string used to refer to types to just their - unqualified name. So if the type MyAssembly.MyNamespace.MyClass, MyAssembly has - auto-import="false" then all use of it in HQL would need to be the fully qualified - version MyAssembly.MyNamespace.MyClass. If auto-import="true", the type could - be referred to in HQL as just MyClass. - - - - - Queues mapping files according to their dependency order. - - - - - Adds the specified document to the queue. - - - - - Gets a that can now be processed (i.e. - that doesn't depend on classes not yet processed). - - - - - - Checks that no unprocessed documents remain in the queue. - - - - - Holds information about mapped classes found in an embedded resource - - - - - Gets the names of all entities outside this resource - needed by the classes in this resource. - - - - - Gets the names of all entities in this resource - - - - - Settings that affect the behavior of NHibernate at runtime. - - - - - Reads configuration properties and configures a instance. - - - - - Provides callbacks from the to the persistent object. Persistent classes may - implement this interface but they are not required to. - - - - , , and are intended to be used - to cascade saves and deletions of dependent objects. This is an alternative to declaring cascaded - operations in the mapping file. - - - may be used to initialize transient properties of the object from its persistent - state. It may not be used to load dependent objects since the interface - may not be invoked from inside this method. - - - A further intended usage of , , and - is to store a reference to the for later use. - - - If , , or return - , the operation is silently vetoed. If a - is thrown, the operation is vetoed and the exception is passed back to the application. - - - Note that is called after an identifier is assigned to the object, except when - identity key generation is used. - - - - - - Called when an entity is saved - - The session - If we should veto the save - - - - Called when an entity is passed to . - - The session - A value indicating whether the operation - should be vetoed or allowed to proceed. - - This method is not called every time the object's state is - persisted during a flush. - - - - - Called when an entity is deleted - - The session - A value indicating whether the operation - should be vetoed or allowed to proceed. - - - - Called after an entity is loaded. - - - It is illegal to access the from inside this method.. - However, the object may keep a reference to the session for later use - - The session - The identifier - - - - Veto the action - - - - - Accept the action - - - - - Implemented by persistent classes with invariants that must be checked before inserting - into or updating the database - - - - - Validate the state of the object before persisting it. If a violation occurs, - throw a . This method must not change the state of the object - by side-effect. - - - - - Thrown from when an invariant was violated. Some applications - might subclass this exception in order to provide more information about the violation - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The message that describes the error. - - - - Initializes a new instance of the class. - - - The exception that is the cause of the current exception. If the innerException parameter - is not a null reference, the current exception is raised in a catch block that handles - the inner exception. - - - - - Initializes a new instance of the class. - - The message that describes the error. - - The exception that is the cause of the current exception. If the innerException parameter - is not a null reference, the current exception is raised in a catch block that handles - the inner exception. - - - - - Initializes a new instance of the class - with serialized data. - - - The that holds the serialized object - data about the exception being thrown. - - - The that contains contextual information about the source or destination. - - - - - An unordered, unkeyed collection that can contain the same element - multiple times. The .NET collections API, has no Bag. - Most developers seem to use to represent bag semantics, - so NHibernate follows this practice. - - The type of the element the bag should hold. - The underlying collection used is an - - - - An unordered, unkeyed collection that can contain the same element - multiple times. The .NET collections API has no Bag class. - Most developers seem to use s to represent bag semantics, - so NHibernate follows this practice. - - - - - Base class for implementing . - - - - - - Persistent collections are treated as value objects by NHibernate. - ie. they have no independent existence beyond the object holding - a reference to them. Unlike instances of entity classes, they are - automatically deleted when unreferenced and automatically become - persistent when held by a persistent object. Collections can be - passed between different objects (change "roles") and this might - cause their elements to move from one database table to another. - - - NHibernate "wraps" a collection in an instance of - . This mechanism is designed - to support tracking of changes to the collection's persistent - state and lazy instantiation of collection elements. The downside - is that only certain abstract collection types are supported and - any extra semantics are lost. - - - Applications should never use classes in this namespace - directly, unless extending the "framework" here. - - - Changes to structure of the collection are recorded by the - collection calling back to the session. Changes to mutable - elements (ie. composite elements) are discovered by cloning their - state when the collection is initialized and comparing at flush - time. - - - - - - Return the user-visible collection (or array) instance - - - By default, the NHibernate wrapper is an acceptable collection for - the end user code to work with because it is interface compatible. - An NHibernate PersistentList is an IList, an NHibernate PersistentMap is an IDictionary - and those are the types user code is expecting. - - - - After flushing, re-init snapshot state. - - - - Clears out any Queued Additions. - - - After a Flush() the database is in synch with the in-memory - contents of the Collection. Since everything is in synch remove - any Queued Additions. - - - - - Called just before reading any rows from the - - - - - Called after reading all rows from the - - - This should be overridden by sub collections that use temporary collections - to store values read from the db. - - - true if NOT has Queued operations - - - - - Called after initializing from cache - - - true if NOT has Queued operations - - - - - Disassociate this collection from the given session. - - - true if this was currently associated with the given session - - - - Associate the collection with the given session. - - - false if the collection was already associated with the session - - - - Read the state of the collection from a disassembled cached value. - - - - - - - - Iterate all collection entries, during update of the database - - - An that gives access to all entries - in the collection. - - - - - Reads the row from the . - - - This method should be prepared to handle duplicate elements caused by fetching multiple collections, - or should be updated - to return for the collection type. - - The IDataReader that contains the value of the Identifier - The persister for this Collection. - The descriptor providing result set column names - The owner of this Collection. - The object that was contained in the row. - - - - Get the identifier of the given collection entry - - - - - Get the index of the given collection entry - - - - - Get the value of the given collection entry - - - - - Get the snapshot value of the given collection entry - - - - - Called before any elements are read into the collection, - allowing appropriate initializations to occur. - - The for this persistent collection. - The anticipated size of the collection after initilization is complete. - - - - Does the current state exactly match the snapshot? - - The to compare the elements of the Collection. - - if the wrapped collection is different than the snapshot - of the collection or if one of the elements in the collection is - dirty. - - - - Is the snapshot empty? - - - - Disassemble the collection, ready for the cache - - The for this Collection. - The contents of the persistent collection in a cacheable form. - - - - Gets a indicating if the rows for this collection - need to be recreated in the table. - - The for this Collection. - - by default since most collections can determine which rows need to be - individually updated/inserted/deleted. Currently only 's for many-to-many - need to be recreated. - - - - - Return a new snapshot of the current state of the collection - - - - - To be called internally by the session, forcing - immediate initalization. - - - This method is similar to , except that different exceptions are thrown. - - - - - Does an element exist at this entry in the collection? - - - - - Do we need to insert this element? - - - - - Do we need to update this element? - - - - - Get all the elements that need deleting - - - - - Is this the wrapper for the given underlying collection instance? - - The collection to see if this IPersistentCollection is wrapping. - - if the IPersistentCollection is wrappping the collection instance, - otherwise. - - - - Get the "queued" orphans - - - - Clear the dirty flag, after flushing changes - to the database. - - - - - Mark the collection as dirty - - - - - Called before inserting rows, to ensure that any surrogate keys are fully generated - - - - - - Called after inserting a row, to fetch the natively generated id - - - - - Get all "orphaned" elements - - The snapshot of the collection. - The persistent class whose objects - the collection is expected to contain. - - An that contains all of the elements - that have been orphaned. - - - - - The owning entity. - - - Note that the owner is only set during the flush - cycle, and when a new collection wrapper is created - while loading an entity. - - - - Get the current collection key value - - - Get the current role name - - - Is the collection unreferenced? - - - - Is the collection dirty? Note that this is only - reliable during the flush cycle, after the - collection elements are dirty checked against - the snapshot. - - - - Get the snapshot cached by the collection instance - - - - Is the initialized collection empty? - - - - - Gets a indicating if the underlying collection is directly - accessible through code. - - - if we are not guaranteed that the NHibernate collection wrapper - is being used. - - - This is typically whenever a transient object that contains a collection is being - associated with an through or . - NHibernate can't guarantee that it will know about all operations that would cause NHibernate's collections - to call or . - - - - - - - - - - - - - - Not called by Hibernate, but used by non-NET serialization, eg. SOAP libraries. - - - - - Return the user-visible collection (or array) instance - - - By default, the NHibernate wrapper is an acceptable collection for - the end user code to work with because it is interface compatible. - An NHibernate PersistentList is an IList, an NHibernate PersistentMap is an IDictionary - and those are the types user code is expecting. - - - - - Called by any read-only method of the collection interface - - - - Called by the Count property - - - - Called by any writer method of the collection interface - - - - - Queue an addition, delete etc. if the persistent collection supports it - - - - - After reading all existing elements from the database, - add the queued elements to the underlying collection. - - - - - Clears out any Queued operation. - - - After flushing, clear any "queued" additions, since the - database state is now synchronized with the memory state. - - - - - Called just before reading any rows from the - - - - - Called after reading all rows from the - - - This should be overridden by sub collections that use temporary collections - to store values read from the db. - - - - - Initialize the collection, if possible, wrapping any exceptions - in a runtime exception - - currently obsolete - if we cannot initialize - - - - Mark the collection as initialized. - - - - - Disassociate this collection from the given session. - - - true if this was currently associated with the given session - - - - Associate the collection with the given session. - - - false if the collection was already associated with the session - - - - Gets a indicating if the rows for this collection - need to be recreated in the table. - - The for this Collection. - - by default since most collections can determine which rows need to be - individually updated/inserted/deleted. Currently only 's for many-to-many - need to be recreated. - - - - - To be called internally by the session, forcing - immediate initalization. - - - This method is similar to , except that different exceptions are thrown. - - - - - Gets the Snapshot from the current session the collection is in. - - - - - Called before inserting rows, to ensure that any surrogate keys are fully generated - - - - - - Called after inserting a row, to fetch the natively generated id - - - - - Get all "orphaned" elements - - - - - Given a collection of entity instances that used to - belong to the collection, and a collection of instances - that currently belong, return a collection of orphans - - - - - Disassemble the collection, ready for the cache - - - - - - - Is this the wrapper for the given underlying collection instance? - - - - - - - Does an element exist at this entry in the collection? - - - - - - - - Get all the elements that need deleting - - - - - Read the state of the collection from a disassembled cached value. - - - - - - - - Do we need to update this element? - - - - - - - - - Reads the row from the . - - The IDataReader that contains the value of the Identifier - The persister for this Collection. - The descriptor providing result set column names - The owner of this Collection. - The object that was contained in the row. - - - - Do we need to insert this element? - - - - - - - - - Get the index of the given collection entry - - - - - Called before any elements are read into the collection, - allowing appropriate initializations to occur. - - The underlying collection persister. - The anticipated size of the collection after initilization is complete. - - - - Is the collection currently connected to an open session? - - - - - Is this collection in a state that would allow us to "queue" additions? - - - - Is this collection in a state that would allow us to - "queue" puts? This is a special case, because of orphan - delete. - - - - Is this collection in a state that would allow us to - "queue" clear? This is a special case, because of orphan - delete. - - - - Is this the "inverse" end of a bidirectional association? - - - - Is this the "inverse" end of a bidirectional association with - no orphan delete enabled? - - - - - Is this the "inverse" end of a bidirectional one-to-many, or - of a collection with no orphan delete? - - - - - - - - Is the initialized collection empty? - - - - - Gets a indicating if the underlying collection is directly - accessible through code. - - - if we are not guaranteed that the NHibernate collection wrapper - is being used. - - - This is typically whenever a transient object that contains a collection is being - associated with an through or . - NHibernate can't guarantee that it will know about all operations that would cause NHibernate's collections - to call or . - - - - Is this instance initialized? - - - Does this instance have any "queued" additions? - - - - - - - Counts the number of times that the occurs - in the . - - The element to find in the list. - The to search. - The that can determine equality. - The entity mode. - - The number of occurrences of the element in the list. - - - - - Initializes this PersistentBag from the cached values. - - The CollectionPersister to use to reassemble the PersistentBag. - The disassembled PersistentBag. - The owner object. - - - - Gets a indicating if this PersistentBag needs to be recreated - in the database. - - - - if this is a one-to-many Bag, if this is not - a one-to-many Bag. Since a Bag is an unordered, unindexed collection - that permits duplicates it is not possible to determine what has changed in a - many-to-many so it is just recreated. - - - - - Implements "bag" semantics more efficiently than by adding - a synthetic identifier column to the table. - - - - The identifier is unique for all rows in the table, allowing very efficient - updates and deletes. The value of the identifier is never exposed to the - application. - - - Identifier bags may not be used for a many-to-one association. Furthermore, - there is no reason to use inverse="true". - - - - - - Implements "bag" semantics more efficiently than a regular - by adding a synthetic identifier column to the table. - - - - The identifier is unique for all rows in the table, allowing very efficient - updates and deletes. The value of the identifier is never exposed to the - application. - - - PersistentIdentifierBags may not be used for a many-to-one association. - Furthermore, there is no reason to use inverse="true". - - - - - - Initializes this Bag from the cached values. - - The CollectionPersister to use to reassemble the PersistentIdentifierBag. - The disassembled PersistentIdentifierBag. - The owner object. - - - - A persistent wrapper for an - - The type of the element the list should hold. - The underlying collection used is a - - - - A persistent wrapper for an - - - The underlying collection used in an . - - - - - Initializes an instance of the - in the . - - The the list is in. - - - - Initializes an instance of the - that wraps an existing in the . - - The the list is in. - The to wrap. - - - - Initializes this PersistentList from the cached values. - - The CollectionPersister to use to reassemble the PersistentList. - The disassembled PersistentList. - The owner object. - - - - A persistent wrapper for a . Underlying - collection is a - - The type of the keys in the IDictionary. - The type of the elements in the IDictionary. - - - - A persistent wrapper for a . Underlying collection - is a . - - - - - Construct an uninitialized PersistentMap. - - The ISession the PersistentMap should be a part of. - - - - Construct an initialized PersistentMap based off the values from the existing IDictionary. - - The ISession the PersistentMap should be a part of. - The IDictionary that contains the initial values. - - - - Initializes this PersistentMap from the cached values. - - The CollectionPersister to use to reassemble the PersistentMap. - The disassembled PersistentMap. - The owner object. - - - - .NET has no design equivalent for Java's Set so we are going to use the - Iesi.Collections library. This class is internal to NHibernate and shouldn't - be used by user code. - - - The code for the Iesi.Collections library was taken from the article - Add Support for "Set" Collections - to .NET that was written by JasonSmith. - - - - - .NET has no design equivalent for Java's Set so we are going to use the - Iesi.Collections library. This class is internal to NHibernate and shouldn't - be used by user code. - - - The code for the Iesi.Collections library was taken from the article - Add Support for "Set" Collections - to .NET that was written by JasonSmith. - - - - - The that NHibernate is wrapping. - - - - - A temporary list that holds the objects while the PersistentSet is being - populated from the database. - - - This is necessary to ensure that the object being added to the PersistentSet doesn't - have its' GetHashCode() and Equals() methods called during the load - process. - - - - - Constructor matching super. - Instantiates a lazy set (the underlying set is un-initialized). - - The session to which this set will belong. - - - - Instantiates a non-lazy set (the underlying set is constructed - from the incoming set reference). - - The session to which this set will belong. - The underlying set data. - - - - Initializes this PersistentSet from the cached values. - - The CollectionPersister to use to reassemble the PersistentSet. - The disassembled PersistentSet. - The owner object. - - - - Set up the temporary List that will be used in the EndRead() - to fully create the set. - - - - - Takes the contents stored in the temporary list created during BeginRead() - that was populated during ReadFrom() and write it to the underlying - PersistentSet. - - - - - A persistent wrapper for an array. lazy initialization is NOT supported - - Use of Hibernate arrays is not really recommended. - - - - A temporary list that holds the objects while the PersistentArrayHolder is being - populated from the database. - - - - - Returns the user-visible portion of the NHibernate PersistentArrayHolder. - - - The array that contains the data, not the NHibernate wrapper. - - - - - Before is called the PersistentArrayHolder needs to setup - a temporary list to hold the objects. - - - - - Takes the contents stored in the temporary list created during - that was populated during and write it to the underlying - array. - - - - - Initializes this array holder from the cached values. - - The CollectionPersister to use to reassemble the Array. - The disassembled Array. - The owner object. - - - - Gets or sets the array. - - The array. - - - - The base class for the ConnectionProvider. - - - - - A strategy for obtaining ADO.NET . - - - The IConnectionProvider interface is not intended to be exposed to the application. - Instead it is used internally by NHibernate to obtain . - Implementors should provide a public default constructor. - - - - - Initialize the connection provider from the given properties. - - The connection provider settings - - - - Dispose of a used - - The to clean up. - - - - Get an open . - - An open . - - - - Gets the this ConnectionProvider should use to - communicate with the .NET Data Provider - - - The to communicate with the .NET Data Provider. - - - - - Closes the . - - The to clean up. - - - - Configures the ConnectionProvider with the Driver and the ConnectionString. - - An that contains the settings for this ConnectionProvider. - - Thrown when a could not be found - in the settings parameter or the Driver Class could not be loaded. - - - - - Get the .NET 2.0 named connection string - - - Thrown when a was found - in the settings parameter but could not be found in the app.config - - - - - Configures the driver for the ConnectionProvider. - - An that contains the settings for the Driver. - - Thrown when the could not be - found in the settings parameter or there is a problem with creating - the . - - - - - Get an open . - - An open . - - - - A flag to indicate if Disose() has been called. - - - - - Finalizer that ensures the object is correctly disposed of. - - - - - Takes care of freeing the managed and unmanaged resources that - this class is responsible for. - - - - - Takes care of freeing the managed and unmanaged resources that - this class is responsible for. - - Indicates if this ConnectionProvider is being Disposed of or Finalized. - -

            - If this ConnectionProvider is being Finalized (isDisposing==false) then make - sure not to call any methods that could potentially bring this - ConnectionProvider back to life. -

            -

            - If any subclasses manage resources that also need to be disposed of this method - should be overridden, but don't forget to call it in the override. -

            -
            -
            - - - Gets the for the - to connect to the database. - - - The for the - to connect to the database. - - - - - Gets the that can create the object. - - - The that can create the . - - - - - Instanciates a connection provider given configuration properties. - - - - - A ConnectionProvider that uses an IDriver to create connections. - - - - - Closes and Disposes of the . - - The to clean up. - - - - Gets a new open through - the . - - - An Open . - - - If there is any problem creating or opening the . - - - - - An implementation of the IConnectionProvider that simply throws an exception when - a connection is requested. - - - This implementation indicates that the user is expected to supply an ADO.NET connection - - - - - Throws an if this method is called - because the user is responsible for closing s. - - The to clean up. - - Thrown when this method is called. User is responsible for closing - s. - - - - - Throws an if this method is called - because the user is responsible for creating s. - - - No value is returned because an is thrown. - - - Thrown when this method is called. User is responsible for creating - s. - - - - - Configures the ConnectionProvider with only the Driver class. - - - - All other settings of the Connection are the responsibility of the User since they configured - NHibernate to use a Connection supplied by the User. - - - - - Provides a current session - for each . - Not recommended for .NET 2.0 web applications. - - - - - Extends the contract defined by - by providing methods to bind and unbind sessions to the current context. - - - The notion of a contextual session is managed by some external entity - (generally some form of interceptor like the HttpModule). - This external manager is responsible for scoping these contextual sessions - appropriately binding/unbinding them here for exposure to the application - through calls. - - - - - Defines the contract for implementations which know how to - scope the notion of a current session. - - - - Implementations should adhere to the following: - - contain a constructor accepting a single argument of type - - should be thread safe - should be fully serializable - - - - Implementors should be aware that they are also fully responsible for - cleanup of any generated current-sessions. - - - Note that there will be exactly one instance of the configured - ICurrentSessionContext implementation per . - - - It is recommended to inherit from the class - whenever possible as it simplifies the implementation and provides - single entry point with session binding support. - - - - - - Retrieve the current session according to the scoping defined - by this implementation. - - The current session. - Typically indicates an issue - locating or creating the current session. - - - - Retrieve the current session according to the scoping defined - by this implementation. - - The current session. - Indicates an issue - locating the current session. - - - - Binds the specified session to the current context. - - - - - Returns whether there is a session bound to the current context. - - - - - Unbinds and returns the current session. - - - - Gets or sets the currently bound session. - - - - Get the dicitonary mapping session factory to its current session. - - - - - Set the map mapping session factory to its current session. - - - - - Gets or sets the currently bound session. - - - - - The key is the session factory and the value is the bound session. - - - - - The key is the session factory and the value is the bound session. - - - - - Provides a current session - for each . - Works only with Web Applications. - - - - - A impl which scopes the notion of current - session by the current thread of execution. Threads do not give us a - nice hook to perform any type of cleanup making - it questionable for this impl to actually generate Session instances. In - the interest of usability, it was decided to have this default impl - actually generate a session upon first request and then clean it up - after the associated with that session - is committed/rolled-back. In order for ensuring that happens, the sessions - generated here are unusable until after {@link Session#beginTransaction()} - has been called. If Close() is called on a session managed by - this class, it will be automatically unbound. -

            - Additionally, the static and methods are - provided to allow application code to explicitly control opening and - closing of these sessions. This, with some from of interception, - is the preferred approach. It also allows easy framework integration - and one possible approach for implementing long-sessions. -

            -

            -
            - - - Unassociate a previously bound session from the current thread of execution. - - - - - - - Provides a current session - for each thread using the []. - To avoid if there are two session factories in the same thread. - - - - Gets or sets the currently bound session. - - - - Provides a current session - for each . Works only with web applications. - - - - - Base class for implementations. - - - - - An object-oriented representation of a query criterion that may be used as a constraint - in a query. - - - Built-in criterion types are provided by the Expression factory class. - This interface might be implemented by application classes but, more commonly, application - criterion types would extend AbstractCriterion. - - - - - Render a SqlString fragment for the expression. - - A SqlString that contains a valid Sql fragment. - - - - Return typed values for all parameters in the rendered SQL fragment - - An array of TypedValues for the Expression. - - - - Return all projections used in this criterion - - An array of IProjection used by the Expression. - - - - Gets a string representation of the . - - - A String that shows the contents of the . - - - This is not a well formed Sql fragment. It is useful for logging what the - looks like. - - - - - Render a SqlString for the expression. - - A SqlString that contains a valid Sql fragment. - - - - Return typed values for all parameters in the rendered SQL fragment - - An array of TypedValues for the Expression. - - - - Return all projections used in this criterion - - An array of IProjection used by the Expression. - - - - See here for details: - http://steve.emxsoftware.com/NET/Overloading+the++and++operators - - - - - See here for details: - http://steve.emxsoftware.com/NET/Overloading+the++and++operators - - - - - See here for details: - http://steve.emxsoftware.com/NET/Overloading+the++and++operators - - - - - See here for details: - http://steve.emxsoftware.com/NET/Overloading+the++and++operators - - - - - An Aggregation - - - - - A single-column projection that may be aliased - - - - - Render the SQL Fragment. - - The criteria. - The position. - The criteria query. - The enabled filters. - - - - - Render the SQL Fragment to be used in the Group By Clause. - - The criteria. - The criteria query. - The enabled filters. - - - - - Return types for a particular user-visible alias - - - - - - - - - - - - - - - - - Get the SQL select clause column aliases for a particular user-visible alias - - - - - - - Get the SQL select clause column aliases for a particular user-visible alias - - - - - - - - Gets the typed values for parameters in this projection - - The criteria. - The criteria query. - - - - - Get the user-visible aliases for this projection (ie. the ones that will be passed to the ResultTransformer) - - - - - Does this projection specify grouping attributes? - - - - - Does this projection specify aggregate attributes? - - - - - Gets the typed values for parameters in this projection - - The criteria. - The criteria query. - - - - - Gets the typed values for parameters in this projection - - The criteria. - The criteria query. - - - - - An that combines two s - with an and between them. - - - - - An that combines two s - with a operator (either "and" or "or") between them. - - - - - Initialize a new instance of the class that - combines two other s. - - The to use in the Left Hand Side. - The to use in the Right Hand Side. - - - - Combines the for the Left Hand Side and the - Right Hand Side of the Expression into one array. - - An array of s. - - - - Converts the LogicalExpression to a . - - A well formed SqlString for the Where clause. - The SqlString will be enclosed by ( and ). - - - - Gets a string representation of the LogicalExpression. - - - The String contains the LeftHandSide.ToString() and the RightHandSide.ToString() - joined by the Op. - - - This is not a well formed Sql fragment. It is useful for logging what Expressions - are being combined. - - - - - Gets the that will be on the Left Hand Side of the Op. - - - - - Gets the that will be on the Right Hand Side of the Op. - - - - - Get the Sql operator to put between the two s. - - - - - Initializes a new instance of the class - that combines two . - - The to use as the left hand side. - The to use as the right hand side. - - - - Get the Sql operator to put between the two s. - - The string "and" - - - - An that represents a "between" constraint. - - - - - Initializes a new instance of the class. - - The _projection. - The _lo. - The _hi. - - - - Initialize a new instance of the class for - the named Property. - - The name of the Property of the Class. - The low value for the BetweenExpression. - The high value for the BetweenExpression. - - - - - - - Casting a value from one type to another, at the database - level - - - - - An that Junctions together multiple - s with an and - - - - - A sequence of logical s combined by some associative - logical operator. - - - - - Adds an to the list of s - to junction together. - - The to add. - - This instance. - - - - - Get the Sql operator to put between multiple s. - - - - - The corresponding to an instance with no added - subcriteria. - - - - - Get the Sql operator to put between multiple s. - - The string " and " - - - - This is useful if we want to send a value to the database - - - - - A Count - - - - The alias that refers to the "root" entity of the criteria query. - - - Each row of results is a from alias to entity instance - - - Each row of results is an instance of the root entity - - - Each row of results is a distinct instance of the root entity - - - This result transformer is selected implicitly by calling - - - Specifies joining to an entity based on an inner join. - - - Specifies joining to an entity based on a full join. - - - Specifies joining to an entity based on a left outer join. - - - - Some applications need to create criteria queries in "detached - mode", where the Hibernate session is not available. This class - may be instantiated anywhere, and then a ICriteria - may be obtained by passing a session to - GetExecutableCriteria(). All methods have the - same semantics and behavior as the corresponding methods of the - ICriteria interface. - - - - - Get an executable instance of Criteria, - to actually run the query. - - - - Gets the root entity type if available, throws otherwise - - - This is an NHibernate specific method, used by several dependent - frameworks for advance integration with NHibernate. - - - - - Clear all orders from criteria. - - - - - An that Junctions together multiple - s with an or - - - - - Get the Sql operator to put between multiple s. - - The string " or " - - - - Gets the typed values for parameters in this projection - - The criteria. - The criteria query. - - - - - An that represents an "equal" constraint - between two properties. - - - - - Superclass for an that represents a - constraint between two properties (with SQL binary operators). - - - - - Initializes a new instance of the class. - - The projection. - Name of the RHS property. - - - - Initializes a new instance of the class. - - The LHS projection. - The RHS projection. - - - - Initializes a new instance of the class. - - Name of the LHS property. - Name of the RHS property. - - - - Initializes a new instance of the class. - - Name of the LHS property. - The RHS projection. - - - - - - - Get the Sql operator to use for the property expression. - - - - - Initializes a new instance of the class. - - Name of the LHS property. - The RHS projection. - - - - Initializes a new instance of the class. - - The LHS projection. - The RHS projection. - - - - Initializes a new instance of the class. - - The projection. - Name of the RHS property. - - - - Initializes a new instance of the class - that compares two mapped properties using an "equal" constraint. - - The name of the Property to use as the left hand side. - The name of the Property to use as the right hand side. - - - - Get the Sql operator to use for the . - - The string " = " - - - - Support for Query By Example. - - - - List results = session.CreateCriteria(typeof(Parent)) - .Add( Example.Create(parent).IgnoreCase() ) - .CreateCriteria("child") - .Add( Example.Create( parent.Child ) ) - .List(); - - - - "Examples" may be mixed and matched with "Expressions" in the same - - - - - Set escape character for "like" clause - - - - Set the for this . - - The to determine which properties to include. - This instance. - - This should be used when a custom has - been implemented. Otherwise use the methods - or to set the - to the s built into NHibernate. - - - - - Set the for this - to exclude zero-valued properties. - - - - - Set the for this - to exclude no properties. - - - - - Use the "like" operator for all string-valued properties with - the specified . - - - The to convert the string to the pattern - for the like comparison. - - - - - Use the "like" operator for all string-valued properties. - - - The default is MatchMode.Exact. - - - - - Exclude a particular named property - - The name of the property to exclude. - - - - Create a new instance, which includes all non-null properties - by default - - - A new instance of . - - - - Initialize a new instance of the class for a particular - entity. - - The that the Example is being built from. - The the Example should use. - - - - Determines if the property should be included in the Query. - - The value of the property. - The name of the property. - The of the property. - - if the Property should be included, if - the Property should not be a part of the Query. - - - - - Adds a based on the value - and type parameters to the in the - list parameter. - - The value of the Property. - The of the Property. - The to add the to. - - This method will add objects to the list parameter. - - - - - A strategy for choosing property values for inclusion in the query criteria - - - - - Determine if the Property should be included. - - The value of the property that is being checked for inclusion. - The name of the property that is being checked for inclusion. - The of the property. - - if the Property should be included in the Query, - otherwise. - - - - - Implementation of that includes all - properties regardless of value. - - - - - Implementation of that includes the - properties that are not and do not have an - returned by propertyValue.ToString(). - - - This selector is not present in H2.1. It may be useful if nullable types - are used for some properties. - - - - - This class is semi-deprecated. Use . - - - - - - The namespace may be used by applications as a framework for building - new kinds of . - However, it is intended that most applications will - simply use the built-in criterion types via the static factory methods of this class. - - - - - - - Apply an "equal" constraint to the identifier property - - - ICriterion - - - - Apply an "equal" constraint from the projection to the identifier property - - The projection. - ICriterion - - - - Apply an "equal" constraint to the named property - - The name of the Property in the class. - The value for the Property. - - - - Apply an "equal" constraint to the projection - - The projection. - The value for the Property. - - - - Apply a "like" constraint to the named property - - The name of the Property in the class. - The value for the Property. - A . - - - - Apply a "like" constraint to the project - - The projection. - The value for the Property. - A . - - - - Apply a "like" constraint to the project - - The projection. - The value for the Property. - The match mode. - A . - - - - A case-insensitive "like", similar to Postgres "ilike" operator - - The name of the Property in the class. - The value for the Property. - An . - - - - A case-insensitive "like", similar to Postgres "ilike" operator - - The projection. - The value for the Property. - - An . - - - - - Apply a "greater than" constraint to the named property - - The name of the Property in the class. - The value for the Property. - - - - Apply a "greater than" constraint to the projection - - The projection. - The value for the Property. - - - - Apply a "less than" constraint to the named property - - The name of the Property in the class. - The value for the Property. - - - - Apply a "less than" constraint to the projection - - The projection. - The value for the Property. - - - - Apply a "less than or equal" constraint to the named property - - The name of the Property in the class. - The value for the Property. - - - - Apply a "less than or equal" constraint to the projection - - The projection. - The value for the Property. - - - - Apply a "greater than or equal" constraint to the named property - - The name of the Property in the class. - The value for the Property. - - - - Apply a "greater than or equal" constraint to the projection - - The projection. - The value for the Property. - - - - Apply a "between" constraint to the named property - - The name of the Property in the class. - The low value for the Property. - The high value for the Property. - A . - - - - Apply a "between" constraint to the projection - - The projection. - The low value for the Property. - The high value for the Property. - A . - - - - Apply an "in" constraint to the named property - - The name of the Property in the class. - An array of values. - An . - - - - Apply an "in" constraint to the projection - - The projection. - An array of values. - An . - - - - Apply an "in" constraint to the projection - - The projection. - An ICollection of values. - An . - - - - Apply an "in" constraint to the named property - - The name of the Property in the class. - An ICollection of values. - An . - - - - Apply an "in" constraint to the named property. This is the generic equivalent - of , renamed to avoid ambiguity. - - The name of the Property in the class. - An - of values. - An . - - - - Apply an "in" constraint to the projection. This is the generic equivalent - of , renamed to avoid ambiguity. - - - The projection. - An - of values. - An . - - - - Apply an "is null" constraint to the named property - - The name of the Property in the class. - A . - - - - Apply an "is null" constraint to the projection - - The projection. - A . - - - - Apply an "equal" constraint to two properties - - The lhs Property Name - The rhs Property Name - A . - - - - Apply an "equal" constraint to projection and property - - The projection. - The rhs Property Name - A . - - - - Apply an "equal" constraint to lshProjection and rshProjection - - The LHS projection. - The RSH projection. - A . - - - - Apply an "equal" constraint to the property and rshProjection - - Name of the property. - The RSH projection. - A . - - - - Apply an "not equal" constraint to two properties - - The lhs Property Name - The rhs Property Name - A . - - - - Apply an "not equal" constraint to projection and property - - The projection. - The rhs Property Name - A . - - - - Apply an "not equal" constraint to the projections - - The LHS projection. - The RHS projection. - A . - - - - Apply an "not equal" constraint to the projections - - Name of the property. - The RHS projection. - A . - - - - Apply a "greater than" constraint to two properties - - The lhs Property Name - The rhs Property Name - A . - - - - Apply a "greater than" constraint to two properties - - The projection. - The rhs Property Name - A . - - - - Apply a "greater than" constraint to two properties - - Name of the property. - The projection. - A . - - - - Apply a "greater than" constraint to two properties - - The LHS projection. - The RHS projection. - A . - - - - Apply a "greater than or equal" constraint to two properties - - The lhs Property Name - The rhs Property Name - A . - - - - Apply a "greater than or equal" constraint to two properties - - The LHS projection. - The RHS projection. - A . - - - - Apply a "greater than or equal" constraint to two properties - - The projection. - The rhs Property Name - A . - - - - Apply a "greater than or equal" constraint to two properties - - The lhs Property Name - The projection. - A . - - - - Apply a "less than" constraint to two properties - - The lhs Property Name - The rhs Property Name - A . - - - - Apply a "less than" constraint to two properties - - The projection. - The rhs Property Name - A . - - - - Apply a "less than" constraint to two properties - - The lhs Property Name - The projection. - A . - - - - Apply a "less than" constraint to two properties - - The LHS projection. - The RHS projection. - A . - - - - Apply a "less than or equal" constraint to two properties - - The lhs Property Name - The rhs Property Name - A . - - - - Apply a "less than or equal" constraint to two properties - - The projection. - The rhs Property Name - A . - - - - Apply a "less than or equal" constraint to two properties - - The lhs Property Name - The projection. - A . - - - - Apply a "less than or equal" constraint to two properties - - The LHS projection. - The RHS projection. - A . - - - - Apply an "is not null" constraint to the named property - - The name of the Property in the class. - A . - - - - Apply an "is not null" constraint to the named property - - The projection. - A . - - - - Apply an "is not empty" constraint to the named property - - The name of the Property in the class. - A . - - - - Apply an "is not empty" constraint to the named property - - The name of the Property in the class. - A . - - - - Return the conjunction of two expressions - - The Expression to use as the Left Hand Side. - The Expression to use as the Right Hand Side. - An . - - - - Return the disjuction of two expressions - - The Expression to use as the Left Hand Side. - The Expression to use as the Right Hand Side. - An . - - - - Return the negation of an expression - - The Expression to negate. - A . - - - - Group expressions together in a single conjunction (A and B and C...) - - - - - Group expressions together in a single disjunction (A or B or C...) - - - - - Apply an "equals" constraint to each property in the key set of a IDictionary - - a dictionary from property names to values - - - - - Apply a constraint expressed in SQL, with the given SQL parameters - - - - - - - - - Apply a constraint expressed in SQL, with the given SQL parameter - - - - - - - - - Apply a constraint expressed in SQL, with the given SQL parameter - - - - - Apply a constraint expressed in SQL - - - - - - - Apply a constraint expressed in SQL - - - - - - - An that represents an "greater than or equal" constraint - between two properties. - - - - - Initializes a new instance of the class. - - Name of the LHS property. - The RHS projection. - - - - Initializes a new instance of the class. - - The LHS projection. - The RHS projection. - - - - Initializes a new instance of the class. - - The projection. - Name of the RHS property. - - - - Initializes a new instance of the class - that compares two mapped properties using an "greater than or equal" constraint. - - The name of the Property to use as the left hand side. - The name of the Property to use as the right hand side. - - - - Get the Sql operator to use for the . - - The string " < " - - - - An that represents an "greater than" constraint - between two properties. - - - - - Initializes a new instance of the class. - - Name of the LHS property. - The RHS projection. - - - - Initializes a new instance of the class. - - The LHS projection. - The RHS projection. - - - - Initializes a new instance of the class. - - The projection. - Name of the RHS property. - - - - Initializes a new instance of the class - that compares two mapped properties using an "greater than" constraint. - - The name of the Property to use as the left hand side. - The name of the Property to use as the right hand side. - - - - Get the Sql operator to use for the . - - The string " < " - - - - An instance of is passed to criterion, - order and projection instances when actually compiling and - executing the query. This interface is not used by application - code. - - - - Get the names of the columns mapped by a property path, ignoring projection aliases - - - Get the type of a property path, ignoring projection aliases - - - Get the names of the columns mapped by a property path - - - Get the type of a property path - - - Get the a typed value for the given property value. - - - Get the entity name of an entity - - - - Get the entity name of an entity, taking into account - the qualifier of the property path - - - - Get the root table alias of an entity - - - - Get the root table alias of an entity, taking into account - the qualifier of the property path - - - - Get the property name, given a possibly qualified property name - - - Get the identifier column names of this entity - - - Get the identifier type of this entity - - - - When adding values to the query string it is imperative that they are reported via this function back to the query builder. - Do not report the same item multiple times as it will be assumed to be a separate parameter. - - - - - An identifier constraint - - - - - An that constrains the property - to a specified list of values. - - - InExpression - should only be used with a Single Value column - no multicolumn properties... - - - - - Initializes a new instance of the class. - - The projection. - The _values. - - - - - - - - - - - - - - An that represents an "like" constraint - that is not case sensitive. - - - - - Initializes a new instance of the class. - - The projection. - The value. - The match mode. - - - - Initializes a new instance of the class. - - The projection. - The value. - - - - Initialize a new instance of the - class for a named Property and its value. - - The name of the Property in the class. - The value for the Property. - - - - - - - An that represents empty association constraint. - - - - - An that represents non-empty association constraint. - - - - - An that represents an "less than or equal" constraint - between two properties. - - - - - Initializes a new instance of the class. - - Name of the LHS property. - The RHS projection. - - - - Initializes a new instance of the class. - - The LHS projection. - The RHS projection. - - - - Initializes a new instance of the class. - - The projection. - Name of the RHS property. - - - - Initializes a new instance of the class - that compares two mapped properties using an "less than or equal" constraint. - - The name of the Property to use as the left hand side. - The name of the Property to use as the right hand side. - - - - Get the Sql operator to use for the . - - The string " <= " - - - - An that represents an "like" constraint. - - - The case sensitivity depends on the database settings for string - comparisons. Use if the - string comparison should not be case sensitive. - - - - - An that represents an "less than" constraint - between two properties. - - - - - Initializes a new instance of the class. - - Name of the LHS property. - The RHS projection. - - - - Initializes a new instance of the class. - - The LHS projection. - The RHS projection. - - - - Initializes a new instance of the class. - - The projection. - Name of the RHS property. - - - - Initializes a new instance of the class - that compares two mapped properties using an "less than" constraint. - - The name of the Property to use as the left hand side. - The name of the Property to use as the right hand side. - - - - Get the Sql operator to use for the . - - The string " < " - - - - Represents an strategy for matching strings using "like". - - - - - Initialize a new instance of the class. - - The code that identifies the match mode. - The friendly name of the match mode. - - The parameter intCode is used as the key of - to store instances and to ensure only instance of a particular - is created. - - - - - The string representation of the . - - The friendly name used to describe the . - - - - Convert the pattern, by appending/prepending "%" - - The string to convert to the appropriate match pattern. - - A that contains a "%" in the appropriate place - for the Match Strategy. - - - - - Match the entire string to the pattern - - - - - Match the start of the string to the pattern - - - - - Match the end of the string to the pattern - - - - - Match the pattern anywhere in the string - - - - - The that matches the entire string to the pattern. - - - - - Initialize a new instance of the class. - - - - - Converts the string to the Exact MatchMode. - - The string to convert to the appropriate match pattern. - The pattern exactly the same as it was passed in. - - - - The that matches the start of the string to the pattern. - - - - - Initialize a new instance of the class. - - - - - Converts the string to the Start MatchMode. - - The string to convert to the appropriate match pattern. - The pattern with a "%" appended at the end. - - - - The that matches the end of the string to the pattern. - - - - - Initialize a new instance of the class. - - - - - Converts the string to the End MatchMode. - - The string to convert to the appropriate match pattern. - The pattern with a "%" appended at the beginning. - - - - The that exactly matches the string - by appending "%" to the beginning and end. - - - - - Initialize a new instance of the class. - - - - - Converts the string to the Exact MatchMode. - - The string to convert to the appropriate match pattern. - The pattern with a "%" appended at the beginning and the end. - - - - An that negates another . - - - - - Initialize a new instance of the class for an - - - The to negate. - - - - An that represents "not null" constraint. - - - - - Initializes a new instance of the class. - - The projection. - - - - Initialize a new instance of the class for a named - Property that should not be null. - - The name of the Property in the class. - - - - An that represents "null" constraint. - - - - - Initializes a new instance of the class. - - The projection. - - - - Initialize a new instance of the class for a named - Property that should be null. - - The name of the Property in the class. - - - - - - - Represents an order imposed upon a - result set. - - - - - Constructor for Order. - - - - - - - Constructor for Order. - - - - - - - Render the SQL fragment - - - - - Ascending order - - - - - - - Ascending order - - - - - - - Descending order - - - - - - - Descending order - - - - - - - An that combines two s with an - "or" between them. - - - - - Initialize a new instance of the class for - two s. - - The to use as the left hand side. - The to use as the right hand side. - - - - Get the Sql operator to put between the two s. - - Returns "or" - - - - Gets the typed values for parameters in this projection - - The criteria. - The criteria query. - - - - - The criterion package may be used by applications as a framework for building - new kinds of Projection. However, it is intended that most applications will - simply use the built-in projection types via the static factory methods of this class.
            -
            - The factory methods that take an alias allow the projected value to be referred to by - criterion and order instances. -
            -
            - - - Create a distinct projection from a projection - - - - - - - Create a new projection list - - - - - - The query row count, ie. count(*) - - The RowCount projection mapped to an . - - - - The query row count, ie. count(*) - - The RowCount projection mapped to an . - - - - A property value count - - - - - - - A property value count - - - - - - - A distinct property value count - - - - - - - A property maximum value - - - - - - - A projection maximum value - - - - - - - A property minimum value - - - - - - - A projection minimum value - - - - - - - A property average value - - - - - - - A property average value - - - - - - - A property value sum - - - - - - - A property value sum - - - - - - - A SQL projection, a typed select clause fragment - - - - - - - - - A grouping SQL projection, specifying both select clause and group by clause fragments - - - - - - - - - - A grouping property value - - - - - - - A projected property value - - - - - - - A projected identifier value - - - - - - Assign an alias to a projection, by wrapping it - - - - - - - - Casts the projection result to the specified type. - - The type. - The projection. - - - - - Return a constant value - - The obj. - - - - - Return a constant value - - The obj. - - - - - - Calls the named - - Name of the function. - The type. - The projections. - - - - - Calls the specified - - the function. - The type. - The projections. - - - - - Conditionally return the true or false part, dependention on the criterion - - The criterion. - The when true. - The when false. - - - - - A factory for property-specific AbstractCriterion and projection instances - - - - - A property value, or grouped property value - - - - - Get a component attribute of this property - - - - - A comparison between a property value in the outer query and the - result of a subquery - - - - - A comparison between a property value in the outer query and the - result of a subquery - - - - - The base class for an that compares a single Property - to a value. - - - - - Initialize a new instance of the class for a named - Property and its value. - - The name of the Property in the class. - The value for the Property. - The SQL operation. - - - - Converts the SimpleExpression to a . - - A SqlString that contains a valid Sql fragment. - - - - - - - Gets the named Property for the Expression. - - A string that is the name of the Property. - - - - Gets the Value for the Expression. - - An object that is the value for the Expression. - - - - Get the Sql operator to use for the specific - subclass of . - - - - - A comparison between a constant value and the the result of a subquery - - - - - An that creates a SQLExpression. - The string {alias} will be replaced by the alias of the root entity. - - - This allows for database specific Expressions at the cost of needing to - write a correct . - - - - - - - - A SQL fragment. The string {alias} will be replaced by the alias of the root entity. - - - - - Gets the typed values for parameters in this projection - - The criteria. - The criteria query. - - - - - Factory class for AbstractCriterion instances that represent - involving subqueries. - Expression - Projection - AbstractCriterion - - - - - A property value, or grouped property value - - - - - Used to show a better debug display for dictionaries - - - - - - - - ::= - EXTRACT FROM - - ::= - | - - - - Represents HQL functions that can have different representations in different SQL dialects. - E.g. in HQL we can define function concat(?1, ?2) to concatenate two strings - p1 and p2. Target SQL function will be dialect-specific, e.g. (?1 || ?2) for - Oracle, concat(?1, ?2) for MySql, (?1 + ?2) for MS SQL. - Each dialect will define a template as a string (exactly like above) marking function - parameters with '?' followed by parameter's index (first index is 1). - - - - - Provides support routines for the HQL functions as used - in the various SQL Dialects - - Provides an interface for supporting various HQL functions that are - translated to SQL. The Dialect and its sub-classes use this interface to - provide details required for processing of the function. - - - - - The function return type - - The type of the first argument - - - - - - Render the function call as SQL. - - List of arguments - - SQL fragment for the fuction. - - - - Does this function have any arguments? - - - - - If there are no arguments, are parens required? - - - - - Applies the template to passed in arguments. - - args function arguments - generated SQL function call - - - - - ANSI-SQL substring - Documented in: - ANSI X3.135-1992 - American National Standard for Information Systems - Database Language - SQL - - - Syntax: - ::= - SUBSTRING FROM < start position> - [ FOR ] - ]]> - - - - - A SQLFunction implementation that emulates the ANSI SQL trim function - on dialects which do not support the full definition. However, this function - definition does assume the availability of ltrim, rtrim, and replace functions - which it uses in various combinations to emulate the desired ANSI trim() - functionality. - - - - - - - - - - - according to both the ANSI-SQL and EJB3 specs, trim can either take - exactly one parameter or a variable number of parameters between 1 and 4. - from the SQL spec: - ::= - TRIM - - ::= - [ [ ] [ ] FROM ] - - ::= - LEADING - | TRAILING - | BOTH - ]]> - If only trim specification is omitted, BOTH is assumed; - if trim character is omitted, space is assumed - - - - - ANSI-SQL style cast(foo as type) where the type is a NHibernate type - - - - - Delegate the values to a real type - - - The real return type of Cast is know only after the Cast is parsed. - This class was created in NH to remove the responsibility of the parser about know the - real return type. - - - - - Defines a mapping from a .NET to a SQL datatype. - This interface is intended to be implemented by applications that need custom types. - - Implementors should usually be immutable and MUST definately be threadsafe. - - - - Return a cacheable "disassembled" representation of the object. - the value to cache - the session - optional parent entity object (needed for collections) - the disassembled, deep cloned state - - - Reconstruct the object from its cached "disassembled" state. - the disassembled state from the cache - the session - the parent entity object - the the object - - - - Called before assembling a query result set from the query cache, to allow batch fetching - of entities missing from the second-level cache. - - - - - When implemented by a class, returns the SqlTypes for the columns mapped by this IType. - The that uses this IType.An array of s. - - - - When implemented by a class, returns how many columns are used to persist this type. - The that uses this IType.The number of columns this IType spans.MappingException - - - - When implemented by a class, should the parent be considered dirty, - given both the old and current field or element value? - The old valueThe current valueThe true if the field is dirty - - - - When implemented by a class, gets an instance of the object mapped by - this IType from the . - The that contains the values - The names of the columns in the that contain the - value to populate the IType with. - The object mapped by this IType. - Implementors should handle possibility of null values. - - - - - When implemented by a class, gets an instance of the object - mapped by this IType from the . - The that contains the valuesThe name of the column in the that contains the - value to populate the IType with.The object mapped by this IType. - Implementations should handle possibility of null values. - This method might be called if the IType is known to be a single-column type. - - - - - When implemented by a class, puts the value/values from the mapped - class into the . - The to put the values into.The object that contains the values.The index of the to start writing the values to.Indicates which columns are to be set. - Implementors should handle possibility of null values. - A multi-column type should be written to parameters starting from . - - - - - When implemented by a class, puts the value/values from the mapped - class into the . - - The to put the values into. - The object that contains the values. - The index of the to start writing the values to. - - Implementors should handle possibility of null values. - A multi-column type should be written to parameters starting from . - - - - - When implemented by a class, a representation of the value to be - embedded in an XML element - The object that contains the values.An Xml formatted string. - - - - When implemented by a class, returns a deep copy of the persistent - state, stopping at entities and at collections. - A Collection element or Entity fieldThe entityMode.The session factory.A deep copy of the object. - - - - When implemented by a class, retrieves an instance of the mapped class, - or the identifier of an entity or collection from a . - The that contains the values. - The names of the columns in the that contain the - value to populate the IType with. - the sessionThe parent EntityAn identifier or actual object mapped by this IType. - - This is useful for 2-phase property initialization - the second phase is a call to - ResolveIdentifier() - - - Most implementors of this method will just pass the call to NullSafeGet(). - - - - - - When implemented by a class, maps identifiers to Entities or Collections. - An identifier or value returned by Hydrate()The sessionThe parent EntityThe Entity or Collection referenced by this Identifier. - This is the second phase of 2-phase property initialization. - - - - - Given a hydrated, but unresolved value, return a value that may be used to - reconstruct property-ref associations. - - - - - - - - During merge, replace the existing (target) value in the entity we are merging to - with a new (original) value from the detached entity we are merging. For immutable - objects, or null values, it is safe to simply return the first parameter. For - mutable objects, it is safe to return a copy of the first parameter. For objects - with component values, it might make sense to recursively replace component values. - - the value from the detached entity being merged - the value in the managed entity - - - - - the value to be merged - - - - Compare two instances of the class mapped by this type for persistence - "equality" - equality of persistent state - taking a shortcut for - entity references. - - - - - boolean - - - - Compare two instances of the class mapped by this type for persistence - "equality" - equality of persistent state. - - - - - boolean - - - - Compare two instances of the class mapped by this type for persistence - "equality" - equality of persistent state. - - - - - - boolean - - - Get a hashcode, consistent with persistence "equality" - - - - - Get a hashcode, consistent with persistence "equality" - - - - - - compare two instances of the type - - - - - - Get the type of a semi-resolved value. - - - A representation of the value to be embedded in an XML element. - - - - - - Parse the XML representation of an instance. - - - an instance of the type - - - - Given an instance of the type, return an array of boolean, indicating - which mapped columns would be null. - - an instance of the type - - - - - When implemented by a class, gets the abbreviated name of the type. - The NHibernate type name. - - - - When implemented by a class, gets the returned - by the NullSafeGet() methods. - - The from the .NET framework. - - This is used to establish the class of an array of this Itype - - - - - When implemented by a class, gets the value indicating if the objects - of this IType are mutable. - true if the objects mapped by this IType are mutable. - With respect to the referencing object... - Entities and Collections are considered immutable because they manage their own internal state. - - - - - When implemented by a class, gets a value indicating if the implementor is castable to an an - true if this is an AssociationThis does not necessarily imply that the type actually represents an association. - - - - When implemented by a class, gets a value indicating if the implementor is a collection type - true if this is a . - - - - When implemented by a class, gets a value indicating if the implementor - is an . - true if this is an - If true, the implementation must be castable to . - A component type may own collections or associations and hence must provide certain extra functionality. - - - - - When implemented by a class, gets a value indicating if the implementor - extends - true if this is an - - - - - - - Emulation of locate() on Sybase - - - - - Initializes a new instance of the StandardSQLFunction class. - - SQL function name. - Whether the function accepts an asterisk (*) in place of arguments - - - - Initializes a new instance of the StandardSQLFunction class. - - SQL function name. - True if accept asterisk like argument - Return type for the fuction. - - - - Classic AVG sqlfunction that return types as it was done in Hibernate 3.1 - - - - - Classic COUNT sqlfunction that return types as it was done in Hibernate 3.1 - - - - - Classic SUM sqlfunction that return types as it was done in Hibernate 3.1 - - - - - Summary description for NoArgSQLFunction. - - - - - Emulation of coalesce() on Oracle, using multiple nvl() calls - - - - - Emulation of locate() on PostgreSQL - - - - - Provides a standard implementation that supports the majority of the HQL - functions that are translated to SQL. - - - The Dialect and its sub-classes use this class to provide details required - for processing of the associated function. - - - - - Provides a standard implementation that supports the majority of the HQL - functions that are translated to SQL. - - - The Dialect and its sub-classes use this class to provide details required - for processing of the associated function. - - - - - Initializes a new instance of the StandardSQLFunction class. - - SQL function name. - - - - Initializes a new instance of the StandardSQLFunction class. - - SQL function name. - Return type for the fuction. - - - - Initializes a new instance of the StandardSafeSQLFunction class. - - SQL function name. - Exact number of arguments expected. - - - - Initializes a new instance of the StandardSafeSQLFunction class. - - SQL function name. - Return type for the fuction. - Exact number of arguments expected. - - - - Support for slightly more general templating than StandardSQLFunction, - with an unlimited number of arguments. - - - - - A strategy abstraction for how locks are obtained in the underlying database. - - - All locking provided implemenations assume the underlying database supports - (and that the connection is in) at least read-committed transaction isolation. - The most glaring exclusion to this is HSQLDB which only offers support for - READ_UNCOMMITTED isolation. - - - - - - Acquire an appropriate type of lock on the underlying data that will - endure until the end of the current transaction. - - The id of the row to be locked - The current version (or null if not versioned) - The object logically being locked (currently not used) - The session from which the lock request originated - - - - A locking strategy where the locks are obtained through select statements. - - - - - For non-read locks, this is achieved through the Dialect's specific - SELECT ... FOR UPDATE syntax. - - - - - A locking strategy where the locks are obtained through update statements. - - This strategy is not valid for read style locks. - - - - Construct a locking strategy based on SQL UPDATE statements. - - The metadata for the entity to be locked. - Indictates the type of lock to be acquired. - - read-locks are not valid for this strategy. - - - - - Common implementation of schema reader. - - - This implementation of is based on the new of - .NET 2.0. - - - - - - This class is specific of NHibernate and supply DatabaseMetaData of Java. - In the .NET Framework, there is no direct equivalent. - - - Implementation is provide by a dialect. - - - - - Gets a description of the tables available for the catalog - - A catalog, retrieves those without a catalog - Schema pattern, retrieves those without the schema - A table name pattern - a list of table types to include - Each row - - - - Get the Table MetaData. - - The resultSet of . - Include FKs and indexes - - - - - Gets a description of the table columns available - - A catalog, retrieves those without a catalog - Schema pattern, retrieves those without the schema - A table name pattern - a columng name patterm - A description of the table columns available - - - - Get a description of the given table's indices and statistics. - - A catalog, retrieves those without a catalog - Schema pattern, retrieves those without the schema - A table name pattern - A description of the table's indices available - The result is relative to the schema collections "Indexes". - - - - Get a description of the given table's indices and statistics. - - A catalog, retrieves those without a catalog - Schema pattern, retrieves those without the schema - A table name pattern - The name of the index - A description of the table's indices available - The result is relative to the schema collections "IndexColumns". - - - - Gets a description of the foreign keys available - - A catalog, retrieves those without a catalog - Schema name, retrieves those without the schema - A table name - A description of the foreign keys available - - - - Get all reserved words - - A set of reserved words - - - - In the Java language, this field indicates that the database treats mixed-case, - quoted SQL identifiers as case-insensitive and stores them in mixed case. - - - - - In the Java language, this field indicates that the database treats mixed-case, - quoted SQL identifiers as case-insensitive and stores them in upper case. - - - - - In the Java language, this field indicates that the database treats mixed-case, - unquoted SQL identifiers as case-insensitive and stores them in upper case. - - - - - In the Java language, this field indicates that the database treats mixed-case, - quoted SQL identifiers as case-insensitive and stores them in lower case. - - - - - In the Java language, this field indicates that the database treats mixed-case, - unquoted SQL identifiers as case-insensitive and stores them in lower case, - - - - - The name of the column that represent the TABLE_NAME in the - returned by . - - - - - An SQL dialect for DB2 on iSeries OS/400. - - - The DB2400Dialect defaults the following configuration properties: - - - Property - Default Value - - - connection.driver_class - - - - - - - - An SQL dialect for DB2. - - - The DB2Dialect defaults the following configuration properties: - - - Property - Default Value - - - connection.driver_class - - - - - - - - Represents a dialect of SQL implemented by a particular RDBMS. Subclasses - implement NHibernate compatibility with different systems. - - - Subclasses should provide a public default constructor that Register() - a set of type mappings and default Hibernate properties. - - - - - - - - - - - Characters used for quoting sql identifiers - - - - - - - - - - - The base constructor for Dialect. - - - Every subclass should override this and call Register() with every except - , , , , - , . - - - The Default properties for this Dialect should also be set - such as whether or not to use outer-joins - and what the batch size should be. - - - - - Get an instance of the dialect specified by the current properties. - The specified Dialect - - - - Get de from a property bag (prop name ) - - The property bag. - An instance of . - When is null. - When the property bag don't contains de property . - - - - Get the name of the database type associated with the given - , - - The SqlType - The database type name used by ddl. - - - - Get the name of the database type associated with the given - . - - The SqlType - The datatype length - The datatype precision - The datatype scale - The database type name used by ddl. - - - - Get the name of the database type appropriate for casting operations - (via the CAST() SQL function) for the given typecode. - - The typecode - The database type name - - - - Subclasses register a typename for the given type code and maximum - column length. $l in the type name will be replaced by the column - length (if appropriate) - - The typecode - Maximum length of database type - The database type name - - - - Suclasses register a typename for the given type code. $l in the - typename will be replaced by the column length (if appropriate). - - The typecode - The database type name - - - - Get the name of the Hibernate associated with th given - typecode. - - The typecode - The Hibernate name. - - - - Get the name of the Hibernate associated - with the given typecode with the given storage - specification parameters. - - The typecode - The datatype length - The datatype precision - The datatype scale - The Hibernate name. - - - - Registers a Hibernate name for the given - type code and maximum column length. - - The typecode - The maximum length of database type - The Hibernate name - - - - Registers a Hibernate name for the given - type code. - - The typecode - The Hibernate name - - - - - - - - - - - The syntax used to add a foreign key constraint to a table. - - The FK constraint name. - The names of the columns comprising the FK - The table referenced by the FK - The explicit columns in the referencedTable referenced by this FK. - - if false, constraint should be explicit about which column names the constraint refers to - - the "add FK" fragment - - - - The syntax used to add a primary key constraint to a table - - - - - - Get a strategy instance which knows how to acquire a database-level lock - of the specified mode for this dialect. - - The persister for the entity to be locked. - The type of lock to be acquired. - The appropriate locking strategy. - - - - Given a lock mode, determine the appropriate for update fragment to use. - - The lock mode to apply. - The appropriate for update fragment. - - - - Get the FOR UPDATE OF column_list fragment appropriate for this - dialect given the aliases of the columns to be write locked. - - The columns to be write locked. - The appropriate FOR UPDATE OF column_list clause string. - - - - Get the FOR UPDATE OF column_list NOWAIT fragment appropriate - for this dialect given the aliases of the columns to be write locked. - - The columns to be write locked. - The appropriate FOR UPDATE colunm_list NOWAIT clause string. - - - - Modifies the given SQL by applying the appropriate updates for the specified - lock modes and key columns. - - the SQL string to modify - a map of lock modes indexed by aliased table names. - a map of key columns indexed by aliased table names. - the modified SQL string. - - The behavior here is that of an ANSI SQL SELECT FOR UPDATE. This - method is really intended to allow dialects which do not support - SELECT FOR UPDATE to achieve this in their own fashion. - - - - - Some dialects support an alternative means to SELECT FOR UPDATE, - whereby a "lock hint" is appends to the table name in the from clause. - - The lock mode to apply - The name of the table to which to apply the lock hint. - The table with any required lock hints. - - - - Return SQL needed to drop the named table. May (and should) use - some form of "if exists" clause, and cascade constraints. - - - - - - Generate a temporary table name given the bas table. - The table name from which to base the temp table name. - The generated temp table name. - - - - Does the dialect require that temporary table DDL statements occur in - isolation from other statements? This would be the case if the creation - would cause any current transaction to get committed implicitly. - - see the result matrix above. - - JDBC defines a standard way to query for this information via the - {@link java.sql.DatabaseMetaData#dataDefinitionCausesTransactionCommit()} - method. However, that does not distinguish between temporary table - DDL and other forms of DDL; MySQL, for example, reports DDL causing a - transaction commit via its driver, even though that is not the case for - temporary table DDL. -

            - Possible return values and their meanings:

              -
            • {@link Boolean#TRUE} - Unequivocally, perform the temporary table DDL in isolation.
            • -
            • {@link Boolean#FALSE} - Unequivocally, do not perform the temporary table DDL in isolation.
            • -
            • null - defer to the JDBC driver response in regards to {@link java.sql.DatabaseMetaData#dataDefinitionCausesTransactionCommit()}
            • -
            -
            -
            - - Do we need to drop the temporary table after use? - - - - Registers an OUT parameter which will be returing a - . How this is accomplished varies greatly - from DB to DB, hence its inclusion (along with {@link #getResultSet}) here. - - The callable statement. - The bind position at which to register the OUT param. - The number of (contiguous) bind positions used. - - - - Given a callable statement previously processed by , - extract the from the OUT parameter. - - The callable statement. - The extracted result set. - SQLException Indicates problems extracting the result set. - - - - The syntax used to drop a foreign key constraint from a table. - - The name of the foreign key constraint to drop. - - The SQL string to drop the foreign key constraint. - - - - - The syntax that is used to check if a constraint does not exists before creating it - - The table. - The name. - - - - - The syntax that is used to close the if for a constraint exists check, used - for dialects that requires begin/end for ifs - - The table. - The name. - - - - - The syntax that is used to check if a constraint exists before dropping it - - The table. - The name. - - - - - The syntax that is used to close the if for a constraint exists check, used - for dialects that requires begin/end for ifs - - The table. - The name. - - - - - The syntax used to drop a primary key constraint from a table. - - The name of the primary key constraint to drop. - - The SQL string to drop the primary key constraint. - - - - - The syntax used to drop an index constraint from a table. - - The name of the index constraint to drop. - - The SQL string to drop the primary key constraint. - - - - - Provided we , then attch the - "select identity" clause to the insert statement. - - The insert command - - The insert command with any necessary identity select clause attached. - Note, if == false then - the insert-string should be returned without modification. - - - - - Get the select command to use to retrieve the last generated IDENTITY - value for a particular table - - The table into which the insert was done - The PK column. - The type code. - The appropriate select command - - - - The syntax used during DDL to define a column as being an IDENTITY of - a particular type. - - The type code. - The appropriate DDL fragment. - - - - Generate the appropriate select statement to to retreive the next value - of a sequence. - - the name of the sequence - String The "nextval" select string. - This should be a "stand alone" select statement. - - - - Typically dialects which support sequences can drop a sequence - with a single command. - - The name of the sequence - The sequence drop commands - - This is convenience form of - to help facilitate that. - - Dialects which support sequences and can drop a sequence in a - single command need *only* override this method. Dialects - which support sequences but require multiple commands to drop - a sequence should instead override . - - - - - The multiline script used to drop a sequence. - - The name of the sequence - The sequence drop commands - - - - Generate the select expression fragment that will retrieve the next - value of a sequence as part of another (typically DML) statement. - - the name of the sequence - The "nextval" fragment. - - This differs from in that this - should return an expression usable within another statement. - - - - - Typically dialects which support sequences can create a sequence - with a single command. - - The name of the sequence - The sequence creation command - - This is convenience form of to help facilitate that. - Dialects which support sequences and can create a sequence in a - single command need *only* override this method. Dialects - which support sequences but require multiple commands to create - a sequence should instead override . - - - - - An optional multi-line form for databases which . - - The name of the sequence - The initial value to apply to 'create sequence' statement - The increment value to apply to 'create sequence' statement - The sequence creation commands - - - - Overloaded form of , additionally - taking the initial value and increment size to be applied to the sequence - definition. - - The name of the sequence - The initial value to apply to 'create sequence' statement - The increment value to apply to 'create sequence' statement - The sequence creation command - - The default definition is to suffix - with the string: " start with {initialValue} increment by {incrementSize}" where - {initialValue} and {incrementSize} are replacement placeholders. Generally - dialects should only need to override this method if different key phrases - are used to apply the allocation information. - - - - - Create a strategy responsible - for handling this dialect's variations in how joins are handled. - - This dialect's strategy. - - - - Create a strategy responsible - for handling this dialect's variations in how CASE statements are - handled. - - This dialect's strategy. - - - The SQL literal value to which this database maps boolean values. - The boolean value - The appropriate SQL literal. - - - - Add a LIMIT clause to the given SQL SELECT - - A Query in the form of a SqlString. - Offset of the first row to be returned by the query (zero-based) - Maximum number of rows to be returned by the query - A new SqlString that contains the LIMIT clause. - - - Apply s limit clause to the query. - The query to which to apply the limit. - Is the query requesting an offset? - the modified SQL - - Typically dialects utilize - limit caluses when they support limits. Thus, when building the - select command we do not actually need to know the limit or the offest - since we will just be using placeholders. -

            - Here we do still pass along whether or not an offset was specified - so that dialects not supporting offsets can generate proper exceptions. - In general, dialects will override one or the other of this method and - . - - - -

            - Checks to see if the name has been quoted. - - The name to check if it is quoted - true if name is already quoted. - - The default implementation is to compare the first character - to Dialect.OpenQuote and the last char to Dialect.CloseQuote - -
            - - - Quotes a name. - - The string that needs to be Quoted. - A QuotedName - -

            - This method assumes that the name is not already Quoted. So if the name passed - in is "name then it will return """name". It escapes the first char - - the " with "" and encloses the escaped string with OpenQuote and CloseQuote. -

            -
            -
            - - - Quotes a name for being used as a aliasname - - Original implementation calls - Name of the alias - A Quoted name in the format of OpenQuote + aliasName + CloseQuote - -

            - If the aliasName is already enclosed in the OpenQuote and CloseQuote then this - method will return the aliasName that was passed in without going through any - Quoting process. So if aliasName is passed in already Quoted make sure that - you have escaped all of the chars according to your DataBase's specifications. -

            -
            -
            - - - Quotes a name for being used as a columnname - - Original implementation calls - Name of the column - A Quoted name in the format of OpenQuote + columnName + CloseQuote - -

            - If the columnName is already enclosed in the OpenQuote and CloseQuote then this - method will return the columnName that was passed in without going through any - Quoting process. So if columnName is passed in already Quoted make sure that - you have escaped all of the chars according to your DataBase's specifications. -

            -
            -
            - - - Quotes a name for being used as a tablename - - Name of the table - A Quoted name in the format of OpenQuote + tableName + CloseQuote - -

            - If the tableName is already enclosed in the OpenQuote and CloseQuote then this - method will return the tableName that was passed in without going through any - Quoting process. So if tableName is passed in already Quoted make sure that - you have escaped all of the chars according to your DataBase's specifications. -

            -
            -
            - - - Quotes a name for being used as a schemaname - - Name of the schema - A Quoted name in the format of OpenQuote + schemaName + CloseQuote - -

            - If the schemaName is already enclosed in the OpenQuote and CloseQuote then this - method will return the schemaName that was passed in without going through any - Quoting process. So if schemaName is passed in already Quoted make sure that - you have escaped all of the chars according to your DataBase's specifications. -

            -
            -
            - - - Unquotes and unescapes an already quoted name - - Quoted string - Unquoted string - -

            - This method checks the string quoted to see if it is - quoted. If the string quoted is already enclosed in the OpenQuote - and CloseQuote then those chars are removed. -

            -

            - After the OpenQuote and CloseQuote have been cleaned from the string quoted - then any chars in the string quoted that have been escaped by doubling them - up are changed back to a single version. -

            -

            - The following quoted values return these results - "quoted" = quoted - "quote""d" = quote"d - quote""d = quote"d -

            -

            - If this implementation is not sufficient for your Dialect then it needs to be overridden. - MsSql2000Dialect is an example of where UnQuoting rules are different. -

            -
            -
            - - - Unquotes an array of Quoted Names. - - strings to Unquote - an array of unquoted strings. - - This use UnQuote(string) for each string in the quoted array so - it should not need to be overridden - only UnQuote(string) needs - to be overridden unless this implementation is not sufficient. - - - - - Given a type code, determine an appropriate - null value to use in a select clause. - - The type code. - The appropriate select clause value fragment. - - One thing to consider here is that certain databases might - require proper casting for the nulls here since the select here - will be part of a UNION/UNION ALL. - - - - - Build an instance of the preferred by this dialect for - converting into NHibernate's ADOException hierarchy. - - The Dialect's preferred . - - The default Dialect implementation simply returns a converter based on X/Open SQLState codes. - - It is strongly recommended that specific Dialect implementations override this - method, since interpretation of a SQL error is much more accurate when based on - the ErrorCode rather than the SQLState. Unfortunately, the ErrorCode is a vendor-specific approach. - - - - - Retrieve a set of default Hibernate properties for this database. - - - - - Aggregate SQL functions as defined in general. This is - a case-insensitive hashtable! - - - The results of this method should be integrated with the - specialization's data. - - - - - The class (which implements ) - which acts as this dialects native generation strategy. - - The native generator class. - - Comes into play whenever the user specifies the native generator. - - - - - The keyword used to insert a generated value into an identity column (or null). - Need if the dialect does not support inserts that specify no column values. - - - - Get the select command used retrieve the names of all sequences. - The select command; or null if sequences are not supported. - - - - Get the command used to select a GUID from the underlying database. - (Optional operation.) - - The appropriate command. - - - Command used to create a table. - - - - Slight variation on . - The command used to create a multiset table. - - - Here, we have the command used to create a table when there is no primary key and - duplicate rows are expected. -

            - Most databases do not care about the distinction; originally added for - Teradata support which does care. - - - -

            Command used to create a temporary table. -
            - - - Get any fragments needing to be postfixed to the command for - temporary table creation. - - - - - Should the value returned by - be treated as callable. Typically this indicates that JDBC escape - sytnax is being used... - - - - - Retrieve the command used to retrieve the current timestammp from the database. - - - - - The name of the database-specific SQL function for retrieving the - current timestamp. - - - - - The keyword used to insert a row without specifying any column values - - - - - The name of the SQL function that transforms a string to lowercase - - - - - The syntax used to add a column to a table. Note this is deprecated - - - - - The keyword used to specify a nullable column - - - - - Completely optional cascading drop clause - - - - - The keyword used to create a primary key constraint - - - - - Does this dialect support the ALTER TABLE syntax? - - - - - Do we need to drop constraints before dropping tables in the dialect? - - - - - Do we need to qualify index names with the schema name? - - - - - Does this dialect support the UNIQUE column syntax? - - - - Does this dialect support adding Unique constraints via create and alter table ? - - - - Does the dialect support the syntax 'drop table if exists NAME' - - - - - Does the dialect support the syntax 'drop table NAME if exists' - - - - Does this dialect support column-level check constraints? - True if column-level CHECK constraints are supported; false otherwise. - - - Does this dialect support table-level check constraints? - True if table-level CHECK constraints are supported; false otherwise. - - - - Get the string to append to SELECT statements to acquire locks - for this dialect. - - The appropriate FOR UPDATE clause string. - - - Is FOR UPDATE OF syntax supported? - True if the database supports FOR UPDATE OF syntax; false otherwise. - - - - Does this dialect support FOR UPDATE in conjunction with outer joined rows? - - True if outer joined rows can be locked via FOR UPDATE. - - - - Retrieves the FOR UPDATE NOWAIT syntax specific to this dialect - - The appropriate FOR UPDATE NOWAIT clause string. - - - Does this dialect support temporary tables? - - - Does this dialect support a way to retrieve the database's current timestamp value? - - - - Gives the best resolution that the database can use for storing - date/time values, in ticks. - - - - For example, if the database can store values with 100-nanosecond - precision, this property is equal to 1L. If the database can only - store values with 1-millisecond precision, this property is equal - to 10000L (number of ticks in a millisecond). - - - Used in TimestampType. - - - - - - Does this dialect support subselects? - - - - - Does this dialect support identity column key generation? - - - - - Does the dialect support some form of inserting and selecting - the generated IDENTITY value all in the same statement. - - - - - Whether this dialect has an identity clause added to the data type or a - completely separate identity data type. - - - - - Get the select command to use to retrieve the last generated IDENTITY value. - - The appropriate select command - - - - The keyword used to specify an identity column, if native key generation is supported - - - - - Does this dialect support sequences? - - - - - Does this dialect support "pooled" sequences. Not aware of a better - name for this. Essentially can we specify the initial and increment values? - - True if such "pooled" sequences are supported; false otherwise. - - - - - - Does this Dialect have some kind of LIMIT syntax? - - False, unless overridden. - - - - Does this Dialect support an offset? - - - - - Can parameters be used for a statement containing a LIMIT? - - - - - Does the LIMIT clause specify arguments in the "reverse" order - limit, offset instead of offset, limit? - - False, unless overridden. - Inheritors should return true if the correct order is limit, offset - - - - Does the LIMIT clause come at the start of the - SELECT statement rather than at the end? - - false, unless overridden - - - - Does the LIMIT clause take a "maximum" row number instead - of a total number of returned rows? - - True if limit is relative from offset; false otherwise. - - This is easiest understood via an example. Consider you have a table - with 20 rows, but you only want to retrieve rows number 11 through 20. - Generally, a limit with offset would say that the offset = 11 and the - limit = 10 (we only want 10 rows at a time); this is specifying the - total number of returned rows. Some dialects require that we instead - specify offset = 11 and limit = 20, where 20 is the "last" row we want - relative to offset (i.e. total number of rows = 20 - 11 = 9) - So essentially, is limit relative from offset? Or is limit absolute? - - - - - The opening quote for a quoted identifier. - - - - - The closing quote for a quoted identifier. - - - - - Does this dialect support UNION ALL, which is generally a faster variant of UNION? - True if UNION ALL is supported; false otherwise. - - - - - Does this dialect support empty IN lists? - For example, is [where XYZ in ()] a supported construct? - - True if empty in lists are supported; false otherwise. - - - - Are string comparisons implicitly case insensitive. - In other words, does [where 'XYZ' = 'xyz'] resolve to true? - - True if comparisons are case insensitive. - - - - Is this dialect known to support what ANSI-SQL terms "row value - constructor" syntax; sometimes called tuple syntax. -

            - Basically, does it support syntax like - "... where (FIRST_NAME, LAST_NAME) = ('Steve', 'Ebersole') ...". -

            - - True if this SQL dialect is known to support "row value - constructor" syntax; false otherwise. - -
            - - - If the dialect supports {@link #supportsRowValueConstructorSyntax() row values}, - does it offer such support in IN lists as well? -

            - For example, "... where (FIRST_NAME, LAST_NAME) IN ( (?, ?), (?, ?) ) ..." -

            - - True if this SQL dialect is known to support "row value - constructor" syntax in the IN list; false otherwise. - -
            - - - Should LOBs (both BLOB and CLOB) be bound using stream operations (i.e. - {@link java.sql.PreparedStatement#setBinaryStream}). - - True if BLOBs and CLOBs should be bound using stream operations. - - - - Does this dialect support parameters within the select clause of - INSERT ... SELECT ... statements? - - True if this is supported; false otherwise. - - - - Does this dialect support asking the result set its positioning - information on forward only cursors. Specifically, in the case of - scrolling fetches, Hibernate needs to use - {@link java.sql.ResultSet#isAfterLast} and - {@link java.sql.ResultSet#isBeforeFirst}. Certain drivers do not - allow access to these methods for forward only cursors. -

            - NOTE : this is highly driver dependent! -

            - - True if methods like {@link java.sql.ResultSet#isAfterLast} and - {@link java.sql.ResultSet#isBeforeFirst} are supported for forward - only cursors; false otherwise. - -
            - - - Does this dialect support definition of cascade delete constraints - which can cause circular chains? - - True if circular cascade delete constraints are supported; false otherwise. - - - - Are subselects supported as the left-hand-side (LHS) of - IN-predicates. - - In other words, is syntax like "... {subquery} IN (1, 2, 3) ..." supported? - - True if subselects can appear as the LHS of an in-predicate;false otherwise. - - - - Expected LOB usage pattern is such that I can perform an insert - via prepared statement with a parameter binding for a LOB value - without crazy casting to JDBC driver implementation-specific classes... -

            - Part of the trickiness here is the fact that this is largely - driver dependent. For example, Oracle (which is notoriously bad with - LOB support in their drivers historically) actually does a pretty good - job with LOB support as of the 10.2.x versions of their drivers... -

            - - True if normal LOB usage patterns can be used with this driver; - false if driver-specific hookiness needs to be applied. - -
            - - Does the dialect support propagating changes to LOB - values back to the database? Talking about mutating the - internal value of the locator as opposed to supplying a new - locator instance... -

            - For BLOBs, the internal value might be changed by: - {@link java.sql.Blob#setBinaryStream}, - {@link java.sql.Blob#setBytes(long, byte[])}, - {@link java.sql.Blob#setBytes(long, byte[], int, int)}, - or {@link java.sql.Blob#truncate(long)}. -

            - For CLOBs, the internal value might be changed by: - {@link java.sql.Clob#setAsciiStream(long)}, - {@link java.sql.Clob#setCharacterStream(long)}, - {@link java.sql.Clob#setString(long, String)}, - {@link java.sql.Clob#setString(long, String, int, int)}, - or {@link java.sql.Clob#truncate(long)}. -

            - NOTE : I do not know the correct answer currently for - databases which (1) are not part of the cruise control process - or (2) do not {@link #supportsExpectedLobUsagePattern}. -

            - True if the changes are propagated back to the database; false otherwise. -
            - - - Is it supported to materialize a LOB locator outside the transaction in - which it was created? -

            - Again, part of the trickiness here is the fact that this is largely - driver dependent. -

            - NOTE: all database I have tested which {@link #supportsExpectedLobUsagePattern()} - also support the ability to materialize a LOB outside the owning transaction... -

            - True if unbounded materialization is supported; false otherwise. -
            - - - Does this dialect support referencing the table being mutated in - a subquery. The "table being mutated" is the table referenced in - an UPDATE or a DELETE query. And so can that table then be - referenced in a subquery of said UPDATE/DELETE query. -

            - For example, would the following two syntaxes be supported:

              -
            • delete from TABLE_A where ID not in ( select ID from TABLE_A )
            • -
            • update TABLE_A set NON_ID = 'something' where ID in ( select ID from TABLE_A)
            • -
            -
            - True if this dialect allows references the mutating table from a subquery. -
            - - Does the dialect support an exists statement in the select clause? - True if exists checks are allowed in the select clause; false otherwise. - - - - For the underlying database, is READ_COMMITTED isolation implemented by - forcing readers to wait for write locks to be released? - - True if writers block readers to achieve READ_COMMITTED; false otherwise. - - - - For the underlying database, is REPEATABLE_READ isolation implemented by - forcing writers to wait for read locks to be released? - - True if readers block writers to achieve REPEATABLE_READ; false otherwise. - - - - Does this dialect support using a JDBC bind parameter as an argument - to a function or procedure call? - - True if the database supports accepting bind params as args; false otherwise. - - - - The class (which implements ) - which acts as this dialects identity-style generation strategy. - - The native generator class. - - Comes into play whenever the user specifies the "identity" generator. - - - - - Defines a contract for implementations that can extract the name of a violated - constraint from a SQLException that is the result of that constraint violation. - - - - - Extract the name of the violated constraint from the given SQLException. - - The exception that was the result of the constraint violation. - The extracted constraint name. - - - - - - - - - - - - - - - - Add a LIMIT clause to the given SQL SELECT - - A Query in the form of a SqlString. - Offset of the first row is not zero - A new SqlString that contains the LIMIT clause. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Summary description for FirebirdDialect. - - - The FirebirdDialect defaults the following configuration properties: - - - Property - Default Value - - - connection.driver_class - - - - - - - - Add a FIRST x [SKIP] y clause to the given SQL SELECT - - A Query in the form of a SqlString. - Maximum number of rows to be returned by the query - Offset of the first row to process in the result set - A new SqlString that contains the FIRST clause. - - - - - - - A generic SQL dialect which may or may not work on any actual databases - - - - - - - - - - - Summary description for InformixDialect. - This dialect is intended to work with IDS version 7.31 - However I can test only version 10.00 as I have only this version at work - - - The InformixDialect defaults the following configuration properties: - - - ConnectionDriver - NHibernate.Driver.OdbcDriver - PrepareSql - true - - - connection.driver_class - - - - - - - - - - - Get the FOR UPDATE OF column_list fragment appropriate for this - dialect given the aliases of the columns to be write locked. - - The columns to be write locked. - The appropriate FOR UPDATE OF column_list clause string. - - - - Does the dialect require that temporary table DDL statements occur in - isolation from other statements? This would be the case if the creation - would cause any current transaction to get committed implicitly. - - see the result matrix above. - - JDBC defines a standard way to query for this information via the - {@link java.sql.DatabaseMetaData#dataDefinitionCausesTransactionCommit()} - method. However, that does not distinguish between temporary table - DDL and other forms of DDL; MySQL, for example, reports DDL causing a - transaction commit via its driver, even though that is not the case for - temporary table DDL. -

            - Possible return values and their meanings:

              -
            • {@link Boolean#TRUE} - Unequivocally, perform the temporary table DDL in isolation.
            • -
            • {@link Boolean#FALSE} - Unequivocally, do not perform the temporary table DDL in isolation.
            • -
            • null - defer to the JDBC driver response in regards to {@link java.sql.DatabaseMetaData#dataDefinitionCausesTransactionCommit()}
            • -
            -
            -
            - - - Get the select command to use to retrieve the last generated IDENTITY - value for a particular table - - The table into which the insert was done - The PK column. - The type code. - The appropriate select command - - - - The syntax used during DDL to define a column as being an IDENTITY of - a particular type. - - The type code. - The appropriate DDL fragment. - - - - Create a strategy responsible - for handling this dialect's variations in how joins are handled. - - This dialect's strategy. - - - The SQL literal value to which this database maps boolean values. - The boolean value - The appropriate SQL literal. - - - Apply s limit clause to the query. - The query to which to apply the limit. - Offset of the first row to be returned by the query (zero-based) - Maximum number of rows to be returned by the query - the modified SQL - - Typically dialects utilize - limit caluses when they support limits. Thus, when building the - select command we do not actually need to know the limit or the offest - since we will just be using placeholders. -

            - Here we do still pass along whether or not an offset was specified - so that dialects not supporting offsets can generate proper exceptions. - In general, dialects will override one or the other of this method and - . - - - -

            - The keyword used to insert a generated value into an identity column (or null). - Need if the dialect does not support inserts that specify no column values. - -
            - - Command used to create a temporary table. - - - - Get any fragments needing to be postfixed to the command for - temporary table creation. - - - - - Should the value returned by - be treated as callable. Typically this indicates that JDBC escape - sytnax is being used... - - - - - Retrieve the command used to retrieve the current timestammp from the database. - - - - - The name of the database-specific SQL function for retrieving the - current timestamp. - - - - - - - Is FOR UPDATE OF syntax supported? - True if the database supports FOR UPDATE OF syntax; false otherwise. - - - - Does this dialect support FOR UPDATE in conjunction with outer joined rows? - - True if outer joined rows can be locked via FOR UPDATE. - - - Does this dialect support temporary tables? - - - Does this dialect support a way to retrieve the database's current timestamp value? - - - - Whether this dialect have an Identity clause added to the data type or a - completely seperate identity data type - - - - - The syntax that returns the identity value of the last insert, if native - key generation is supported - - - - - The keyword used to specify an identity column, if native key generation is supported - - - - - Does this dialect support sequences? - - - - - Does this Dialect have some kind of LIMIT syntax? - - False, unless overridden. - - - - Does this Dialect support an offset? - - - - - Can parameters be used for a statement containing a LIMIT? - - - - - Does the LIMIT clause come at the start of the - SELECT statement rather than at the end? - - false, unless overridden - - - - Does this dialect support UNION ALL, which is generally a faster variant of UNION? - True if UNION ALL is supported; false otherwise. - - - - - Knows how to extract a violated constraint name from an error message based on the - fact that the constraint name is templated within the message. - - - - - Extracts the constraint name based on a template (i.e., templateStartconstraintNametemplateEnd). - - The pattern denoting the start of the constraint name within the message. - The pattern denoting the end of the constraint name within the message. - The templated error message containing the constraint name. - The found constraint name, or null. - - - - Extract the name of the violated constraint from the given SQLException. - - The exception that was the result of the constraint violation. - The extracted constraint name. - - - - Extract the name of the violated constraint from the given DbException. - - The exception that was the result of the constraint violation. - The extracted constraint name. - - - - Summary description for InformixDialect. - This dialect is intended to work with IDS version 9.40 - - - The InformixDialect defaults the following configuration properties: - - - ConnectionDriver - NHibernate.Driver.OdbcDriver - PrepareSql - true - - - connection.driver_class - - - - - - - - - - - Generate the appropriate select statement to to retreive the next value - of a sequence. - - the name of the sequence - String The "nextval" select string. - This should be a "stand alone" select statement. - - - - Generate the select expression fragment that will retrieve the next - value of a sequence as part of another (typically DML) statement. - - the name of the sequence - The "nextval" fragment. - - This differs from in that this - should return an expression usable within another statement. - - - - - Create a strategy responsible - for handling this dialect's variations in how joins are handled. - - This dialect's strategy. - - - Get the select command used retrieve the names of all sequences. - The select command; or null if sequences are not supported. - - - - Does this dialect support sequences? - - - - - Does this dialect support "pooled" sequences. Not aware of a better - name for this. Essentially can we specify the initial and increment values? - - True if such "pooled" sequences are supported; false otherwise. - - - - Does this Dialect have some kind of LIMIT syntax? - - False, unless overridden. - - - - Does this Dialect support an offset? - - - - - Summary description for InformixDialect. - This dialect is intended to work with IDS version 10.00 - - - The InformixDialect defaults the following configuration properties: - - - ConnectionDriver - NHibernate.Driver.OdbcDriver - PrepareSql - true - - - connection.driver_class - - - - - - - - - - - Does this Dialect have some kind of LIMIT syntax? - - False, unless overridden. - - - - Does this Dialect support an offset? - - - - - An SQL dialect for IngresSQL. - - - The IngresDialect defaults the following configuration properties: - - - Property - Default Value - - - use_outer_join - - - - connection.driver_class - - - - - - - - An SQL dialect compatible with Microsoft SQL Server 2000. - - - The MsSql2000Dialect defaults the following configuration properties: - - - Property - Default Value - - - use_outer_join - - - - connection.driver_class - - - - prepare_sql - - - - - - - - - - - Generates the string to drop the table using SQL Server syntax. - - The name of the table to drop. - The SQL with the inserted. - - - - Add a LIMIT (TOP) clause to the given SQL SELECT - - A Query in the form of a SqlString. - Maximum number of rows to be returned by the query - Offset of the first row to process in the result set - A new SqlString that contains the LIMIT clause. - - - - - - - - - MsSql does not require the OpenQuote to be escaped as long as the first char - is an OpenQuote. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Does this Dialect have some kind of LIMIT syntax? - - True, we'll use the SELECT TOP nn syntax. - - - - Does this Dialect support an offset? - - - - - Can parameters be used for a statement containing a LIMIT? - - - - - Does the LIMIT clause take a "maximum" row number - instead of a total number of returned rows? - - false, unless overridden - - - - Add a LIMIT clause to the given SQL SELECT - - The to base the limit query off of. - Offset of the first row to be returned by the query (zero-based) - Maximum number of rows to be returned by the query - A new with the LIMIT clause applied. - - The LIMIT SQL will look like - - - SELECT - TOP last (columns) - FROM - (SELECT (columns), ROW_NUMBER() OVER(ORDER BY {original order by, with un-aliased column names) as __hibernate_sort_row - {original from}) as query - WHERE query.__hibernate_sort_row > offset - ORDER BY query.__hibernate_sort_row - - - - Note that we need to add explicitly specify the columns, because we need to be able to use them - in a paged subselect. NH-1155 - - - - - Indicates whether the string fragment contains matching parenthesis - - the statement to evaluate - true if the statment contains no parenthesis or an equal number of - opening and closing parenthesis;otherwise false - - - - Sql Server 2005 supports a query statement that provides LIMIT - functionality. - - true - - - - Sql Server 2005 supports a query statement that provides LIMIT - functionality with an offset. - - true - - - - Sql Server 2005 supports a query statement that provides LIMIT - functionality with an offset. - - false - - - - This specialized string tokenizier will break a string to tokens, taking - into account single quotes, parenthesis and commas and [ ] - Notice that we aren't differenciating between [ ) and ( ] on purpose, it would complicate - the code and it is not legal at any rate. - - - - - An SQL dialect compatible with Microsoft SQL Server 7. - - - There have been no test run with this because the NHibernate team does not - have a machine with Sql 7 installed on it. But there have been users using - Ms Sql 7 with NHibernate. As issues with Ms Sql 7 and NHibernate become known - this Dialect will be updated. - - - - - Uses @@identity to get the Id value. - - - There is a well known problem with @@identity and triggers that insert into - rows into other tables that also use an identity column. The only way I know - of to get around this problem is to upgrade your database server to Ms Sql 2000. - - - - - A dialect for SQL Server Everywhere (SQL Server CE). - - - - - A SQL dialect for MySQL - - - The MySQLDialect defaults the following configuration properties: - - - Property - Default Value - - - use_outer_join - - - - connection.driver_class - - - - - - - - - - - - - - - - Create the SQL string to drop a foreign key constraint. - - The name of the foreign key to drop. - The SQL string to drop the foreign key constraint. - - - - Create the SQL string to drop a primary key constraint. - - The name of the primary key to drop. - The SQL string to drop the primary key constraint. - - - - Create the SQL string to drop an index. - - The name of the index to drop. - The SQL string to drop the index constraint. - - - - - - - - - - - - - - - - - - - - - - - - - - - - A dialect specifically for use with Oracle 10g. - - - The main difference between this dialect and - is the use of "ANSI join syntax" here... - - - - - A dialect for Oracle 8i. - - - - - Support for the oracle proprietary join syntax... - - The orqacle join fragment - - - - Map case support to the Oracle DECODE function. Oracle did not - add support for CASE until 9i. - - The oracle CASE -> DECODE fragment - - - - Allows access to the basic - implementation... - - The mapping type - The appropriate select cluse fragment - - - - It's a immature version, it just work. - An SQL dialect for Oracle Lite - - - The OracleLiteDialect defaults the following configuration properties: - - - Property - Default Value - - - use_outer_join - - - - connection.driver_class - - - - - - - - - - - - - - An SQL dialect for PostgreSQL 8.1 and above. - - - - PostgreSQL 8.1 supports FOR UPDATE ... NOWAIT syntax. - - - PostgreSQL supports Identity column using the "SERIAL" type. - Serial type is a "virtual" type that will automatically: - - - Create a sequence named tablename_colname_seq. - Set the default value of this column to the next value of the - sequence. (using function nextval('tablename_colname_seq')) - Add a "NOT NULL" constraint to this column. - Set the sequence as "owned by" the table. - - - To insert the next value of the sequence into the serial column, - exclude the column from the list of columns - in the INSERT statement or use the DEFAULT key word. - - - If the table or the column is dropped, the sequence is dropped too. - - - - - - - An SQL dialect for PostgreSQL. - - - The PostgreSQLDialect defaults the following configuration properties: - - - Property - Default Value - - - use_outer_join - - - - connection.driver_class - - - - - - - - - - - - - - Offset of the first row to process in the result set is non-zero - - - - PostgreSQL requires to cast NULL values to correctly handle UNION/UNION ALL - - See - PostgreSQL BUG #1847: Error in some kind of UNION query. - - The type code. - null casted as : "null::sqltypename" - - - - - - - - - PostgreSQL supports UNION ALL clause - - Reference: - PostgreSQL 8.0 UNION Clause documentation - - - - - - PostgreSQL supports serial and serial4 type for 4 bytes integer auto increment column. - bigserial or serial8 can be used for 8 bytes integer auto increment column. - - bigserial if equal Int64, - serial otherwise - - - - PostgreSQL supports Identity column using the "SERIAL" type. - - - - - PostgreSQL doesn't have type in identity column. - - - To create an identity column it uses the SQL syntax - CREATE TABLE tablename (colname SERIAL); or - CREATE TABLE tablename (colname BIGSERIAL); - - - - - The sql syntax to insert a row without specifying any column in PostgreSQL is - INSERT INTO table DEFAULT VALUES; - - - - - PostgreSQL 8.1 and above defined the fuction lastval() that returns the - value of the last sequence that nextval() was used on in the current session. - Call lastval() if nextval() has not yet been called in the current - session throw an exception. - - - - - An SQL dialect for PostgreSQL 8.2 and above. - - - PostgreSQL 8.2 supports DROP TABLE IF EXISTS tablename - and DROP SEQUENCE IF EXISTS sequencename syntax. - See for more information. - - - - - A SQL dialect for SQLite. - - -

            - Author: Ioan Bizau -

            -
            -
            - - - - - - - - Add a LIMIT N clause to the given SQL SELECT - - A Query in the form of a SqlString. - Maximum number of rows to be returned by the query - Offset of the first row to process in the result set - A new SqlString that contains the LIMIT clause. - - - - This is a subclass of SybaseDialect for sybase 11 databases (specifically tested against 11.9.2). 11.9.2 does not support ANSI JOINs - therefore we have to provide a special join fragment for left/right joins (*= and =* respectively). - - - - - An SQL dialect compatible with Sybase. - - -

            - This dialect probably will not work with schema-export. If anyone out there - can fill in the ctor with DbTypes to Strings that would be helpful. -

            - The SybaseDialect defaults the following configuration properties: - - - Property - Default Value - - - use_outer_join - - - - connection.driver_class - - - - prepare_sql - - - -
            -
            - - - - - - Sybase does not support quoted aliases, this function thus returns - aliasName as is. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - This class is basically a port of the hibernate 3.2 Sybase 11 join fragment. It uses concepts from that join fragment and the Oracle join fragment in NHibernate - - - - - Represents a SQL JOIN - - - - - An SQL dialect compatible with Sybase. - - -

            - This dialect probably will not work with schema-export. If anyone out there - can fill in the ctor with DbTypes to Strings that would be helpful. -

            - The SybaseDialect defaults the following configuration properties: - - - Property - Default Value - - - use_outer_join - - - - connection.driver_class - - - - prepare_sql - - - -
            -
            - - - - - - Sybase does not support quoted aliases, this function thus returns - aliasName as is. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - An SQL dialect for Sybase Adaptive Server Anywhere 9.0/10.0 - - -

            - This dialect probably will not work with schema-export. If anyone out there - can fill in the ctor with DbTypes to Strings that would be helpful. -

            - The SybaseAnywhereDialect defaults the following configuration properties: - - - Property - Default Value - - - use_outer_join - - - - connection.driver_class - - - - prepare_sql - - - -
            -
            - - - - - - - - - - - - ASA does not require to drop constraint before dropping tables, and DROP statement - syntax used by Hibernate to drop constraint is not compatible with ASA, so disable it. - Comments matchs SybaseAnywhereDialect from Hibernate-3.1 src - - - - - This class maps a DbType to names. - - - Associations may be marked with a capacity. Calling the Get() - method with a type and actual size n will return the associated - name with smallest capacity >= n, if available and an unmarked - default type otherwise. - Eg, setting - - Names.Put(DbType, "TEXT" ); - Names.Put(DbType, 255, "VARCHAR($l)" ); - Names.Put(DbType, 65534, "LONGVARCHAR($l)" ); - - will give you back the following: - - Names.Get(DbType) // --> "TEXT" (default) - Names.Get(DbType,100) // --> "VARCHAR(100)" (100 is in [0:255]) - Names.Get(DbType,1000) // --> "LONGVARCHAR(1000)" (100 is in [256:65534]) - Names.Get(DbType,100000) // --> "TEXT" (default) - - On the other hand, simply putting - - Names.Put(DbType, "VARCHAR($l)" ); - - would result in - - Names.Get(DbType) // --> "VARCHAR($l)" (will cause trouble) - Names.Get(DbType,100) // --> "VARCHAR(100)" - Names.Get(DbType,1000) // --> "VARCHAR(1000)" - Names.Get(DbType,10000) // --> "VARCHAR(10000)" - - - - - - Get default type name for specified type - - the type key - the default type name associated with the specified key - - - - Get the type name specified type and size - - the type key - the SQL length - the SQL scale - the SQL precision - - The associated name with smallest capacity >= size if available and the - default type name otherwise - - - - - Set a type name for specified type key and capacity - - the type key - the (maximum) type size/length - The associated name - - - - - - - - - - - The ASAClientDriver Driver provides a database driver for Adaptive Server Anywhere 10.0. - - - - - Base class for the implementation of IDriver - - - - - A strategy for describing how NHibernate should interact with the different .NET Data - Providers. - - - - The IDriver interface is not intended to be exposed to the application. - Instead it is used internally by NHibernate to obtain connection objects, command objects, and - to generate and prepare IDbCommands. Implementors should provide a - public default constructor. - - - This is the interface to implement, or you can inherit from - if you have an ADO.NET data provider that NHibernate does not have built in support for. - To use the driver, NHibernate property connection.driver_class should be - set to the assembly-qualified name of the driver class. - - - key="connection.driver_class" - value="FullyQualifiedClassName, AssemblyName" - - - - - - Configure the driver using . - - - - - Creates an uninitialized IDbConnection object for the specific Driver - - - - - Generates an IDbCommand from the SqlString according to the requirements of the DataProvider. - - The of the command to generate. - The SqlString that contains the SQL. - The types of the parameters to generate for the command. - An IDbCommand with the CommandText and Parameters fully set. - - - - Prepare the by calling . - May be a no-op if the driver does not support preparing commands, or for any other reason. - - - - - - Generates an IDbDataParameter for the IDbCommand. It does not add the IDbDataParameter to the IDbCommand's - Parameter collection. - - The IDbCommand to use to create the IDbDataParameter. - The name to set for IDbDataParameter.Name - The SqlType to set for IDbDataParameter. - An IDbDataParameter ready to be added to an IDbCommand. - - - - Does this Driver support having more than 1 open IDataReader with - the same IDbConnection. - - - - A value of indicates that an exception would be thrown if NHibernate - attempted to have 2 IDataReaders open using the same IDbConnection. NHibernate - (since this version is a close to straight port of Hibernate) relies on the - ability to recursively open 2 IDataReaders. If the Driver does not support it - then NHibernate will read the values from the IDataReader into an . - - - A value of will result in greater performance because an IDataReader can be used - instead of the . So if the Driver supports it then make sure - it is set to . - - - - - - Can we issue several select queries in a single query, and get - several result sets back? - - - - - How we separate the queries when we use multiply queries. - - - - - Change the parameterName into the correct format IDbCommand.CommandText - for the ConnectionProvider - - The unformatted name of the parameter - A parameter formatted for an IDbCommand.CommandText - - - - Changes the parameterName into the correct format for an IDbParameter - for the Driver. - - - For SqlServerConnectionProvider it will change id to @id - - The unformatted name of the parameter - A parameter formatted for an IDbParameter. - - - - Generates an IDbDataParameter for the IDbCommand. It does not add the IDbDataParameter to the IDbCommand's - Parameter collection. - - The IDbCommand to use to create the IDbDataParameter. - The name to set for IDbDataParameter.Name - The SqlType to set for IDbDataParameter. - An IDbDataParameter ready to be added to an IDbCommand. - - - - Does this Driver require the use of a Named Prefix in the SQL statement. - - - For example, SqlClient requires select * from simple where simple_id = @simple_id - If this is false, like with the OleDb provider, then it is assumed that - the ? can be a placeholder for the parameter in the SQL statement. - - - - - Does this Driver require the use of the Named Prefix when trying - to reference the Parameter in the Command's Parameter collection. - - - This is really only useful when the UseNamedPrefixInSql == true. When this is true the - code will look like: - IDbParameter param = cmd.Parameters["@paramName"] - if this is false the code will be - IDbParameter param = cmd.Parameters["paramName"]. - - - - - The Named Prefix for parameters. - - - Sql Server uses "@" and Oracle uses ":". - - - - - Does this Driver support IDbCommand.Prepare(). - - - - A value of indicates that an exception would be thrown or the - company that produces the Driver we are wrapping does not recommend using - IDbCommand.Prepare(). - - - A value of indicates that calling IDbCommand.Prepare() will function - fine on this Driver. - - - - - - Initializes a new instance of with - type names that are loaded from the specified assembly. - - Assembly to load the types from. - Connection type name. - Command type name. - - - - Initializes a new instance of the class. - - - Thrown when the iAnywhere.Data.SQLAnywhere assembly is not and can not be loaded. - - - - - iAnywhere.Data.SQLAnywhere uses named parameters in the sql. - - - Sybase uses String.Empty in the sql. - - - - iAnywhere.Data.SQLAnywhere use the string.Empty to locate parameters in sql. - - - - - The ASAClientDriver Driver provides a database driver for Adaptive Server Anywhere 9.0. - - - - - Initializes a new instance of the class. - - - Thrown when the ASA.Data.AsaClient assembly is not and can not be loaded. - - - - - iAnywhere.Data.AsaClient uses named parameters in the sql. - - - Sybase uses String.Empty in the sql. - - - - iAnywhere.Data.AsaClient use the string.Empty to locate parameters in sql. - - - - - A NHibernate Driver for using the IBM.Data.DB2.iSeries DataProvider. - - - - - Initializes a new instance of the class. - - - Thrown when the IBM.Data.DB2.iSeries assembly can not be loaded. - - - - - A NHibernate Driver for using the IBM.Data.DB2 DataProvider. - - - - - Initializes a new instance of the class. - - - Thrown when the IBM.Data.DB2 assembly can not be loaded. - - - - - A NHibernate Driver for using the Firebird data provider located in - FirebirdSql.Data.FirebirdClient assembly. - - - - - Initializes a new instance of the class. - - - Thrown when the FirebirdSql.Data.Firebird assembly can not be loaded. - - - - - A NHibernate Driver for using the FirebirdSql.Data.Firebird DataProvider. - - - - - Initializes a new instance of the class. - - - Thrown when the FirebirdSql.Data.Firebird assembly can not be loaded. - - - - - A NHibernate Driver for using the Informix DataProvider - - - - - Initializes a new instance of the class. - - - Thrown when the IBM.Data.Informix assembly can not be loaded. - - - - - A NHibernate Driver for using the Ingres DataProvider - - - - - - - Provides a database driver for MySQL. - - - - In order to use this driver you must have the assembly MySql.Data.dll available for - NHibernate to load, including its dependencies (ICSharpCode.SharpZipLib.dll is required by - the assembly MySql.Data.dll as of the time of this writing). - - - Please check the product's website - for any updates and/or documentation regarding MySQL. - - - - - - Initializes a new instance of the class. - - - Thrown when the MySql.Data assembly can not be loaded. - - - - - MySql.Data uses named parameters in the sql. - - - MySql uses ? in the sql. - - - - - - - MySql.Data use the ? to locate parameters in sql. - - ? is used to locate parameters in sql. - - - - The MySql.Data driver does NOT support more than 1 open IDataReader - with only 1 IDbConnection. - - - it is not supported. - - - - MySql.Data does not support preparing of commands. - - - it is not supported. - - With the Gamma MySql.Data provider it is throwing an exception with the - message "Expected End of data packet" when a select command is prepared. - - - - - Some Data Providers (ie - SqlClient) do not support Multiple Active Result Sets (MARS). - NHibernate relies on being able to create MARS to read Components and entities inside - of Collections. - - - This is a completely off-line DataReader - the underlying IDataReader that was used to create - this has been closed and no connections to the Db exists. - - - - - Creates a NDataReader from a - - The to get the records from the Database. - if we are loading the in the middle of reading it. - - NHibernate attempts to not have to read the contents of an into memory until it absolutely - has to. What that means is that it might have processed some records from the and will - pick up the midstream so that the underlying can be closed - so a new one can be opened. - - - - - Sets the values that can be cached back to null and sets the - index of the cached column to -1 - - - - - - - - - - - - - - - - - Takes care of freeing the managed and unmanaged resources that - this class is responsible for. - - - There are not any unmanaged resources or any disposable managed - resources that this class is holding onto. It is in here - to comply with the interface. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Stores a Result from a DataReader in memory. - - - - - Initializes a new instance of the NResult class. - - The IDataReader to populate the Result with. - - if the is already positioned on the record - to start reading from. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - An implementation of that will work with either an - returned by Execute or with an - whose contents have been read into a . - - - - This allows NHibernate to use the underlying for as long as - possible without the need to read everything into the . - - - The consumer of the returned from does - not need to know the underlying reader and can use it the same even if it switches from an - to in the middle of its use. - - - - - - Initializes a new instance of the class. - - The underlying IDataReader to use. - - - - Initializes a new instance of the NHybridDataReader class. - - The underlying IDataReader to use. - if the contents of the IDataReader should be read into memory right away. - - - - Reads all of the contents into memory because another - needs to be opened. - - - This will result in a no op if the reader is closed or is already in memory. - - - - - - - - - - - - - - - - - A flag to indicate if Disose() has been called. - - - - - Finalizer that ensures the object is correctly disposed of. - - - - - Takes care of freeing the managed and unmanaged resources that - this class is responsible for. - - - - - Takes care of freeing the managed and unmanaged resources that - this class is responsible for. - - Indicates if this NHybridDataReader is being Disposed of or Finalized. - - If this NHybridDataReader is being Finalized (isDisposing==false) then make sure not - to call any methods that could potentially bring this NHybridDataReader back to life. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Gets if the object is in the middle of reading a Result. - - if NextResult and Read have been called on the . - - - - - - - - - - - - - - - - - - - - - - The PostgreSQL data provider provides a database driver for PostgreSQL. -

            - Author: Oliver Weichhold -

            -
            - -

            - In order to use this Driver you must have the Npgsql.dll Assembly available for - NHibernate to load it. -

            -

            - Please check the products website - http://www.postgresql.org/ - for any updates and or documentation. -

            -

            - The homepage for the .NET DataProvider is: - http://pgfoundry.org/projects/npgsql. -

            -
            -
            - - - Initializes a new instance of the class. - - - Thrown when the Npgsql assembly can not be loaded. - - - - - A NHibernate Driver for using the Odbc DataProvider - - - Always look for a native .NET DataProvider before using the Odbc DataProvider. - - - - - A NHibernate Driver for using the OleDb DataProvider - - - Always look for a native .NET DataProvider before using the OleDb DataProvider. - - - - - OLE DB provider does not support multiple open data readers - - - - - A NHibernate Driver for using the Oracle DataProvider. - - - - - A NHibernate Driver for using the Oracle.DataAccess DataProvider - - - Code was contributed by James Mills - on the NHibernate forums in this - post. - - - - - Initializes a new instance of . - - - Thrown when the Oracle.DataAccess assembly can not be loaded. - - - - - This adds logic to ensure that a DbType.Boolean parameter is not created since - ODP.NET doesn't support it. - - - - - - - - - - - - - - A NHibernate Driver for using the Oracle.DataAccess.Lite DataProvider - - - - - Initializes a new instance of . - - - Thrown when the Oracle.DataAccess.Lite_w32 assembly can not be loaded. - - - - - This adds logic to ensure that a DbType.Boolean parameter is not created since - ODP.NET doesn't support it. - - - - - A NHibernate Driver for using the SqlClient DataProvider - - - - - Creates an uninitialized object for - the SqlClientDriver. - - An unitialized object. - - - - Creates an uninitialized object for - the SqlClientDriver. - - An unitialized object. - - - - MsSql requires the use of a Named Prefix in the SQL statement. - - - because MsSql uses "@". - - - - - MsSql requires the use of a Named Prefix in the Parameter. - - - because MsSql uses "@". - - - - - The Named Prefix for parameters. - - - Sql Server uses "@". - - - - - The SqlClient driver does NOT support more than 1 open IDataReader - with only 1 IDbConnection. - - - it is not supported. - - MS SQL Server 2000 (and 7) throws an exception when multiple IDataReaders are - attempted to be opened. When SQL Server 2005 comes out a new driver will be - created for it because SQL Server 2005 is supposed to support it. - - - - - NHibernate driver for the System.Data.SQLite data provider for .NET 2.0. - - -

            - In order to use this driver you must have the System.Data.SQLite.dll assembly available - for NHibernate to load. This assembly includes the SQLite.dll or SQLite3.dll libraries. -

            -

            - You can get the System.Data.SQLite.dll assembly from http://sourceforge.net/projects/sqlite-dotnet2. -

            -

            - Please check http://www.sqlite.org/ for more information regarding SQLite. -

            -
            -
            - - - Initializes a new instance of . - - - Thrown when the SQLite.NET assembly can not be loaded. - - - - - NHibernate driver for the SQLite.NET data provider. -

            - Author: Ioan Bizau -

            -
            - -

            - In order to use this Driver you must have the SQLite.NET.dll Assembly available for NHibernate to load it. - You must also have the SQLite.dll and SQLite3.dll libraries. -

            -

            - Please check http://www.sqlite.org/ for more information regarding SQLite. -

            -
            -
            - - - Initializes a new instance of . - - - Thrown when the SQLite.NET assembly can not be loaded. - - - - - A NHibernate driver for Microsoft SQL Server CE data provider - - - - - Initializes a new instance of the class. - - - - - MsSql requires the use of a Named Prefix in the SQL statement. - - - because MsSql uses "@". - - - - - MsSql requires the use of a Named Prefix in the Parameter. - - - because MsSql uses "@". - - - - - The Named Prefix for parameters. - - - Sql Server uses "@". - - - - - The SqlClient driver does NOT support more than 1 open IDataReader - with only 1 IDbConnection. - - - it is not supported. - - Ms Sql 2000 (and 7) throws an Exception when multiple DataReaders are - attempted to be Opened. When Yukon comes out a new Driver will be - created for Yukon because it is supposed to support it. - - - - - The SybaseClientDriver Driver provides a database driver for Sybase. - - - It has been reported to work with the . - - - - - Initializes a new instance of the class. - - - Thrown when the Sybase.Data.AseClient assembly can not be loaded. - - - - - Sybase.Data.AseClient uses named parameters in the sql. - - - Sybase uses @ in the sql. - - - - - - - Sybase.Data.AseClient use the @ to locate parameters in sql. - - @ is used to locate parameters in sql. - - - - The SybaseClientDriver Driver provides a database driver for Sybase. - - - It has been reported to work with the . - - - - - Initializes a new instance of the class. - - - Thrown when the Sybase.Data.AseClient assembly can not be loaded. - - - - - Sybase.Data.AseClient uses named parameters in the sql. - - - Sybase uses @ in the sql. - - - - - - - Sybase.Data.AseClient use the @ to locate parameters in sql. - - @ is used to locate parameters in sql. - - - - Represents state associated with the processing of a given - in regards to loading collections. - - - Another implementation option to consider is to not expose ResultSets - directly (in the JDBC redesign) but to always "wrap" them and apply a [series of] context[s] to that wrapper. - - - - - Creates a collection load context for the given result set. - - Callback to other collection load contexts. - The result set this is "wrapping". - - - - Retrieve the collection that is being loaded as part of processing this result set. - - The persister for the collection being requested. - The key of the collection being requested. - The loading collection (see discussion above). - - Basically, there are two valid return values from this method:
              -
            • an instance of {@link PersistentCollection} which indicates to - continue loading the result set row data into that returned collection - instance; this may be either an instance already associated and in the - midst of being loaded, or a newly instantiated instance as a matching - associated collection was not found.
            • -
            • null indicates to ignore the corresponding result set row - data relating to the requested collection; this indicates that either - the collection was found to already be associated with the persistence - context in a fully loaded state, or it was found in a loading state - associated with another result set processing context.
            • -
            -
            -
            - - - Finish the process of collection-loading for this bound result set. Mainly this - involves cleaning up resources and notifying the collections that loading is - complete. - - The persister for which to complete loading. - - - Add the collection to the second-level cache - The entry representing the collection to add - The persister - - - - Maps to specific contextual data - related to processing that . - - - Implementation note: internally an is used to maintain - the mappings; was chosen because I'd rather not be - dependent upon potentially bad and - implementations. - Considering the JDBC-redesign work, would further like this contextual info - not mapped separately, but available based on the result set being processed. - This would also allow maintaining a single mapping as we could reliably get - notification of the result-set closing... - - - - Creates and binds this to the given persistence context. - The persistence context to which this will be bound. - - - - Release internal state associated with the given result set. - - The result set for which it is ok to release associated resources. - - This should be called when we are done with processing said result set, - ideally as the result set is being closed. - - - - Release internal state associated with *all* result sets. - - This is intended as a "failsafe" process to make sure we get everything - cleaned up and released. - - - - - Get the {@link CollectionLoadContext} associated with the given - {@link ResultSet}, creating one if needed. - - The result set for which to retrieve the context. - The processing context. - - - - Attempt to locate the loading collection given the owner's key. The lookup here - occurs against all result-set contexts... - - The collection persister - The owner key - The loading collection, or null if not found. - - - - Register a loading collection xref. - - The xref collection key - The corresponding loading collection entry - - This xref map is used because sometimes a collection is in process of - being loaded from one result set, but needs to be accessed from the - context of another "nested" result set processing. - Implementation note: package protected, as this is meant solely for use - by {@link CollectionLoadContext} to be able to locate collections - being loaded by other {@link CollectionLoadContext}s/{@link ResultSet}s. - - - - - The inverse of {@link #registerLoadingCollectionXRef}. Here, we are done - processing the said collection entry, so we remove it from the - load context. - - The key of the collection we are done processing. - - The idea here is that other loading collections can now reference said - collection directly from the {@link PersistenceContext} because it - has completed its load cycle. - Implementation note: package protected, as this is meant solely for use - by {@link CollectionLoadContext} to be able to locate collections - being loaded by other {@link CollectionLoadContext}s/{@link ResultSet}s. - - - - - Locate the LoadingCollectionEntry within *any* of the tracked - s. - - The collection key. - The located entry; or null. - - Implementation note: package protected, as this is meant solely for use - by to be able to locate collections - being loaded by other s/ResultSets. - - - - - Retrieves the persistence context to which this is bound. - - - - - Do we currently have any internal entries corresponding to loading - collections? - - True if we currently hold state pertaining to loading collections; false otherwise. - - - - Represents a collection currently being loaded. - - - - Describes a return in a native SQL query. - - - - Represents a return defined as part of a native sql query which - names a collection role in the form {classname}.{collectionrole}; it - is used in defining a custom sql query for loading an entity's - collection in non-fetching scenarios (i.e., loading the collection - itself as the "root" of the result). - - - - - Represents the base information for a non-scalar return defined as part of - a native sql query. - - - - Constructs some form of non-scalar return descriptor - The result alias - Any user-supplied column->property mappings - The lock mode to apply to the return. - - - Retrieve the defined result alias - - - Retrieve the lock-mode to apply to this return - - - Retrieve the user-supplied column->property mappings. - - - Construct a native-sql return representing a collection initializer - The result alias - - The entity-name of the entity owning the collection to be initialized. - - - The property name (on the owner) which represents - the collection to be initialized. - - Any user-supplied column->property mappings - The lock mode to apply to the collection. - - - - The class owning the collection. - - - - - The name of the property representing the collection from the . - - - - - Represents a return defined as part of a native sql query which - names a fetched role. - - - - Construct a return descriptor representing some form of fetch. - The result alias - The owner's result alias - The owner's property representing the thing to be fetched - Any user-supplied column->property mappings - The lock mode to apply - - - The alias of the owner of this fetched association. - - - - Retrieve the property name (relative to the owner) which maps to - the association to be fetched. - - - - - Represents a return defined as part of a native sql query which - names a "root" entity. A root entity means it is explicitly a - "column" in the result, as opposed to a fetched relationship or role. - - - - - Construct a return representing an entity returned at the root - of the result. - - The result alias - The entity name. - The lock mode to apply - - - - Construct a return representing an entity returned at the root - of the result. - - The result alias - The entity name. - Any user-supplied column->property mappings - The lock mode to apply - - - The name of the entity to be returned. - - - Describes a scalar return in a native SQL query. - - - - Extends an HQLQueryPlan to maintain a reference to the collection-role name - being filtered. - - - - Defines a query execution plan for an HQL query (or filter). - - - Descriptor regarding a named parameter. - - - - Not supported yet (AST parse needed) - - - - Defines a query execution plan for a native-SQL query. - - - Encapsulates metadata about parameters encountered within a query. - - - - The single available method - is responsible for parsing a query string and recognizing tokens in - relation to parameters (either named, ejb3-style, or ordinal) and - providing callbacks about such recognitions. - - - - - Performs the actual parsing and tokenizing of the query string making appropriate - callbacks to the given recognizer upon recognition of the various tokens. - - - Note that currently, this only knows how to deal with a single output - parameter (for callable statements). If we later add support for - multiple output params, this, obviously, needs to change. - - The string to be parsed/tokenized. - The thing which handles recognition events. - - - - - Implements a parameter parser recognizer specifically for the purpose - of journaling parameter locations. - - - - - Convenience method for creating a param location recognizer and - initiating the parse. - - The query to be parsed for parameter locations. - The generated recognizer, with journaled location info. - - - - The dictionary of named parameter locations. - The dictionary is keyed by parameter name. - - - - - The list of ordinal parameter locations. - - - The list elements are integers, representing the location for that given ordinal. - Thus OrdinalParameterLocationList[n] represents the location for the nth parameter. - - - - Defines metadata regarding a translated HQL or native-SQL query. - - - Get the source HQL or native-SQL query. - - - Return source query select clause aliases (if any) - - - An array of types describing the returns of the source query. - - - The set of query spaces affected by this source query. - - - Acts as a cache for compiled query plans, as well as query-parameter metadata. - - - - Represents work that needs to be performed in a manner - which isolates it from any current application unit of - work transaction. - - - - - Perform the actual work to be done. - - The ADP connection to use. - The active transaction of the connection. - - - - Class which provides the isolation semantics required by - an . - - - - - Processing comes in two flavors: - - - - makes sure the work to be done is performed in a seperate, distinct transaction - - - - makes sure the work to be done is performed outside the scope of any transaction - - - - - - - Ensures that all processing actually performed by the given work will - occur on a seperate transaction. - - The work to be performed. - The session from which this request is originating. - - - - Ensures that all processing actually performed by the given work will - occur outside of a transaction. - - The work to be performed. - The session from which this request is originating. - - - - Responsible for maintaining the queue of actions related to events. - - The ActionQueue holds the DML operations queued as part of a session's - transactional-write-behind semantics. DML operations are queued here - until a flush forces them to be executed against the database. - - - - - - Perform all currently queued entity-insertion actions. - - - - - Perform all currently queued actions. - - - - - Prepares the internal action queues for execution. - - - - - Performs cleanup of any held cache softlocks. - - Was the transaction successful. - - - - Check whether the given tables/query-spaces are to be executed against - given the currently queued actions. - - The table/query-spaces to check. - True if we contain pending actions against any of the given tables; false otherwise. - - - - Check whether any insertion or deletion actions are currently queued. - - True if insertions or deletions are currently queued; false otherwise. - - - - Identifies a named association belonging to a particular - entity instance. Used to record the fact that an association - is null during loading. - - - - - Defines a sequence of elements that are currently - eligible for batch fetching. - - - Even though this is a map, we only use the keys. A map was chosen in - order to utilize a to maintain sequencing - as well as uniqueness. - - - - - A map of subselect-fetch descriptors - keyed by the against which the descriptor is - registered. - - - - - The owning persistence context. - - - - - Constructs a queue for the given context. - - The owning persistence context. - - - - Clears all entries from this fetch queue. - - - - - Retrieve the fetch descriptor associated with the given entity key. - - The entity key for which to locate any defined subselect fetch. - The fetch descriptor; may return null if no subselect fetch queued for - this entity key. - - - - Adds a subselect fetch decriptor for the given entity key. - - The entity for which to register the subselect fetch. - The fetch descriptor. - - - - After evicting or deleting an entity, we don't need to - know the query that was used to load it anymore (don't - call this after loading the entity, since we might still - need to load its collections) - - - - - Clears all pending subselect fetches from the queue. - - - Called after flushing. - - - - - If an EntityKey represents a batch loadable entity, add - it to the queue. - - - Note that the contract here is such that any key passed in should - previously have been been checked for existence within the - ; failure to do so may cause the - referenced entity to be included in a batch even though it is - already associated with the . - - - - - After evicting or deleting or loading an entity, we don't - need to batch fetch it anymore, remove it from the queue - if necessary - - - - - Get a batch of uninitialized collection keys for a given role - - The persister for the collection role. - A key that must be included in the batch fetch - the maximum number of keys to return - The entity mode. - an array of collection keys, of length batchSize (padded with nulls) - - - - Get a batch of unloaded identifiers for this class, using a slightly - complex algorithm that tries to grab keys registered immediately after - the given key. - - The persister for the entities being loaded. - The identifier of the entity currently demanding load. - The maximum number of keys to return - The entity mode. - an array of identifiers, of length batchSize (possibly padded with nulls) - - - - The types of children to cascade to - - - - - A cascade point that occurs just after the insertion of the parent - entity and just before deletion - - - - - A cascade point that occurs just before the insertion of the parent entity - and just after deletion - - - - - A cascade point that occurs just after the insertion of the parent entity - and just before deletion, inside a collection - - - - - A cascade point that occurs just after the update of the parent entity - - - - A cascade point that occurs just before the session is flushed - - - - A cascade point that occurs just after eviction of the parent entity from the - session cache - - - - - A cascade point that occurs just after locking a transient parent entity into the - session cache - - - - - A cascade point that occurs just after locking a transient parent entity into the session cache - - - - - A cascade point that occurs just before merging from a transient parent entity into - the object in the session cache - - - - - Delegate responsible, in conjunction with the various - , for implementing cascade processing. - - - - Cascade an action from the parent entity instance to all its children. - The parent's entity persister - The parent reference. - - - - Cascade an action from the parent entity instance to all its children. This - form is typicaly called from within cascade actions. - - The parent's entity persister - The parent reference. - - Typically some form of cascade-local cache - which is specific to each CascadingAction type - - - - Cascade an action to the child or children - - - Cascade an action to a collection - - - Cascade an action to a to-one association or any type - - - Cascade to the collection elements - - - Delete any entities that were removed from the collection - - - A contract for defining the aspects of cascading various persistence actions. - - - - package-protected constructor - - - For this style, should the given action be cascaded? - The action to be checked for cascade-ability. - True if the action should be cascaded under this style; false otherwise. - - - - Probably more aptly named something like doCascadeToCollectionElements(); - it is however used from both the collection and to-one logic branches... - - The action to be checked for cascade-ability. - True if the action should be really cascaded under this style; false otherwise. - - For this style, should the given action really be cascaded? The default - implementation is simply to return {@link #doCascade}; for certain - styles (currently only delete-orphan), however, we need to be able to - control this separately. - - - - Factory method for obtaining named cascade styles - The named cascade style name. - The appropriate CascadeStyle - - - save / delete / update / evict / lock / replicate / merge / persist + delete orphans - - - save / delete / update / evict / lock / replicate / merge / persist - - - save / update - - - lock - - - refresh - - - evict - - - replicate - - - merge - - - create - - - delete - - - delete + delete orphans - - - no cascades - - - Do we need to delete orphaned collection elements? - True if this style need to account for orphan delete operations; false otherwise. - - - - A session action that may be cascaded from parent entity to its children - - - - Cascade the action to the child object. - The session within which the cascade is occurring. - The child to which cascading should be performed. - The child's entity name - Typically some form of cascade-local cache which is specific to each CascadingAction type - Are cascading deletes enabled. - - - - Given a collection, get an iterator of the children upon which the - current cascading action should be visited. - - The session within which the cascade is occurring. - The mapping type of the collection. - The collection instance. - The children iterator. - - - - Called (in the case of returning true) to validate - that no cascade on the given property is considered a valid semantic. - - The session within which the cascade is occurring. - The property value - The property value owner - The entity persister for the owner - The index of the property within the owner. - - - - Given a collection, get an iterator of all its children, loading them - from the database if necessary. - - The session within which the cascade is occurring. - The mapping type of the collection. - The collection instance. - The children iterator. - - - - Iterate just the elements of the collection that are already there. Don't load - any new elements from the database. - - - - - - - - - - - - - - - - - - - - - - - - - - - - Execute persist during flush time - - - - - - - Does this action potentially extrapolate to orphan deletes? - True if this action can lead to deletions of orphans. - - - Does the specified cascading action require verification of no cascade validity? - True if this action requires no-cascade verification; false otherwise. - - - Should this action be performed (or noCascade consulted) in the case of lazy properties. - - - - We need an entry to tell us all about the current state - of a collection with respect to its persistent state - - - - session-start/post-flush persistent state - - - allow the snapshot to be serialized - - - - The when the Collection was loaded. - - - This can be if the Collection was not loaded by NHibernate and - was passed in along with a transient object. - - - - - The identifier of the Entity that is the owner of this Collection - during the load or post flush. - - - - - Indicates that the Collection can still be reached by an Entity - that exist in the . - - - It is also used to ensure that the Collection is not shared between - two Entities. - - - - - Indicates that the Collection has been processed and is ready - to have its state synchronized with the database. - - - - - Indicates that a Collection needs to be updated. - - - A Collection needs to be updated whenever the contents of the Collection - have been changed. - - - - - Indicates that a Collection has old elements that need to be removed. - - - A Collection needs to have removals performed whenever its role changes or - the key changes and it has a loadedPersister - ie - it was loaded by NHibernate. - - - - - Indicates that a Collection needs to be recreated. - - - A Collection needs to be recreated whenever its role changes - or the owner changes. - - - - - If we instantiate a collection during the - process, we must ignore it for the rest of the flush. - - - - - The that is currently responsible - for the Collection. - - - This is set when NHibernate is updating a reachable or an - unreachable collection. - - - - - Initializes a new instance of . - - - For newly wrapped collections, or dereferenced collection wrappers - - - - For collections just loaded from the database - - - - Initializes a new instance of for initialized detached collections. - - - For initialized detached collections - - - - - Determine if the collection is "really" dirty, by checking dirtiness - of the collection elements, if necessary - - - - - Prepares this CollectionEntry for the Flush process. - - The that this CollectionEntry will be responsible for flushing. - - - - Updates the CollectionEntry to reflect that the - has been initialized. - - The initialized that this Entry is for. - - - - Updates the CollectionEntry to reflect that it is has been successfully flushed to the database. - - The that was flushed. - - Called after a successful flush. - - - - - Sets the information in this CollectionEntry that is specific to the - . - - - The that is - responsible for the Collection. - - - - - - - - - - - - - - Uniquely identifies a collection instance in a particular session. - - - - - Record the fact that this collection was dereferenced - - The collection to be updated by unreachability. - The session. - - - - Initialize the role of the collection. - - The collection to be updated by reachibility. - The type of the collection. - The owner of the collection. - The session. - - - - We need an entry to tell us all about the current state - of an object with respect to its persistent state - - - - - Initializes a new instance of EntityEntry. - - The current of the Entity. - The snapshot of the Entity's state when it was loaded. - - The identifier of the Entity in the database. - The version of the Entity. - The for the Entity. - A boolean indicating if the Entity exists in the database. - The that is responsible for this Entity. - - - - - - - After actually inserting a row, record the fact that the instance exists on the - database (needed for identity-column key generation) - - - - - After actually updating the database, update the snapshot information, - and escalate the lock mode. - - - - - After actually deleting a row, record the fact that the instance no longer - exists in the database - - - - - Gets or sets the current of the Entity. - - The of the Entity. - - - - Gets or sets the of this Entity with respect to its - persistence in the database. - - The of this Entity. - - - - Gets or sets the identifier of the Entity in the database. - - The identifier of the Entity in the database if one has been assigned. - This might be when the is - and the database generates the id. - - - - Gets or sets the snapshot of the Entity when it was loaded from the database. - - The snapshot of the Entity. - - There will only be a value when the Entity was loaded in the current Session. - - - - - Gets or sets the snapshot of the Entity when it was marked as being ready for deletion. - - The snapshot of the Entity. - This will be if the Entity is not being deleted. - - - - Gets or sets a indicating if this Entity exists in the database. - - if it is already in the database. - - It can also be if it does not exists in the database yet and the - is . - - - - - Gets or sets the version of the Entity. - - The version of the Entity. - - - - Gets or sets the that is responsible for this Entity. - - The that is responsible for this Entity. - - - - Gets the Fully Qualified Name of the class this Entity is an instance of. - - The Fully Qualified Name of the class this Entity is an instance of. - - - - A globally unique identifier of an instance, consisting of the user-visible identifier - and the identifier space (eg. tablename) - - - - Construct a unique identifier for an entity class instance - - - Used to reconstruct an EntityKey during deserialization. - The identifier value - The root entity name - The specific entity name - The type of the identifier value - Whether represented entity is eligible for batch loading - The session factory - The entity's entity mode - - - - To use in deserialization callback - - - - - - Used to uniquely key an entity instance in relation to a particular session - by some unique property reference, as opposed to identifier. - Uniqueing information consists of the entity-name, the referenced - property name, and the referenced property value. - - - - - - A FilterDefinition defines the global attributes of a dynamic filter. This - information includes its name as well as its defined parameters (name and type). - - - - - Set the named parameter's value list for this filter. - - The name of the filter for which this configuration is in effect. - The default filter condition. - A dictionary storing the NHibernate type - of each parameter under its name. - - - - Retreive the type of the named parameter defined for this filter. - - The name of the filter parameter for which to return the type. - The type of the named parameter. - - - - Get the name of the filter this configuration defines. - - The filter name for this configuration. - - - - Get a set of the parameters defined by this configuration. - - The parameters named by this configuration. - - - Algorithms related to foreign key constraint transparency - - - - Is this instance persistent or detached? - - - If is non-null, don't hit the database to make the - determination, instead assume that value; the client code must be - prepared to "recover" in the case that this assumed result is incorrect. - - - - - Is this instance, which we know is not persistent, actually transient? - If assumed is non-null, don't hit the database to make the - determination, instead assume that value; the client code must be - prepared to "recover" in the case that this assumed result is incorrect. - - - If is non-null, don't hit the database to make the - determination, instead assume that value; the client code must be - prepared to "recover" in the case that this assumed result is incorrect. - - - - - Return the identifier of the persistent or transient object, or throw - an exception if the instance is "unsaved" - - - Used by OneToOneType and ManyToOneType to determine what id value should - be used for an object that may or may not be associated with the session. - This does a "best guess" using any/all info available to use (not just the - EntityEntry). - - - - - Nullify all references to entities that have not yet - been inserted in the database, where the foreign key - points toward that entity - - - - - Return null if the argument is an "unsaved" entity (ie. - one with no existing database row), or the input argument - otherwise. This is how Hibernate avoids foreign key constraint - violations. - - - - - Determine if the object already exists in the database, using a "best guess" - - - - - A strategy for determining if an identifier value is an identifier of a new - transient instance or a previously persistent transient instance. The strategy - is determined by the Unsaved-Value attribute in the mapping file. - - - - - - - - Assume the transient instance is newly instantiated if its identifier is null or - equal to Value - - - - - - Does the given identifier belong to a new instance - - - - - Always assume the transient instance is newly instantiated - - - - - Never assume that transient instance is newly instantiated - - - - - Assume the transient instance is newly instantiated if the identifier - is null. - - - - Assume nothing. - - - - Holds the state of the persistence context, including the - first-level cache, entries, snapshots, proxies, etc. - - - - Add a collection which has no owner loaded - - - - Get and remove a collection whose owner is not yet loaded, - when its owner is being loaded - - - - Clear the state of the persistence context - - - Set the status of an entry - - - Called after transactions end - - - - Get the current state of the entity as known to the underlying - database, or null if there is no corresponding row - - - - - Retrieve the cached database snapshot for the requested entity key. - - The entity key for which to retrieve the cached snapshot - The cached snapshot - - - This differs from is two important respects: - no snapshot is obtained from the database if not already cached - an entry of NO_ROW here is interpreted as an exception - - - - - - Get the values of the natural id fields as known to the underlying - database, or null if the entity has no natural id or there is no - corresponding row. - - - - Add a canonical mapping from entity key to entity instance - - - - Get the entity instance associated with the given EntityKey - - - - Is there an entity with the given key in the persistence context - - - - Remove an entity from the session cache, also clear - up other state associated with the entity, all except - for the EntityEntry - - - - Get an entity cached by unique key - - - Add an entity to the cache by unique key - - - - Retrieve the EntityEntry representation of the given entity. - - The entity for which to locate the EntityEntry. - The EntityEntry for the given entity. - - - Remove an entity entry from the session cache - - - Is there an EntityEntry for this instance? - - - Get the collection entry for a persistent collection - - - Adds an entity to the internal caches. - - - - Generates an appropriate EntityEntry instance and adds it - to the event source's internal caches. - - - - Is the given collection associated with this persistence context? - - - Is the given proxy associated with this persistence context? - - - - Takes the given object and, if it represents a proxy, reassociates it with this event source. - - The possible proxy to be reassociated. - Whether the passed value represented an actual proxy which got initialized. - - - - If a deleted entity instance is re-saved, and it has a proxy, we need to - reset the identifier of the proxy - - - - - Get the entity instance underlying the given proxy, throwing - an exception if the proxy is uninitialized. If the given object - is not a proxy, simply return the argument. - - - - - Possibly unproxy the given reference and reassociate it with the current session. - - The reference to be unproxied if it currently represents a proxy. - The unproxied instance. - - - - Attempts to check whether the given key represents an entity already loaded within the - current session. - - The entity reference against which to perform the uniqueness check. - The entity key. - - - - If the existing proxy is insufficiently "narrow" (derived), instantiate a new proxy - and overwrite the registration of the old one. This breaks == and occurs only for - "class" proxies rather than "interface" proxies. Also init the proxy to point to - the given target implementation if necessary. - - The proxy instance to be narrowed. - The persister for the proxied entity. - The internal cache key for the proxied entity. - (optional) the actual proxied entity instance. - An appropriately narrowed instance. - - - - Return the existing proxy associated with the given EntityKey, or the - third argument (the entity associated with the key) if no proxy exists. Init - the proxy to the target implementation, if necessary. - - - - - Return the existing proxy associated with the given EntityKey, or the - argument (the entity associated with the key) if no proxy exists. - (slower than the form above) - - - - Get the entity that owns this persistent collection - - - Get the entity that owned this persistent collection when it was loaded - The persistent collection - - The owner if its entity ID is available from the collection's loaded key - and the owner entity is in the persistence context; otherwise, returns null - - - - Get the ID for the entity that owned this persistent collection when it was loaded - The persistent collection - the owner ID if available from the collection's loaded key; otherwise, returns null - - - add a collection we just loaded up (still needs initializing) - - - add a detached uninitialized collection - - - - Add a new collection (ie. a newly created one, just instantiated by the - application, with no database state or snapshot) - - The collection to be associated with the persistence context - - - - - add an (initialized) collection that was created by another session and passed - into update() (ie. one with a snapshot and existing state on the database) - - - - add a collection we just pulled out of the cache (does not need initializing) - - - Get the collection instance associated with the CollectionKey - - - - Register a collection for non-lazy loading at the end of the two-phase load - - - - - Force initialization of all non-lazy collections encountered during - the current two-phase load (actually, this is a no-op, unless this - is the "outermost" load) - - - - Get the PersistentCollection object for an array - - - Register a PersistentCollection object for an array. - Associates a holder with an array - MUST be called after loading - array, since the array instance is not created until endLoad(). - - - - - Remove the mapping of collection to holder during eviction of the owning entity - - - - Get the snapshot of the pre-flush collection state - - - - Get the collection entry for a collection passed to filter, - which might be a collection wrapper, an array, or an unwrapped - collection. Return null if there is no entry. - - - - Get an existing proxy by key - - - Add a proxy to the session cache - - - Remove a proxy from the session cache - - - Called before cascading - - - Called after cascading - - - Call this before beginning a two-phase load - - - Call this after finishing a two-phase load - - - - Search the persistence context for an owner for the child object, - given a collection role - - - - - Search the persistence context for an index of the child object, given a collection role - - - - - Record the fact that the association belonging to the keyed entity is null. - - - - Is the association property belonging to the keyed entity null? - - - Set the object to read only and discard it's snapshot - - - - Get the session to which this persistence context is bound. - - - - - Retrieve this persistence context's managed load context. - - - - - Get the BatchFetchQueue, instantiating one if necessary. - - - - Retrieve the set of EntityKeys representing nullifiable references - - - Get the mapping from key value to entity instance - - - Get the mapping from entity instance to entity entry - - - Get the mapping from collection instance to collection entry - - - Get the mapping from collection key to collection instance - - - How deep are we cascaded? - - - Is a flush cycle currently in process? - Called before and after the flushcycle - - - False if we know for certain that all the entities are read-only - - - - Defines the internal contract between the ISessionFactory and other parts of NHibernate - such as implementors of IType. - - - - - Creates ISessions. - - - - Usually an application has a single SessionFactory. Threads servicing client requests - obtain ISessions from the factory. Implementors must be threadsafe. - - - ISessionFactorys are immutable. The behaviour of a SessionFactory - is controlled by properties supplied at configuration time. - These properties are defined on Environment - - - - - - Open a ISession on the given connection - - A connection provided by the application - A session - - Note that the second-level cache will be disabled if you - supply a ADO.NET connection. NHibernate will not be able to track - any statements you might have executed in the same transaction. - Consider implementing your own . - - - - - Create database connection and open a ISession on it, specifying an interceptor - - A session-scoped interceptor - A session - - - - Open a ISession on the given connection, specifying an interceptor - - A connection provided by the application - A session-scoped interceptor - A session - - Note that the second-level cache will be disabled if you - supply a ADO.NET connection. NHibernate will not be able to track - any statements you might have executed in the same transaction. - Consider implementing your own . - - - - - Create a database connection and open a ISession on it - - - - - - Get the associated with the given entity class - - the given entity type. - The class metadata or if not found. - - - - Get the associated with the given entity name - the given entity name. - The class metadata or if not found. - - - - - Get the CollectionMetadata associated with the named collection role - - - - - - - Get all as a from entityname - to metadata object - - A dictionary from an entity name to - - - - Get all CollectionMetadata as a IDictionary from role name - to metadata object - - - - - - Destroy this SessionFactory and release all resources - connection pools, etc). It is the responsibility of the application - to ensure that there are no open Sessions before calling - close(). - - - - - Evict all entries from the process-level cache. This method occurs outside - of any transaction; it performs an immediate "hard" remove, so does not respect - any transaction isolation semantics of the usage strategy. Use with care. - - - - - - Evict an entry from the process-level cache. This method occurs outside - of any transaction; it performs an immediate "hard" remove, so does not respect - any transaction isolation semantics of the usage strategy. Use with care. - - - - - - - Evict all entries from the second-level cache. This method occurs outside - of any transaction; it performs an immediate "hard" remove, so does not respect - any transaction isolation semantics of the usage strategy. Use with care. - - - - - Evict an entry from the second-level cache. This method occurs outside - of any transaction; it performs an immediate "hard" remove, so does not respect - any transaction isolation semantics of the usage strategy. Use with care. - - - - - Evict all entries from the process-level cache. This method occurs outside - of any transaction; it performs an immediate "hard" remove, so does not respect - any transaction isolation semantics of the usage strategy. Use with care. - - - - - - Evict an entry from the process-level cache. This method occurs outside - of any transaction; it performs an immediate "hard" remove, so does not respect - any transaction isolation semantics of the usage strategy. Use with care. - - - - - - - Evict any query result sets cached in the default query cache region. - - - - - Evict any query result sets cached in the named query cache region. - - - - - Get a new stateless session. - - - Get a new stateless session for the given ADO.NET connection. - - - - Obtain the definition of a filter by name. - - The name of the filter for which to obtain the definition. - The filter definition. - - - - Obtains the current session. - - - - The definition of what exactly "current" means is controlled by the - implementation configured for use. - - - The current session. - Indicates an issue locating a suitable current session. - - - Get the statistics for this session factory - - - Was this already closed? - - - - Obtain a set of the names of all filters defined on this SessionFactory. - - The set of filter names. - - - - Get the persister for the named entity - - The name of the entity that is persisted. - The for the entity. - If no can be found. - - - - Get the persister object for a collection role - - - - - - - Get the return types of a query - - - - - - Get the return aliases of a query - - - - Get the names of all persistent classes that implement/extend the given interface/class - - - - - - - Get a class name, using query language imports - - - - - - - Get a particular named query cache, or the default cache - - the name of the cache region, or null for the default - query cache - the existing cache, or a newly created cache if none by that - region name - - - - Gets the hql query identified by the name. - - The name of that identifies the query. - - A hql query or if the named - query does not exist. - - - - - Get the identifier generator for the hierarchy - - - - Get a named second-level cache region - - - - Open a session conforming to the given parameters. Used mainly - for current session processing. - - The external ado.net connection to use, if one (i.e., optional). - - Should the session be auto-flushed - prior to transaction completion? - - - Should the session be auto-closed after - transaction completion? - - The release mode for managed jdbc connections. - An appropriate session. - - - - Retrieves a set of all the collection roles in which the given entity - is a participant, as either an index or an element. - - The entity name for which to get the collection roles. - - Set of all the collection roles in which the given entityName participates. - - - - - Get the persister for the named entity - - The name of the entity that is persisted. - - The for the entity or is the name was not found. - - - - - Get the entity-name for a given mapped class. - - the mapped class - the enntity name where available or null - - - - Get the SQL . - - - - - Get the used. - - - - The cache of table update timestamps - - - Statistics SPI - - - Retrieves the SQLExceptionConverter in effect for this SessionFactory. - The SQLExceptionConverter for this SessionFactory. - - - - Get the default query cache - - - - - Gets the ICurrentSessionContext instance attached to this session factory. - - - - - Defines the internal contract between the Session and other parts of Hibernate - such as implementors of Type or ClassPersister - - - - - Initialize the session after its construction was complete - - - - - Initialize the collection (if not already initialized) - - - - - - - Load an instance without checking if it was deleted. If it does not exist and isn't nullable, throw an exception. - This method may create a new proxy or return an existing proxy. - - The entityName (or class full name) to load. - The identifier of the object in the database. - Allow null instance - When enabled, the object is eagerly fetched. - - A proxy of the object or an instance of the object if the persistentClass does not have a proxy. - - No object could be found with that id. - - - - Load an instance immediately. Do not return a proxy. - - - - - - - - Execute a List() query - - - - - - - - Strongly-typed version of - - - - - Strongly-typed version of - - - - - Execute an Iterate() query - - - - - - - - Strongly-typed version of - - - - - Execute a filter - - - - - Execute a filter (strongly-typed version). - - - - - Collection from a filter - - - - - Strongly-typed version of - - - - Get the for any instance - optional entity name - the entity instance - - - - Notify the session that an NHibernate transaction has begun. - - - - - Notify the session that the transaction is about to complete - - - - - Notify the session that the transaction completed, so we no longer own the old locks. - (Also we should release cache softlocks). May be called multiple times during the transaction - completion process. - - - - - Return the identifier of the persistent object, or null if transient - - - - - Instantiate the entity class, initializing with the given identifier - - - - - Execute an SQL Query - - - - - Strongly-typed version of - - - - Execute an SQL Query - - - - Retrieve the currently set value for a filter parameter. - - The filter parameter name in the format - {FILTER_NAME.PARAMETER_NAME}. - The filter parameter value. - - - - Retrieve the type for a given filter parameter. - - The filter parameter name in the format - {FILTER_NAME.PARAMETER_NAME}. - The filter parameter type. - - - - Get the entity instance associated with the given Key, - calling the Interceptor if necessary - - - - The best guess entity name for an entity not in an association - - - The guessed entity name for an entity not in an association - - - Execute a native SQL update or delete query - - - Execute a HQL update or delete query - - - - System time before the start of the transaction - - - - - - Get the creating SessionFactoryImplementor - - - - - - Get the prepared statement Batcher for this session - - - - - Return the currently enabled filters. The filter map is keyed by filter - name, with values corresponding to the - instance. - - The currently enabled filters. - - - Retrieves the configured event listeners from this event source. - - - Get the persistence context for this session - - - - Is the ISession still open? - - - - - Is the ISession currently connected? - - - - Determine whether the session is closed. Provided separately from - {@link #isOpen()} as this method does not attempt any JTA synch - registration, where as {@link #isOpen()} does; which makes this one - nicer to use for most internal purposes. - - True if the session is closed; false otherwise. - - - - - Does this Session have an active Hibernate transaction - or is there a JTA transaction in progress? - - - - Retrieve the entity mode in effect for this session. - - - - Get the aliased columns of the owning entity which are to - be used in the join - - - - - Get the columns of the owning entity which are to - be used in the join - - - - - Get the aliased columns of the owning entity which are to - be used in the join - - - - - Get the columns of the owning entity which are to - be used in the join - - - - - Get the columns of the associated table which are to - be used in the join - - - - - Implements the algorithm for validating property values - for illegal null values - - - - - Check nullability of the class persister properties - - entity properties - class persister - wether it is intended to be updated or saved - - - - Check sub elements-nullability. Returns property path that break - nullability or null if none - - type to check - value to check - property path - - - - Check component nullability. Returns property path that break - nullability or null if none - - component properties - component not-nullable type - property path - - - - Return a well formed property path. - Basicaly, it will return parent.child - - parent in path - child in path - parent-child path - - - - Container for data that is used during the NHibernate query/load process. - - - - - - - - Ensure the Types and Values are the same length. - - - If the Lengths of and - are not equal. - - - - - - - - Named parameters. - - - - - Gets or sets an array of objects that is stored at the index - of the Parameter. - - - - - Gets or sets an array of objects that is stored at the index - of the Parameter. - - - - - Gets or sets the for the Query. - - - - - Gets or sets an that contains the alias name of the - object from hql as the key and the as the value. - - An of lock modes. - - - - Information to determine how to run an IDbCommand and what - records to return from the IDataReader. - - - - - Indicates that the no value has been set on the Property. - - - - - Gets or Sets the Index of the First Row to Select - - The Index of the First Rows to Select - Defaults to 0 unless specifically set. - - - - Gets or Sets the Maximum Number of Rows to Select - - The Maximum Number of Rows to Select - Defaults to NoValue unless specifically set. - - - - Gets or Sets the Timeout of the Query - - The Query Timeout - Defaults to NoValue unless specifically set. - - - - A represents the state of persistent "stuff" which - NHibernate is tracking. This includes persistent entities, collections, - as well as proxies generated. - - - There is meant to be a one-to-one correspondence between a SessionImpl and - a PersistentContext. The SessionImpl uses the PersistentContext to track - the current state of its context. Event-listeners then use the - PersistentContext to drive their processing. - - - - Constructs a PersistentContext, bound to the given session. - The session "owning" this context. - - - Add a collection which has no owner loaded - - - - Get and remove a collection whose owner is not yet loaded, - when its owner is being loaded - - - - Clear the state of the persistence context - - - Set the status of an entry - - - Called after transactions end - - - - Get the current state of the entity as known to the underlying - database, or null if there is no corresponding row - - - - - Retrieve the cached database snapshot for the requested entity key. - - The entity key for which to retrieve the cached snapshot - The cached snapshot - - - This differs from is two important respects: - no snapshot is obtained from the database if not already cached - an entry of NO_ROW here is interpreted as an exception - - - - - - Get the values of the natural id fields as known to the underlying - database, or null if the entity has no natural id or there is no - corresponding row. - - - - Add a canonical mapping from entity key to entity instance - - - - Get the entity instance associated with the given EntityKey - - - - Is there an entity with the given key in the persistence context - - - - Remove an entity from the session cache, also clear - up other state associated with the entity, all except - for the EntityEntry - - - - Get an entity cached by unique key - - - Add an entity to the cache by unique key - - - - Retrieve the EntityEntry representation of the given entity. - - The entity for which to locate the EntityEntry. - The EntityEntry for the given entity. - - - Remove an entity entry from the session cache - - - Is there an EntityEntry for this instance? - - - Get the collection entry for a persistent collection - - - Adds an entity to the internal caches. - - - - Generates an appropriate EntityEntry instance and adds it - to the event source's internal caches. - - - - Is the given collection associated with this persistence context? - - - Is the given proxy associated with this persistence context? - - - - Takes the given object and, if it represents a proxy, reassociates it with this event source. - - The possible proxy to be reassociated. - Whether the passed value represented an actual proxy which got initialized. - - - - If a deleted entity instance is re-saved, and it has a proxy, we need to - reset the identifier of the proxy - - - - - Associate a proxy that was instantiated by another session with this session - - The proxy initializer. - The proxy to reassociate. - - - - Get the entity instance underlying the given proxy, throwing - an exception if the proxy is uninitialized. If the given object - is not a proxy, simply return the argument. - - - - - Possibly unproxy the given reference and reassociate it with the current session. - - The reference to be unproxied if it currently represents a proxy. - The unproxied instance. - - - - Attempts to check whether the given key represents an entity already loaded within the - current session. - - The entity reference against which to perform the uniqueness check. - The entity key. - - - - If the existing proxy is insufficiently "narrow" (derived), instantiate a new proxy - and overwrite the registration of the old one. This breaks == and occurs only for - "class" proxies rather than "interface" proxies. Also init the proxy to point to - the given target implementation if necessary. - - The proxy instance to be narrowed. - The persister for the proxied entity. - The internal cache key for the proxied entity. - (optional) the actual proxied entity instance. - An appropriately narrowed instance. - - - - Return the existing proxy associated with the given EntityKey, or the - third argument (the entity associated with the key) if no proxy exists. Init - the proxy to the target implementation, if necessary. - - - - - Return the existing proxy associated with the given EntityKey, or the - argument (the entity associated with the key) if no proxy exists. - (slower than the form above) - - - - Get the entity that owns this persistent collection - - - Get the entity that owned this persistent collection when it was loaded - The persistent collection - - The owner, if its entity ID is available from the collection's loaded key - and the owner entity is in the persistence context; otherwise, returns null - - - - Get the ID for the entity that owned this persistent collection when it was loaded - The persistent collection - the owner ID if available from the collection's loaded key; otherwise, returns null - - - Get the ID for the entity that owned this persistent collection when it was loaded - The collection entry - the owner ID if available from the collection's loaded key; otherwise, returns null - - - add a collection we just loaded up (still needs initializing) - - - add a detached uninitialized collection - - - - Add a new collection (ie. a newly created one, just instantiated by the - application, with no database state or snapshot) - - The collection to be associated with the persistence context - - - - Add an collection to the cache, with a given collection entry. - The collection for which we are adding an entry. - The entry representing the collection. - The key of the collection's entry. - - - Add a collection to the cache, creating a new collection entry for it - The collection for which we are adding an entry. - The collection persister - - - - add an (initialized) collection that was created by another session and passed - into update() (ie. one with a snapshot and existing state on the database) - - - - add a collection we just pulled out of the cache (does not need initializing) - - - Get the collection instance associated with the CollectionKey - - - - Register a collection for non-lazy loading at the end of the two-phase load - - - - - Force initialization of all non-lazy collections encountered during - the current two-phase load (actually, this is a no-op, unless this - is the "outermost" load) - - - - Get the PersistentCollection object for an array - - - Register a PersistentCollection object for an array. - Associates a holder with an array - MUST be called after loading - array, since the array instance is not created until endLoad(). - - - - - Remove the mapping of collection to holder during eviction of the owning entity - - - - Get the snapshot of the pre-flush collection state - - - - Get the collection entry for a collection passed to filter, - which might be a collection wrapper, an array, or an unwrapped - collection. Return null if there is no entry. - - - - Get an existing proxy by key - - - Add a proxy to the session cache - - - Remove a proxy from the session cache - - - Called before cascading - - - Called after cascading - - - Call this before begining a two-phase load - - - Call this after finishing a two-phase load - - - - Search the persistence context for an owner for the child object, - given a collection role - - - - - Search the persistence context for an index of the child object, given a collection role - - - - - Record the fact that the association belonging to the keyed entity is null. - - - - Is the association property belonging to the keyed entity null? - - - Set the object to read only and discard it's snapshot - - - - Get the session to which this persistence context is bound. - - - - - Retrieve this persistence context's managed load context. - - - - - Get the BatchFetchQueue, instantiating one if necessary. - - - - Retrieve the set of EntityKeys representing nullifiable references - - - Get the mapping from key value to entity instance - - - Get the mapping from entity instance to entity entry - - - Get the mapping from collection instance to collection entry - - - Get the mapping from collection key to collection instance - - - How deep are we cascaded? - - - Is a flush cycle currently in process? - Called before and after the flushcycle - - - False if we know for certain that all the entities are read-only - - - - Represents the status of an entity with respect to - this session. These statuses are for internal - book-keeping only and are not intended to represent - any notion that is visible to the application. - - - - - The Entity is snapshotted in the Session with the same state as the database - (called Managed in H3). - - - - - The Entity is in the Session and has been marked for deletion but not - deleted from the database yet. - - - - - The Entity has been deleted from database. - - - - - The Entity is in the process of being loaded. - - - - - The Entity is in the process of being saved. - - - - - The entity is read-only. - - - - - Allows work to be done outside the current transaction, by suspending it, - and performing work in a new transaction - - - - The work to be done - - - Suspend the current transaction and perform work in a new transaction - - - - Functionality relating to Hibernate's two-phase loading process, - that may be reused by persisters that do not use the Loader - framework - - - - - Register the "hydrated" state of an entity instance, after the first step of 2-phase loading. - - Add the "hydrated state" (an array) of an uninitialized entity to the session. We don't try - to resolve any associations yet, because there might be other entities waiting to be - read from the JDBC result set we are currently processing - - - - - Perform the second step of 2-phase load. Fully initialize the entity instance. - After processing a JDBC result set, we "resolve" all the associations - between the entities which were instantiated and had their state - "hydrated" into an array - - - - - Add an uninitialized instance of an entity class, as a placeholder to ensure object - identity. Must be called before postHydrate(). - Create a "temporary" entry for a newly instantiated entity. The entity is uninitialized, - but we need the mapping from id to instance in order to guarantee uniqueness. - - - - An ordered pair of a value and its Hibernate type. - - - - Return an IdentifierValue for the specified unsaved-value. If none is specified, - guess the unsaved value by instantiating a test instance of the class and - reading it's id property, or if that is not possible, using the java default - value for the type - - - - - An enum of the different ways a value might be "included". - - - This is really an expanded true/false notion with Partial being the - expansion. Partial deals with components in the cases where - parts of the referenced component might define inclusion, but the - component overall does not. - - - - - Utility methods for managing versions and timestamps - - - - - Increment the given version number - - The value of the current version. - The of the versioned property. - The current . - Returns the next value for the version. - - - - Create an initial version number - - The of the versioned property. - The current . - A seed value to initialize the versioned property with. - - - - Seed the given instance state snapshot with an initial version number - - An array of objects that contains a snapshot of a persistent object. - The index of the version property in the fields parameter. - The of the versioned property. - Force the version to initialize - The current session, if any. - if the version property needs to be seeded with an initial value. - - - - Set the version number of the given instance state snapshot - - An array of objects that contains a snapshot of a persistent object. - The value the version should be set to in the fields parameter. - The that is responsible for persisting the values of the fields parameter. - - - - Get the version number of the given instance state snapshot - - An array of objects that contains a snapshot of a persistent object. - The that is responsible for persisting the values of the fields parameter. - - The value of the version contained in the fields parameter or null if the - Entity is not versioned. - - - - Do we need to increment the version number, given the dirty properties? - The array of property indexes which were deemed dirty - Were any collections found to be dirty (structurally changed) - An array indicating versionability of each property. - True if a version increment is required; false otherwise. - - - - A strategy for determining if a version value is an version of - a new transient instance or a previously persistent transient instance. - The strategy is determined by the Unsaved-Value attribute in the mapping file. - - - - - - - - Assume the transient instance is newly instantiated if its version is null or - equal to Value - - - - - - Does the given identifier belong to a new instance - - - - - Assume the transient instance is newly instantiated if the version - is null, otherwise assume it is a detached instance. - - - - - Assume the transient instance is newly instantiated if the version - is null, otherwise defer to the identifier unsaved-value. - - - - - Assume the transient instance is newly instantiated if the identifier - is null. - - - - - A convenience base class for listeners whose functionality results in flushing. - - - - - Coordinates the processing necessary to get things ready for executions - as db calls by preparing the session caches and moving the appropriate - entities and collections to their respective execution queues. - - The flush event. - - - - Execute all SQL and second-level cache updates, in a - special order so that foreign-key constraints cannot - be violated: - - Inserts, in the order they were performed - Updates - Deletion of collection elements - Insertion of collection elements - Deletes, in the order they were performed - - - - - - 1. Recreate the collection key -> collection map - 2. rebuild the collection entries - 3. call Interceptor.postFlush() - - - - - A convenience base class for listeners that respond to requests to perform a - pessimistic lock upgrade on an entity. - - - - - A convenience base class for listeners that respond to requests to reassociate an entity - to a session ( such as through lock() or update() ). - - - - - Associates a given entity (either transient or associated with another session) to the given session. - - The event triggering the re-association - The entity to be associated - The id of the entity. - The entity's persister instance. - An EntityEntry representing the entity within this session. - - - - Performs a pessimistic lock upgrade on a given entity, if needed. - - The entity for which to upgrade the lock. - The entity's EntityEntry instance. - The lock mode being requested for locking. - The session which is the source of the event being processed. - - - - A convenience bas class for listeners responding to save events. - - - - - Prepares the save call using the given requested id. - - The entity to be saved. - The id to which to associate the entity. - The name of the entity being saved. - Generally cascade-specific information. - The session which is the source of this save event. - The id used to save the entity. - - - - Prepares the save call using a newly generated id. - - The entity to be saved - The entity-name for the entity to be saved - Generally cascade-specific information. - The session which is the source of this save event. - - does the event context require - access to the identifier immediately after execution of this method (if - not, post-insert style id generators may be postponed if we are outside - a transaction). - - - The id used to save the entity; may be null depending on the - type of id generator used and the requiresImmediateIdAccess value - - - - - Prepares the save call by checking the session caches for a pre-existing - entity and performing any lifecycle callbacks. - - The entity to be saved. - The id by which to save the entity. - The entity's persister instance. - Is an identity column being used? - Generally cascade-specific information. - The session from which the event originated. - - does the event context require - access to the identifier immediately after execution of this method (if - not, post-insert style id generators may be postponed if we are outside - a transaction). - - - The id used to save the entity; may be null depending on the - type of id generator used and the requiresImmediateIdAccess value - - - - - Performs all the actual work needed to save an entity (well to get the save moved to - the execution queue). - - The entity to be saved - The id to be used for saving the entity (or null, in the case of identity columns) - The entity's persister instance. - Should an identity column be used for id generation? - Generally cascade-specific information. - The session which is the source of the current event. - - Is access to the identifier required immediately - after the completion of the save? persist(), for example, does not require this... - - - The id used to save the entity; may be null depending on the - type of id generator used and the requiresImmediateIdAccess value - - - - - Perform any property value substitution that is necessary - (interceptor callback, version initialization...) - - The entity - The entity identifier - The snapshot entity state - The entity persister - The originating session - - True if the snapshot state changed such that - reinjection of the values into the entity is required. - - - - Handles the calls needed to perform pre-save cascades for the given entity. - The session from which the save event originated. - The entity's persister instance. - The entity to be saved. - Generally cascade-specific data - - - Handles to calls needed to perform post-save cascades. - The session from which the event originated. - The entity's persister instance. - The entity being saved. - Generally cascade-specific data - - - - Determine whether the entity is persistent, detached, or transient - - The entity to check - The name of the entity - The entity's entry in the persistence context - The originating session. - The state. - - - - After the save, will te version number be incremented - if the instance is modified? - - True if the version will be incremented on an entity change after save; false otherwise. - - - - Abstract superclass of algorithms that walk a tree of property values of an entity, and - perform specific functionality for collections, components and associated entities. - - - - Dispatch each property value to ProcessValue(). - - - - - - Visit a property value. Dispatch to the correct handler for the property type. - - - - - - - Visit a component. Dispatch each property to - - - - - - - - Visit a many-to-one or one-to-one associated entity. Default superclass implementation is a no-op. - - - - - - - - Visit a collection. Default superclass implementation is a no-op. - - - - - - - - Walk the tree starting from the given entity. - - - - - - - Defines the default flush event listeners used by hibernate for - flushing session state in response to generated auto-flush events. - - - - Defines the contract for handling of session auto-flush events. - - - - Handle the given auto-flush event. - - The auto-flush event to be handled. - - - - Handle the given auto-flush event. - - The auto-flush event to be handled. - - - - Defines the default delete event listener used by hibernate for deleting entities - from the datastore in response to generated delete events. - - - - Defines the contract for handling of deletion events generated from a session. - - - Handle the given delete event. - The delete event to be handled. - - - Handle the given delete event. - The delete event to be handled. - - - Called when we have recognized an attempt to delete a detached entity. - The event. - - This is perfectly valid in Hibernate usage; JPA, however, forbids this. - Thus, this is a hook for HEM to affect this behavior. - - - - - We encountered a delete request on a transient instance. -

            - This is a deviation from historical Hibernate (pre-3.2) behavior to - align with the JPA spec, which states that transient entities can be - passed to remove operation in which case cascades still need to be - performed. -

            - The session which is the source of the event - The entity being delete processed - Is cascading of deletes enabled - The entity persister - - A cache of already visited transient entities (to avoid infinite recursion). - -
            - - - Perform the entity deletion. Well, as with most operations, does not - really perform it; just schedules an action/execution with the - for execution during flush. - - The originating session - The entity to delete - The entity's entry in the - Is delete cascading enabled? - The entity persister. - A cache of already deleted entities. - - - - Defines the default dirty-check event listener used by hibernate for - checking the session for dirtiness in response to generated dirty-check events. - - - - Defines the contract for handling of session dirty-check events. - - - Handle the given dirty-check event. - The dirty-check event to be handled. - - - - Defines the default evict event listener used by hibernate for evicting entities - in response to generated flush events. In particular, this implementation will - remove any hard references to the entity that are held by the infrastructure - (references held by application or other persistent instances are okay) - - - - Defines the contract for handling of evict events generated from a session. - - - Handle the given evict event. - The evict event to be handled. - - - - An event that occurs for each entity instance at flush time - - - - - Flushes a single entity's state to the database, by scheduling an update action, if necessary - - - - - make sure user didn't mangle the id - - The obj. - The persister. - The id. - The entity mode. - - - - Performs all necessary checking to determine if an entity needs an SQL update - to synchronize its state to the database. Modifies the event by side-effect! - Note: this method is quite slow, avoid calling if possible! - - - - Perform a dirty check, and attach the results to the event - - - - Defines the default flush event listeners used by hibernate for - flushing session state in response to generated flush events. - - - - Defines the contract for handling of session flush events. - - - Handle the given flush event. - The flush event to be handled. - - - - Defines the contract for handling of collection initialization events - generated by a session. - - - - called by a collection that wants to initialize itself - - - Try to initialize a collection from the cache - - - - Defines the default load event listeners used by hibernate for loading entities - in response to generated load events. - - - - - Defines the contract for handling of load events generated from a session. - - - - - Handle the given load event. - - The load event to be handled. - - The result (i.e., the loaded entity). - - - Perfoms the load of an entity. - The loaded entity. - - - - Based on configured options, will either return a pre-existing proxy, - generate a new proxy, or perform an actual load. - - The result of the proxy/load operation. - - - - Given that there is a pre-existing proxy. - Initialize it if necessary; narrow if necessary. - - - - - Given that there is no pre-existing proxy. - Check if the entity is already loaded. If it is, return the entity, - otherwise create and return a proxy. - - - - - If the class to be loaded has been configured with a cache, then lock - given id in that cache and then perform the load. - - The loaded entity - - - - Coordinates the efforts to load a given entity. First, an attempt is - made to load the entity from the session-level cache. If not found there, - an attempt is made to locate it in second-level cache. Lastly, an - attempt is made to load it directly from the datasource. - - The load event - The persister for the entity being requested for load - The EntityKey representing the entity to be loaded. - The load options. - The loaded entity, or null. - - - - Performs the process of loading an entity from the configured underlying datasource. - - The load event - The persister for the entity being requested for load - The EntityKey representing the entity to be loaded. - The load options. - The object loaded from the datasource, or null if not found. - - - - Attempts to locate the entity in the session-level cache. - - The load event - The EntityKey representing the entity to be loaded. - The load options. - The entity from the session-level cache, or null. - - If allowed to return nulls, then if the entity happens to be found in - the session cache, we check the entity type for proper handling - of entity hierarchies. - If checkDeleted was set to true, then if the entity is found in the - session-level cache, it's current status within the session cache - is checked to see if it has previously been scheduled for deletion. - - - - Attempts to load the entity from the second-level cache. - The load event - The persister for the entity being requested for load - The load options. - The entity from the second-level cache, or null. - - - - Defines the default lock event listeners used by hibernate to lock entities - in response to generated lock events. - - - - - Defines the contract for handling of lock events generated from a session. - - - - Handle the given lock event. - The lock event to be handled. - - - Handle the given lock event. - The lock event to be handled. - - - - Defines the default copy event listener used by hibernate for copying entities - in response to generated copy events. - - - - - Defines the contract for handling of merge events generated from a session. - - - - Handle the given merge event. - The merge event to be handled. - - - Handle the given merge event. - The merge event to be handled. - - - - - Perform any cascades needed as part of this copy event. - - The merge event being processed. - The persister of the entity being copied. - The entity being copied. - A cache of already copied instance. - - - Cascade behavior is redefined by this subclass, disable superclass behavior - - - Cascade behavior is redefined by this subclass, disable superclass behavior - - - - Defines the default create event listener used by hibernate for creating - transient entities in response to generated create events. - - - - - Defines the contract for handling of create events generated from a session. - - - - Handle the given create event. - The create event to be handled. - - - Handle the given create event. - The create event to be handled. - - - - Handle the given create event. - The save event to be handled. - - - - When persist is used as the cascade action, persistOnFlush should be used - - - Call interface if necessary - - - - Occurs after an an entity instance is fully loaded. - - - - - - - - - - - Called before injecting property values into a newly - loaded entity instance. - - - - - Called before injecting property values into a newly loaded entity instance. - - - - - - - - - - - Defines the default refresh event listener used by hibernate for refreshing entities - in response to generated refresh events. - - - - - Defines the contract for handling of refresh events generated from a session. - - - - Handle the given refresh event. - The refresh event to be handled. - - - - - - - - - - - Defines the default replicate event listener used by Hibernate to replicate - entities in response to generated replicate events. - - - - - Defines the contract for handling of replicate events generated from a session. - - - - Handle the given replicate event. - The replicate event to be handled. - - - An event handler for save() events - - - - Defines the default listener used by Hibernate for handling save-update events. - - - - - Defines the contract for handling of update events generated from a session. - - - - Handle the given update event. - The update event to be handled. - - - - The given save-update event named a transient entity. - Here, we will perform the save processing. - - The save event to be handled. - The entity's identifier after saving. - - - - Save the transient instance, assigning the right identifier - - The initiating event. - The entity's identifier value after saving. - - - - The given save-update event named a detached entity. - Here, we will perform the update processing. - - The update event to be handled. - - - Determine the id to use for updating. - The entity. - The entity persister - The requested identifier - The entity mode. - The id. - - - - Handles the calls needed to perform cascades as part of an update request - for the given entity. - - The event currently being processed. - The defined persister for the entity being updated. - The entity being updated. - - - An event handler for update() events - - - - If the user specified an id, assign it to the instance and use that, - otherwise use the id already assigned to the instance - - - - - A Visitor that determines if a dirty collection was found. - - - - - Reason for dirty collection - - - - If it is a new application-instantiated collection, return true (does not occur anymore!) - - - - - If it is a component, recurse. - - - - - If it is a wrapped collection, ask the collection entry. - - - - - - - - Gets a indicating if a dirty collection was found. - - if a dirty collection was found. - - - - Evict any collections referenced by the object from the session cache. - This will NOT pick up any collections that were dereferenced, so they - will be deleted (suboptimal but not exactly incorrect). - - - - - Process collections reachable from an entity. - This visitor assumes that wrap was already performed for the entity. - - - - - When a transient entity is passed to lock(), we must inspect all its collections and - 1. associate any uninitialized PersistentCollections with this session - 2. associate any initialized PersistentCollections with this session, using the existing snapshot - 3. throw an exception for each "new" collection - - - - - Abstract superclass of visitors that reattach collections - - - - - Reassociates uninitialized proxies with the session - - - - - Visit a many-to-one or one-to-one associated entity. Default superclass implementation is a no-op. - - - - - - - - Has the owner of the collection changed since the collection was snapshotted and detached? - - - - - Reattach a detached (disassociated) initialized or uninitialized - collection wrapper, using a snapshot carried with the collection wrapper - - - - - Schedules a collection for deletion. - - The persister representing the collection to be removed. - The collection key (differs from owner-id in the case of property-refs). - The session from which the request originated. - - - - This version is slightly different in that here we need to assume that - the owner is not yet associated with the session, and thus we cannot - rely on the owner's EntityEntry snapshot... - - The persister for the collection role being processed. - - - - - When an entity is passed to replicate(), and there is an existing row, we must - inspect all its collections and - 1. associate any uninitialized PersistentCollections with this session - 2. associate any initialized PersistentCollections with this session, using the existing snapshot - 3. execute a collection removal (SQL DELETE) for each null collection property or "new" collection - - - - - When an entity is passed to update(), we must inspect all its collections and - 1. associate any uninitialized PersistentCollections with this session - 2. associate any initialized PersistentCollections with this session, using the existing snapshot - 3. execute a collection removal (SQL DELETE) for each null collection property or "new" collection - - - - - Wrap collections in a Hibernate collection wrapper. - - - - Defines a base class for events involving collections. - - - - Defines a base class for Session generated events. - - - - - Constructs an event from the given event session. - - The session event source. - - - - Returns the session event source for this event. - This is the underlying session from which this event was generated. - - - - Constructs an AbstractCollectionEvent object. - The collection persister. - The collection - The Session source - The owner that is affected by this event; can be null if unavailable - - The ID for the owner that is affected by this event; can be null if unavailable - that is affected by this event; can be null if unavailable - - - - Get the entity name for the collection owner entity that is affected by this event. - - The entity name; if the owner is not in the PersistenceContext, the - returned value may be a superclass name, instead of the actual class name - - - - The collection owner entity that is affected by this event. - - Returns null if the entity is not in the persistence context - (e.g., because the collection from a detached entity was moved to a new owner) - - - - Get the ID for the collection owner entity that is affected by this event. - - Returns null if the ID cannot be obtained - from the collection's loaded key (e.g., a property-ref is used for the - collection and does not include the entity's ID) - - - - - Represents an operation we are about to perform against the database. - - - - Constructs an event containing the pertinent information. - The session from which the event originated. - The entity to be invloved in the database operation. - The entity id to be invloved in the database operation. - The entity's persister. - - - The entity involved in the database operation. - - - The id to be used in the database operation. - - - - The persister for the . - - - - Defines an event class for the auto-flushing of a session. - - - Defines an event class for the flushing of a session. - - - Defines an event class for the deletion of an entity. - - - Constructs a new DeleteEvent instance. - The entity to be deleted. - The session from which the delete event was generated. - - - - - Returns the encapsulated entity to be deleed. - - - - Defines an event class for the dirty-checking of a session. - - - - A convience holder for all defined session event listeners. - - - - - Call on any listeners that implement - . - - - - - Defines an event class for the evicting of an entity. - - - - Contract for listeners which require notification of SessionFactory closing, - presumably to destroy internal state. - - - - - Notification of shutdown. - - - - - The main runtime interface between a Java application and Hibernate. This is the central - API class abstracting the notion of a persistence service. - - - - The lifecycle of a ISession is bounded by the beginning and end of a logical - transaction. (Long transactions might span several database transactions.) - - - The main function of the ISession is to offer create, find and delete operations - for instances of mapped entity classes. Instances may exist in one of two states: - - transient: not associated with any ISession - persistent: associated with a ISession - - - - Transient instances may be made persistent by calling Save(), Insert(), - or Update(). Persistent instances may be made transient by calling Delete(). - Any instance returned by a List(), Iterate(), Load(), or Create - method is persistent. - - - Save() results in an SQL INSERT, Delete() - in an SQL DELETE and Update() in an SQL UPDATE. Changes to - persistent instances are detected at flush time and also result in an SQL - UPDATE. - - - It is not intended that implementors be threadsafe. Instead each thread/transaction should obtain - its own instance from an ISessionFactory. - - - A ISession instance is serializable if its persistent classes are serializable - - - A typical transaction should use the following idiom: - - ISession sess = factory.OpenSession(); - ITransaction tx; - try { - tx = sess.BeginTransaction(); - //do some work - ... - tx.Commit(); - } catch (Exception e) { - if (tx != null) tx.Rollback(); - throw; - } finally { - sess.Close(); - } - - - - If the ISession throws an exception, the transaction must be rolled back and the session - discarded. The internal state of the ISession might not be consistent with the database - after the exception occurs. - - - - - - - Force the ISession to flush. - - - Must be called at the end of a unit of work, before commiting the transaction and closing - the session (Transaction.Commit() calls this method). Flushing if the process - of synchronising the underlying persistent store with persistable state held in memory. - - - - - Disconnect the ISession from the current ADO.NET connection. - - - If the connection was obtained by Hibernate, close it or return it to the connection - pool. Otherwise return it to the application. This is used by applications which require - long transactions. - - The connection provided by the application or - - - - Obtain a new ADO.NET connection. - - - This is used by applications which require long transactions - - - - - Reconnect to the given ADO.NET connection. - - This is used by applications which require long transactions - An ADO.NET connection - - - - End the ISession by disconnecting from the ADO.NET connection and cleaning up. - - - It is not strictly necessary to Close() the ISession but you must - at least Disconnect() it. - - The connection provided by the application or - - - - Cancel execution of the current query. - - - May be called from one thread to stop execution of a query in another thread. - Use with care! - - - - - Does this ISession contain any changes which must be - synchronized with the database? Would any SQL be executed if - we flushed this session? - - - - - Return the identifier of an entity instance cached by the ISession - - - Throws an exception if the instance is transient or associated with a different - ISession - - a persistent instance - the identifier - - - - Is this instance associated with this Session? - - an instance of a persistent class - true if the given instance is associated with this Session - - - - Remove this instance from the session cache. - - - Changes to the instance will not be synchronized with the database. - This operation cascades to associated instances if the association is mapped - with cascade="all" or cascade="all-delete-orphan". - - a persistent instance - - - - Return the persistent instance of the given entity class with the given identifier, - obtaining the specified lock mode. - - A persistent class - A valid identifier of an existing persistent instance of the class - The lock level - the persistent instance - - - - Return the persistent instance of the given entity class with the given identifier, - obtaining the specified lock mode, assuming the instance exists. - - The entity-name of a persistent class - a valid identifier of an existing persistent instance of the class - the lock level - the persistent instance or proxy - - - - Return the persistent instance of the given entity class with the given identifier, - assuming that the instance exists. - - - You should not use this method to determine if an instance exists (use a query or - instead). Use this only to retrieve an instance - that you assume exists, where non-existence would be an actual error. - - A persistent class - A valid identifier of an existing persistent instance of the class - The persistent instance or proxy - - - - Return the persistent instance of the given entity class with the given identifier, - obtaining the specified lock mode. - - A persistent class - A valid identifier of an existing persistent instance of the class - The lock level - the persistent instance - - - - Return the persistent instance of the given entity class with the given identifier, - assuming that the instance exists. - - - You should not use this method to determine if an instance exists (use a query or - instead). Use this only to retrieve an instance that you - assume exists, where non-existence would be an actual error. - - A persistent class - A valid identifier of an existing persistent instance of the class - The persistent instance or proxy - - - - Return the persistent instance of the given with the given identifier, - assuming that the instance exists. - - The entity-name of a persistent class - a valid identifier of an existing persistent instance of the class - The persistent instance or proxy - - You should not use this method to determine if an instance exists (use - instead). Use this only to retrieve an instance that you assume exists, where non-existence - would be an actual error. - - - - - Read the persistent state associated with the given identifier into the given transient - instance. - - An "empty" instance of the persistent class - A valid identifier of an existing persistent instance of the class - - - - Persist all reachable transient objects, reusing the current identifier - values. Note that this will not trigger the Interceptor of the Session. - - a detached instance of a persistent class - - - - - Persist the state of the given detached instance, reusing the current - identifier value. This operation cascades to associated instances if - the association is mapped with cascade="replicate". - - - a detached instance of a persistent class - - - - - Persist the given transient instance, first assigning a generated identifier. - - - Save will use the current value of the identifier property if the Assigned - generator is used. - - A transient instance of a persistent class - The generated identifier - - - - Persist the given transient instance, using the given identifier. - - A transient instance of a persistent class - An unused valid identifier - - - - Persist the given transient instance, first assigning a generated identifier. (Or - using the current value of the identifier property if the assigned - generator is used.) - - The Entity name. - a transient instance of a persistent class - the generated identifier - - This operation cascades to associated instances if the - association is mapped with cascade="save-update". - - - - - Either Save() or Update() the given instance, depending upon the value of - its identifier property. - - - By default the instance is always saved. This behaviour may be adjusted by specifying - an unsaved-value attribute of the identifier property mapping - - A transient instance containing new or updated state - - - - Either or - the given instance, depending upon resolution of the unsaved-value checks - (see the manual for discussion of unsaved-value checking). - - The name of the entity - a transient or detached instance containing new or updated state - - - - This operation cascades to associated instances if the association is mapped - with cascade="save-update". - - - - - Update the persistent instance with the identifier of the given transient instance. - - - If there is a persistent instance with the same identifier, an exception is thrown. If - the given transient instance has a identifier, an exception will be thrown. - - A transient instance containing updated state - - - - Update the persistent state associated with the given identifier. - - - An exception is thrown if there is a persistent instance with the same identifier - in the current session. - - A transient instance containing updated state - Identifier of persistent instance - - - - Update the persistent instance with the identifier of the given detached - instance. - - The Entity name. - a detached instance containing updated state - - If there is a persistent instance with the same identifier, - an exception is thrown. This operation cascades to associated instances - if the association is mapped with cascade="save-update". - - - - - Copy the state of the given object onto the persistent object with the same - identifier. If there is no persistent instance currently associated with - the session, it will be loaded. Return the persistent instance. If the - given instance is unsaved, save a copy of and return it as a newly persistent - instance. The given instance does not become associated with the session. - This operation cascades to associated instances if the association is mapped - with cascade="merge".
            - The semantics of this method are defined by JSR-220. -
            - a detached instance with state to be copied - an updated persistent instance -
            - - - Copy the state of the given object onto the persistent object with the same - identifier. If there is no persistent instance currently associated with - the session, it will be loaded. Return the persistent instance. If the - given instance is unsaved, save a copy of and return it as a newly persistent - instance. The given instance does not become associated with the session. - This operation cascades to associated instances if the association is mapped - with cascade="merge".
            - The semantics of this method are defined by JSR-220. - Name of the entity. - a detached instance with state to be copied - an updated persistent instance -
            - -
            - - - Make a transient instance persistent. This operation cascades to associated - instances if the association is mapped with cascade="persist".
            - The semantics of this method are defined by JSR-220. -
            - a transient instance to be made persistent -
            - - - Make a transient instance persistent. This operation cascades to associated - instances if the association is mapped with cascade="persist".
            - The semantics of this method are defined by JSR-220. -
            - Name of the entity. - a transient instance to be made persistent -
            - - - Copy the state of the given object onto the persistent object with the same - identifier. If there is no persistent instance currently associated with - the session, it will be loaded. Return the persistent instance. If the - given instance is unsaved or does not exist in the database, save it and - return it as a newly persistent instance. Otherwise, the given instance - does not become associated with the session. - - a transient instance with state to be copied - an updated persistent instance - - - - Copy the state of the given object onto the persistent object with the - given identifier. If there is no persistent instance currently associated - with the session, it will be loaded. Return the persistent instance. If - there is no database row with the given identifier, save the given instance - and return it as a newly persistent instance. Otherwise, the given instance - does not become associated with the session. - - a persistent or transient instance with state to be copied - the identifier of the instance to copy to - an updated persistent instance - - - - Remove a persistent instance from the datastore. - - - The argument may be an instance associated with the receiving ISession or a - transient instance with an identifier associated with existing persistent state. - - The instance to be removed - - - - Remove a persistent instance from the datastore. The object argument may be - an instance associated with the receiving or a transient - instance with an identifier associated with existing persistent state. - This operation cascades to associated instances if the association is mapped - with cascade="delete". - - The entity name for the instance to be removed. - the instance to be removed - - - - Execute a query - - A query expressed in Hibernate's query language - A distinct list of instances - See for implications of cache usage. - - - - Execute a query, binding a value to a "?" parameter in the query string. - - The query string - A value to be bound to a "?" placeholder - The Hibernate type of the value - A distinct list of instances - See for implications of cache usage. - - - - Execute a query, binding an array of values to a "?" parameters in the query string. - - The query string - An array of values to be bound to the "?" placeholders - An array of Hibernate types of the values - A distinct list of instances - See for implications of cache usage. - - - - Execute a query and return the results in an interator. - - - - If the query has multiple return values, values will be returned in an array of - type object[]. - - - Entities returned as results are initialized on demand. The first SQL query returns - identifiers only. So Enumerator() is usually a less efficient way to retrieve - object than List(). - - - The query string - An enumerator - - - - Execute a query and return the results in an interator, - binding a value to a "?" parameter in the query string. - - - - If the query has multiple return values, values will be returned in an array of - type object[]. - - - Entities returned as results are initialized on demand. The first SQL query returns - identifiers only. So Enumerator() is usually a less efficient way to retrieve - object than List(). - - - The query string - A value to be written to a "?" placeholder in the query string - The hibernate type of the value - An enumerator - - - - Execute a query and return the results in an interator, - binding the values to "?"s parameters in the query string. - - - - If the query has multiple return values, values will be returned in an array of - type object[]. - - - Entities returned as results are initialized on demand. The first SQL query returns - identifiers only. So Enumerator() is usually a less efficient way to retrieve - object than List(). - - - The query string - A list of values to be written to "?" placeholders in the query - A list of hibernate types of the values - An enumerator - - - - Apply a filter to a persistent collection. - - - A filter is a Hibernate query that may refer to this, the collection element. - Filters allow efficient access to very large lazy collections. (Executing the filter - does not initialize the collection.) - - A persistent collection to filter - A filter query string - The resulting collection - - - - Apply a filter to a persistent collection, binding the given parameter to a "?" placeholder - - - A filter is a Hibernate query that may refer to this, the collection element. - Filters allow efficient access to very large lazy collections. (Executing the filter - does not initialize the collection.) - - A persistent collection to filter - A filter query string - A value to be written to a "?" placeholder in the query - The hibernate type of value - A collection - - - - Apply a filter to a persistent collection, binding the given parameters to "?" placeholders. - - - A filter is a Hibernate query that may refer to this, the collection element. - Filters allow efficient access to very large lazy collections. (Executing the filter - does not initialize the collection.) - - A persistent collection to filter - A filter query string - The values to be written to "?" placeholders in the query - The hibernate types of the values - A collection - - - - Delete all objects returned by the query. - - The query string - Returns the number of objects deleted. - - - - Delete all objects returned by the query. - - The query string - A value to be written to a "?" placeholer in the query - The hibernate type of value. - The number of instances deleted - - - - Delete all objects returned by the query. - - The query string - A list of values to be written to "?" placeholders in the query - A list of Hibernate types of the values - The number of instances deleted - - - - Obtain the specified lock level upon the given object. - - A persistent instance - The lock level - - - - Obtain the specified lock level upon the given object. - - The Entity name. - a persistent or transient instance - the lock level - - This may be used to perform a version check (), to upgrade to a pessimistic - lock (), or to simply reassociate a transient instance - with a session (). This operation cascades to associated - instances if the association is mapped with cascade="lock". - - - - - Re-read the state of the given instance from the underlying database. - - - - It is inadvisable to use this to implement long-running sessions that span many - business tasks. This method is, however, useful in certain special circumstances. - - - For example, - - Where a database trigger alters the object state upon insert or update - After executing direct SQL (eg. a mass update) in the same session - After inserting a Blob or Clob - - - - A persistent instance - - - - Re-read the state of the given instance from the underlying database, with - the given LockMode. - - - It is inadvisable to use this to implement long-running sessions that span many - business tasks. This method is, however, useful in certain special circumstances. - - a persistent or transient instance - the lock mode to use - - - - Determine the current lock mode of the given object - - A persistent instance - The current lock mode - - - - Begin a unit of work and return the associated ITransaction object. - - - If a new underlying transaction is required, begin the transaction. Otherwise - continue the new work in the context of the existing underlying transaction. - The class of the returned object is determined by - the property transaction_factory - - A transaction instance - - - - Begin a transaction with the specified isolationLevel - - Isolation level for the new transaction - A transaction instance having the specified isolation level - - - - Creates a new Criteria for the entity class. - - The entity class - An ICriteria object - - - - Creates a new Criteria for the entity class with a specific alias - - The entity class - The alias of the entity - An ICriteria object - - - - Creates a new Criteria for the entity class. - - The class to Query - An ICriteria object - - - - Creates a new Criteria for the entity class with a specific alias - - The class to Query - The alias of the entity - An ICriteria object - - - - Create a new Criteria instance, for the given entity name. - - The name of the entity to Query - An ICriteria object - - - - Create a new Criteria instance, for the given entity name, - with the given alias. - - The name of the entity to Query - The alias of the entity - An ICriteria object - - - - Create a new instance of Query for the given query string - - A hibernate query string - The query - - - - Create a new instance of Query for the given collection and filter string - - A persistent collection - A hibernate query - A query - - - - Obtain an instance of for a named query string defined in the - mapping file. - - The name of a query defined externally. - An from a named query string. - - The query can be either in HQL or SQL format. - - - - - Create a new instance of IQuery for the given SQL string. - - a query expressed in SQL - a table alias that appears inside {} in the SQL string - the returned persistent class - An from the SQL string - - - - Create a new instance of for the given SQL string. - - a query expressed in SQL - an array of table aliases that appear inside {} in the SQL string - the returned persistent classes - An from the SQL string - - - - Create a new instance of for the given SQL query string. - - a query expressed in SQL - An from the SQL string - - - - Completely clear the session. Evict all loaded instances and cancel all pending - saves, updates and deletions. Do not close open enumerables or instances of - ScrollableResults. - - - - - Return the persistent instance of the given entity class with the given identifier, or null - if there is no such persistent instance. (If the instance, or a proxy for the instance, is - already associated with the session, return that instance or proxy.) - - a persistent class - an identifier - a persistent instance or null - - - - Return the persistent instance of the given entity class with the given identifier, or null - if there is no such persistent instance. Obtain the specified lock mode if the instance - exists. - - a persistent class - an identifier - the lock mode - a persistent instance or null - - - - Return the persistent instance of the given named entity with the given identifier, - or null if there is no such persistent instance. (If the instance, or a proxy for the - instance, is already associated with the session, return that instance or proxy.) - - the entity name - an identifier - a persistent instance or null - - - - Strongly-typed version of - - - - - Strongly-typed version of - - - - - Return the entity name for a persistent entity - - a persistent entity - the entity name - - - - Enable the named filter for this current session. - - The name of the filter to be enabled. - The Filter instance representing the enabled filter. - - - - Retrieve a currently enabled filter by name. - - The name of the filter to be retrieved. - The Filter instance representing the enabled filter. - - - - Disable the named filter for the current session. - - The name of the filter to be disabled. - - - - Create a multi query, a query that can send several - queries to the server, and return all their results in a single - call. - - - An that can return - a list of all the results of all the queries. - Note that each query result is itself usually a list. - - - - - Sets the batch size of the session - - - - - - - Gets the session implementation. - - - This method is provided in order to get the NHibernate implementation of the session from wrapper implementions. - Implementors of the interface should return the NHibernate implementation of this method. - - - An NHibernate implementation of the interface - - - - - An that can return a list of all the results - of all the criterias. - - - - - - Starts a new Session with the given entity mode in effect. This secondary - Session inherits the connection, transaction, and other context - information from the primary Session. It doesn't need to be flushed - or closed by the developer. - - The entity mode to use for the new session. - The new session - - - The entity mode in effect for this session. - - - - Determines at which points Hibernate automatically flushes the session. - - - For a readonly session, it is reasonable to set the flush mode to FlushMode.Never - at the start of the session (in order to achieve some extra performance). - - - - The current cache mode. - - Cache mode determines the manner in which this session can interact with - the second level cache. - - - - - Get the that created this instance. - - - - - Gets the ADO.NET connection. - - - Applications are responsible for calling commit/rollback upon the connection before - closing the ISession. - - - - - Is the ISession still open? - - - - - Is the ISession currently connected? - - - - - Get the current Unit of Work and return the associated ITransaction object. - - - - Get the statistics for this session. - - - - Instantiate an entity instance, using either an interceptor, - or the given persister - - - - Force an immediate flush - - - Cascade merge an entity instance - - - Cascade persist an entity instance - - - Cascade persist an entity instance during the flush process - - - Cascade refresh an entity instance - - - Cascade copy an entity instance - - - Cascade delete an entity instance - - - Get the ActionQueue for this session - - - - An event listener that requires access to mappings to - initialize state at initialization time. - - - - - An event that occurs when a collection wants to be initialized - - - - Called after recreating a collection - - - Called after removing a collection - - - Called after updating a collection - - - Called after deleting an item from the datastore - - - - - - - - - Called after inserting an item in the datastore - - - - - - - - - - Called after updating the datastore - - - - - - - - - - Called before recreating a collection - - - Called before removing a collection - - - Called before updating a collection - - - - Called before deleting an item from the datastore - - - - Return true if the operation should be vetoed - - - - - Called before inserting an item in the datastore - - - - Return true if the operation should be vetoed - - - - - Called before updating the datastore - - - - Return true if the operation should be vetoed - - - - - Values for listener type property. - - - - Not allowed in Xml. It represents the default value when an explicit type is assigned. - - - Xml value: auto-flush - - - Xml value: merge - - - Xml value: create - - - Xml value: create-onflush - - - Xml value: delete - - - Xml value: dirty-check - - - Xml value: evict - - - Xml value: flush - - - Xml value: flush-entity - - - Xml value: load - - - Xml value: load-collection - - - Xml value: lock - - - Xml value: refresh - - - Xml value: replicate - - - Xml value: save-update - - - Xml value: save - - - Xml value: pre-update - - - Xml value: update - - - Xml value: pre-load - - - Xml value: pre-delete - - - Xml value: pre-insert - - - Xml value: pre-collection-recreate - - - Xml value: pre-collection-remove - - - Xml value: pre-collection-update - - - Xml value: post-load - - - Xml value: post-insert - - - Xml value: post-update - - - Xml value: post-delete - - - Xml value: post-commit-update - - - Xml value: post-commit-insert - - - Xml value: post-commit-delete - - - Xml value: post-collection-recreate - - - Xml value: post-collection-remove - - - Xml value: post-collection-update - - - Defines an event class for the loading of an entity. - - - - Defines an event class for the locking of an entity. - - - - - An event class for merge() and saveOrUpdateCopy() - - - - An event class for persist() - - - An event that occurs after a collection is recreated - - - An event that occurs after a collection is removed - - - An event that occurs after a collection is updated - - - - Occurs after deleting an item from the datastore - - - - - Occurs after inserting an item in the datastore - - - - - Occurs after an an entity instance is fully loaded. - - - - - Occurs after the datastore is updated - - - - An event that occurs before a collection is recreated - - - An event that occurs before a collection is removed - - - An event that occurs before a collection is updated - - - - Represents a pre-delete event, which occurs just prior to - performing the deletion of an entity from the database. - - - - - Constructs an event containing the pertinent information. - - The entity to be deleted. - The id to use in the deletion. - The entity's state at deletion time. - The entity's persister. - The session from which the event originated. - - - - This is the entity state at the - time of deletion (useful for optomistic locking and such). - - - - - Represents a pre-insert event, which occurs just prior to - performing the insert of an entity into the database. - - - - - These are the values to be inserted. - - - - - Called before injecting property values into a newly loaded entity instance. - - - - - Represents a pre-update event, which occurs just prior to - performing the update of an entity in the database. - - - - - Retrieves the state to be used in the update. - - - - - The old state of the entity at the time it was last loaded from the - database; can be null in the case of detached entities. - - - - - Defines an event class for the refreshing of an object. - - - - - Defines an event class for the replication of an entity. - - - - - An event class for saveOrUpdate() - - - - - Implementation of ADOException indicating problems with communicating with the - database (can also include incorrect ADO setup). - - - - - Wraps exceptions that occur during ADO.NET calls. - - - Exceptions thrown by various ADO.NET providers are not derived from - a common base class (SQLException in Java), so - is used instead in NHibernate. - - - - - Initializes a new instance of the class. - - The message that describes the error. - - The exception that is the cause of the current exception. If the innerException parameter - is not a null reference, the current exception is raised in a catch block that handles - the inner exception. - - - - - Initializes a new instance of the class. - - - The that holds the serialized object - data about the exception being thrown. - - - The that contains contextual information about the source or destination. - - - - - Collect data of an to be converted. - - - - - The to be converted. - - - - - An optional error message. - - - - - The SQL that generate the exception - - - - - Optional EntityName where available in the original exception context. - - - - - Optional EntityId where available in the original exception context. - - - - - Converts the given SQLException into Exception hierarchy, as well as performing - appropriate logging. - - The converter to use. - The exception to convert. - An optional error message. - The SQL executed. - The converted . - - - - Converts the given SQLException into Exception hierarchy, as well as performing - appropriate logging. - - The converter to use. - The exception to convert. - An optional error message. - The converted . - - - For the given , locates the . - The exception from which to extract the - The , or null. - - - - Implementation of ADOException indicating that the requested DML operation - resulted in a violation of a defined integrity constraint. - - - - - Returns the name of the violated constraint, if known. - - The name of the violated constraint, or null if not known. - - - - Implementation of ADOException indicating that evaluation of the - valid SQL statement against the given data resulted in some - illegal operation, mismatched types or incorrect cardinality. - - - - - The Configurable interface defines the contract for impls that - want to be configured prior to usage given the currently defined Hibernate properties. - - - - Configure the component, using the given settings and properties. - All defined startup properties. - - - - Defines a contract for implementations that know how to convert a - into NHibernate's hierarchy. - - - Inspired by Spring's SQLExceptionTranslator. - - Implementations must have a constructor which takes a - parameter. - - Implementations may implement if they need to perform - configuration steps prior to first use. - - - - - - Convert the given into custom Exception. - - Available information during exception throw. - The resulting Exception to throw. - - - - Implementation of ADOException indicating a problem acquiring lock - on the database. - - - - A factory for building SQLExceptionConverter instances. - - - Build a SQLExceptionConverter instance. - The defined dialect. - The configuration properties. - An appropriate instance. - - First, looks for a property to see - if the configuration specified the class of a specific converter to use. If this - property is set, attempt to construct an instance of that class. If not set, or - if construction fails, the converter specific to the dialect will be used. - - - - - Builds a minimal converter. The instance returned here just always converts to . - - The minimal converter. - - - - Implementation of ADOException indicating that the SQL sent to the database - server was invalid (syntax error, invalid object references, etc). - - - - - A SQLExceptionConverter implementation which performs no conversion of - the underlying . - Interpretation of a SQL error based on - is not possible as using the ErrorCode (which is, however, vendor- - specific). Use of a ErrorCode-based converter should be preferred approach - for converting/interpreting SQLExceptions. - - - - Handle an exception not converted to a specific type based on the SQLState. - The exception to be handled. - An optional message - Optionally, the sql being performed when the exception occurred. - The converted exception; should never be null. - - - - Encapsulates the strategy required to execute various types of update, delete, - and insert statements issued through HQL. - - - - - Execute the sql managed by this executor using the given parameters. - - Essentially bind information for this processing. - The session originating the request. - The number of entities updated/deleted. - - - - True if this is a filter query (allow no FROM clause). * - - - - Returns to the previous 'FROM' context. - - - - - - Implementations will report or handle errors invoked by an ANTLR base parser. - Author: josh - Ported by: Steve Strong - - - - all append invocations on the buf should go through this Output instance variable. - The value of this variable may be temporarily substitued by sql function processing code - to catch generated arguments. - This is because sql function templates need arguments as seperate string chunks - that will be assembled into the target dialect-specific function call. - - - - Handles parser errors. - - - - - Add a aspace if the previous token was not a space or a parenthesis. - - - - - The default SQL writer. - - - - - Writes SQL fragments. - - - - todo remove this hack - The parameter is either ", " or " , ". This is needed to pass sql generating tests as the old - sql generator uses " , " in the WHERE and ", " in SELECT. - - @param comma either " , " or ", " - - - - Abstract superclass of object loading (and querying) strategies. - - -

            - This class implements useful common functionality that concrete loaders would delegate to. - It is not intended that this functionality would be directly accessed by client code (Hence, - all methods of this class are declared protected or private.) This class relies heavily upon the - interface, which is the contract between this class and - s that may be loaded by it. -

            -

            - The present implementation is able to load any number of columns of entities and at most - one collection role per query. -

            -
            - -
            - - - What lock mode does this load entities with? - - A Collection of lock modes specified dynamically via the Query Interface - - - - - Append FOR UPDATE OF clause, if necessary. This - empty superclass implementation merely returns its first - argument. - - - - - Does this query return objects that might be already cached by - the session, whose lock mode may need upgrading. - - - - - - Modify the SQL, adding lock hints and comments, if necessary - - - - - Execute an SQL query and attempt to instantiate instances of the class mapped by the given - persister from each row of the DataReader. If an object is supplied, will attempt to - initialize that object. If a collection is supplied, attempt to initialize that collection. - - - - - Loads a single row from the result set. This is the processing used from the - ScrollableResults where no collection fetches were encountered. - - The result set from which to do the load. - The session from which the request originated. - The query parameters specified by the user. - Should proxies be generated - The loaded "row". - - - - - Read any collection elements contained in a single row of the result set - - - - - Get the actual object that is returned in the user-visible result list. - - - This empty implementation merely returns its first argument. This is - overridden by some subclasses. - - - - - For missing objects associated by one-to-one with another object in the - result set, register the fact that the the object is missing with the - session. - - - - - Read one collection element from the current row of the ADO.NET result set - - - - - If this is a collection initializer, we need to tell the session that a collection - is being initilized, to account for the possibility of the collection having - no elements (hence no rows in the result set). - - - - - Read a row of EntityKeys from the IDataReader into the given array. - - - Warning: this method is side-effecty. If an id is given, don't bother going - to the IDataReader - - - - - Check the version of the object in the IDataReader against - the object version in the session cache, throwing an exception - if the version numbers are different. - - - - - - Resolve any ids for currently loaded objects, duplications within the IDataReader, - etc. Instanciate empty objects to be initialized from the IDataReader. Return an - array of objects (a row of results) and an array of booleans (by side-effect) that determine - wheter the corresponding object should be initialized - - - - - The entity instance is already in the session cache - - - - - The entity instance is not in the session cache - - - - - Hydrate the state of an object from the SQL IDataReader, into - an array of "hydrated" values (do not resolve associations yet), - and pass the hydrated state to the session. - - - - - Determine the concrete class of an instance for the IDataReader - - - - - Advance the cursor to the first required row of the IDataReader - - - - - Should we pre-process the SQL string, adding a dialect-specific - LIMIT clause. - - - - - - - - Obtain an IDbCommand with all parameters pre-bound. Bind positional parameters, - named parameters, and limit parameters. - - - Creates an IDbCommand object and populates it with the values necessary to execute it against the - database to Load an Entity. - - The to use for the IDbCommand. - TODO: find out where this is used... - The SessionImpl this Command is being prepared in. - A CommandWrapper wrapping an IDbCommand that is ready to be executed. - - - - Some dialect-specific LIMIT clauses require the maximium last row number - (aka, first_row_number + total_row_count), while others require the maximum - returned row count (the total maximum number of rows to return). - - The selection criteria - The dialect - The appropriate value to bind into the limit clause. - - - - Bind parameters needed by the dialect-specific LIMIT clause - - The number of parameters bound - - - - Limits the number of rows returned by the Sql query if necessary. - - The IDbCommand to limit. - The RowSelection that contains the MaxResults info. - TODO: This does not apply to ADO.NET at all - - - - Bind all parameter values into the prepared statement in preparation for execution. - - The ADO prepared statement - The encapsulation of the parameter values to be bound. - The position from which to start binding parameter values. - The originating session. - The number of ADO bind positions actually bound during this method execution. - - - - Fetch a IDbCommand, call SetMaxRows and then execute it, - advance to the first result and return an SQL IDataReader - - The to execute. - The to apply to the and . - true if result types need to be auto-discovered by the loader; false otherwise. - The to load in. - - An IDataReader advanced to the first record in RowSelection. - - - - Called by subclasses that load entities - - - - - Called by subclasses that batch load entities - - - - - Called by subclasses that load collections - - - - - Called by wrappers that batch initialize collections - - - - - Called by subclasses that batch initialize collections - - - - - Return the query results, using the query cache, called - by subclasses that implement cacheable queries - - - - - - - - - - Actually execute a query, ignoring the query cache - - - - - - - - Calculate and cache select-clause suffixes. Must be - called by subclasses after instantiation. - - - - of - - - - An array indicating whether the entities have eager property fetching - enabled. - - Eager property fetching indicators. - - - - An array of indexes of the entity that owns a one-to-one association - to the entity at the given index (-1 if there is no "owner") - - - The indexes contained here are relative to the result of . - - - - - An array of the owner types corresponding to the - returns. Indices indicating no owner would be null here. - - - - - Get the index of the entity that owns the collection, or -1 - if there is no owner in the query results (i.e. in the case of a - collection initializer) or no collection. - - - - - Return false is this loader is a batch entity loader - - - - - Get the result set descriptor - - - - - The SqlString to be called; implemented by all subclasses - - - - The setter was added so that class inheriting from Loader could write a - value using the Property instead of directly to the field. - - - The scope is protected internal because the needs to - be able to get the SqlString of the when - it is parsing a subquery. - - - - - - An array of persisters of entity classes contained in each row of results; - implemented by all subclasses - - - The setter was added so that classes inheriting from Loader could write a - value using the Property instead of directly to the field. - - - - - An (optional) persister for a collection to be initialized; only collection loaders - return a non-null value - - - - - Get the SQL table aliases of entities whose - associations are subselect-loadable, returning - null if this loader does not support subselect - loading - - - - - Identifies the query for statistics reporting, if null, - no statistics will be reported - - - - - Utility method that generates 0_, 1_ suffixes. Subclasses don't - necessarily need to use this algorithm, but it is intended that - they will in most cases. - - - - - Returns the locations of all occurrences of the named parameter. - - - - - - - - - a collection of lock modes specified dynamically via the Query interface - - - - - Base class for nodes dealing 'is null' and 'is not null' operators. - todo : a good deal of this is copied from BinaryLogicOperatorNode; look at consolidating these code fragments - - Author: Steve Ebersole - Ported by: Steve Strong - - - - - Represents a unary operator node. - - Author: Steve Ebersole - Ported by: Steve Strong - - - - - A semantic analysis node, that points back to the main analyzer. - Authoer: josh - Ported by: Steve Strong - - - - - A base AST node for the intermediate tree. - - - - The original text for the node, mostly for debugging. - - - The data type of this node. Null for 'no type'. - - - - Retrieve the text to be used for rendering this particular node. - - The session factory - The text to use for rendering - - - - An interface for initializeable AST nodes. - - - - - Initializes the node with the parameter. - - the initialization parameter. - - - A pointer back to the phase 2 processor. - - - - Contract for nodes representing unary operators. - - Author: Steve Ebersole - Ported by: Steve Strong - - - - - Contract for nodes representing operators (logic or arithmetic). - Author: Steve Ebersole - Ported by: Steve Strong - - - - - Called by the tree walker during hql-sql semantic analysis - after the operator sub-tree is completely built. - - - - - Retrieves the data type for the overall operator expression. - - The expression's data type. - - - - Retrieves the node representing the operator's single operand. - - - - - When (if) we need to expand a row value constructor, what is the type of connector to use between the - expansion fragments. - - The expansion connector type. - - - - When (if) we need to expand a row value constructor, what is the text of connector to use between the - expansion fragments. - - The expansion connector text. - - - - Convenience implementation of Statement to centralize common functionality. - Author: Steve Ebersole - Ported by: Steve Strong - - - - - Implementors will return additional display text, which will be used - by the ASTPrinter to display information (besides the node type and node - text). - - - - - Returns additional display text for the AST node. - - The additional display text. - - - - Common interface modeling the different HQL statements (i.e., INSERT, UPDATE, DELETE, SELECT). - Author: Steve Ebersole - Ported by: Steve Strong - - - - - The "phase 2" walker which generated this statement tree. - - - - - The main token type representing the type of this statement. - - - - - Does this statement require the StatementExecutor? - Essentially, at the JDBC level, does this require an executeUpdate()? - - - - - Returns additional display text for the AST node. - - The additional display text. - - - - Type definition for Statements which are restrictable via a where-clause (and - thus also having a from-clause). - Author: Steve Ebersole - Ported by: Steve Strong - - - - - Retreives the from-clause in effect for this statement; could be null if the from-clause - has not yet been parsed/generated. - - - - - Does this statement tree currently contain a where clause? - Returns True if a where-clause is found in the statement tree and - that where clause actually defines restrictions; false otherwise. - - - - - Retreives the where-clause defining the restriction(s) in effect for - this statement. - Note that this will generate a where-clause if one was not found, so caution - needs to taken prior to calling this that restrictions will actually exist - in the resulting statement tree (otherwise "unexpected end of subtree" errors - might occur during rendering). - - - - - Represents an element of a projection list, i.e. a select expression. - Author: josh - Ported by: Steve Strong - - - - - Appends AST nodes that represent the columns after the current AST node. - (e.g. 'as col0_O_') - - The index of the select expression in the projection list. - - - - Returns the data type of the select expression. - - - - - Returns the FROM element that this expression refers to. - - - - - Returns true if the element is a constructor (e.g. new Foo). - - - - - Returns true if this select expression represents an entity that can be returned. - - - - - Sets the text of the node. - - - - - Represents an aggregate function i.e. min, max, sum, avg. - - Author: Joshua Davis - Ported by: Steve Strong - - - - - Encapsulates the information relating to an individual assignment within the - set clause of an HQL update statement. This information is used during execution - of the update statements when the updates occur against "multi-table" stuff. - - - - - Contract for nodes representing logcial BETWEEN (ternary) operators. - - - - - Nodes which represent binary arithmetic operators. - - - - - Contract for nodes representing binary operators. - Author: Steve Ebersole - Ported by: Steve Strong - - - - - The left-hand operand of the operator. - - - - - The right-hand operand of the operator. - - - - Retrieves the left-hand operand of the operator. - - @return The left-hand operand - - - Retrieves the right-hand operand of the operator. - - @return The right-hand operand - - - - Contract for nodes representing binary operators. - Author: Steve Ebersole - Ported by: Steve Strong - - - - - Performs the operator node initialization by seeking out any parameter - nodes and setting their expected type, if possible. - - - - Mutate the subtree relating to a row-value-constructor to instead use - a series of ANDed predicates. This allows multi-column type comparisons - and explicit row-value-constructor syntax even on databases which do - not support row-value-constructor. -

            - For example, here we'd mutate "... where (col1, col2) = ('val1', 'val2) ..." to - "... where col1 = 'val1' and col2 = 'val2' ..." - - @param valueElements The number of elements in the row value constructor list. - - -

            - Represents a boolean literal within a query. - -
            - - - Represents a literal. - - Author: josh - Ported by: Steve Strong - - - - - Interface for nodes which wish to be made aware of any determined "expected - type" based on the context within they appear in the query. - Author: Steve Ebersole - Ported by: Steve Strong - - - - Expected-types really only pertinent here for boolean literals... - - @param expectedType - - - - Represents a case ... when .. then ... else ... end expression in a select. - - - - - Represents a case ... when .. then ... else ... end expression in a select. - - Author: Gavin King - Ported by: Steve Strong - - - - - Represents 'elements()' or 'indices()'. - Author: josh - Ported by: Steve strong - - - - - Represents a method call - Author: josh - Ported by: Steve Strong - - - - - Common behavior - a node that contains a list of select expressions. - Author: josh - Ported by: Steve Strong - - - - - Returns an array of SelectExpressions gathered from the children of the given parent AST node. - - - - - Returns an array of SelectExpressions gathered from the children of the given parent AST node. - - - - - Returns the first select expression node that should be considered when building the array of select - expressions. - - - - - Represents a COUNT expression in a select. - Author: josh - Ported by: Steve Strong - - - - - Defines a top-level AST node representing an HQL delete statement. - - - - - Represents a reference to a property or alias expression. This should duplicate the relevant behaviors in - PathExpressionParser. - Author: Joshua Davis - Ported by: Steve Strong - - - - - The contract for expression sub-trees that can resolve themselves. - Author: josh - Ported by: Steve Strong - - - - - Does the work of resolving an identifier or a dot - - - - - Does the work of resolving an identifier or a dot, but without a parent node - - - - - Does the work of resolving an identifier or a dot, but without a parent node or alias - - - - - Does the work of resolving inside of the scope of a function call - - - - - Does the work of resolving an an index []. - - - - - An AST node with a path property. This path property will be the fully qualified name. - Author: josh - Ported by: Steve Strong - - - - - Returns the full path name represented by the node. - - the full path name represented by the node. - - - - Sub-classes can override this method if they produce implied joins (e.g. DotNode). - - an implied join created by this from reference. - - - - The full path, to the root alias of this dot node. - - - - - The type of dereference that hapened (DEREF_xxx). - - - - - The identifier that is the name of the property. - - - - - The unresolved property path relative to this dot node. - - - - - The column names that this resolves to. - - - - - Fetch join or not. - - - - - The type of join to create. Default is an inner join. - - - - - Is the given property name a reference to the primary key of the associated - entity construed by the given entity type? - For example, consider a fragment like order.customer.id - (where order is a from-element alias). Here, we'd have: - propertyName = "id" AND - owningType = ManyToOneType(Customer) - and are being asked to determine whether "customer.id" is a reference - to customer's PK... - - The name of the property to check. - The type represeting the entity "owning" the property - True if propertyName references the entity's (owningType->associatedEntity) primary key; false otherwise. - - - - Sets the join type for this '.' node structure. - - - - - Returns the full path of the node. - - - - - Represents the 'FROM' part of a query or subquery, containing all mapped class references. - Author: josh - Ported by: Steve Strong - - - - - Counts the from elements as they are added. - - - - - All of the implicit FROM xxx JOIN yyy elements that are the destination of a collection. These are created from - index operators on collection property references. - - - - - Pointer to the parent FROM clause, if there is one. - - - - - Collection of FROM clauses of which this is the parent. - - - - - Convenience method to check whether a given token represents a from-element alias. - - The potential from-element alias to check. - True if the possibleAlias is an alias to a from-element visible from this point in the query graph. - - - - Returns true if the from node contains the class alias name. - - The HQL class alias name. - true if the from node contains the class alias name. - - - - Returns true if the from node contains the table alias name. - - The SQL table alias name. - true if the from node contains the table alias name. - - - - Adds a new from element to the from node. - - The reference to the class. - The alias AST. - The new FROM element. - - - - Retreives the from-element represented by the given alias. - - The alias by which to locate the from-element. - The from-element assigned the given alias, or null if none. - - - - Returns the list of from elements in order. - - The list of from elements (instances of FromElement). - - - - Returns the list of from elements that will be part of the result set. - - the list of from elements that will be part of the result set. - - - - Look for an existing implicit or explicit join by the given path. - - - - - Currently this is needed in order to deal with {@link FromElement FromElements} which - contain "hidden" JDBC parameters from applying filters. - Would love for this to go away, but that would require that Hibernate's - internal {@link org.hibernate.engine.JoinSequence join handling} be able to either:
              -
            • render the same AST structures
            • -
            • render structures capable of being converted to these AST structures
            • -
            - In the interim, this allows us to at least treat these "hidden" parameters properly which is - the most pressing need. - Author: Steve Ebersole - Ported by: Steve Strong -
            -
            - - - Adds a parameter specification for a parameter encountered within this node. We use the term 'embedded' here - because of the fact that the parameter was simply encountered as part of the node's text; it does not exist - as part of a subtree as it might in a true AST. - - The generated specification. - - - - Retrieve all embedded parameter specifications. - - All embedded parameter specifications; may return null. - - - - Set the renderable text of this node. - - - - - Determine whether this node contans embedded parameters. The implication is that - {@link #getEmbeddedParameters()} is allowed to return null if this method returns false. - - - - - Returns the identifier select SQL fragment. - - The total number of returned types. - The sequence of the current returned type. - the identifier select SQL fragment. - - - - Returns the property select SQL fragment. - - The total number of returned types. - The sequence of the current returned type. - the property select SQL fragment. - - - - Render the identifier select, but in a 'scalar' context (i.e. generate the column alias). - - the sequence of the returned type - the identifier select with the column alias. - - - - Returns true if this FromElement was implied by a path, or false if this FROM element is explicitly declared in - the FROM clause. - - - - - Creates entity from elements. - - - - - - - - Creates collection from elements. - - - - - - - - - - - Delegate that handles the type and join sequence information for a FromElement. - Author: josh - Ported by: Steve Strong - - - - - Returns the identifier select SQL fragment. - - The total number of returned types. - The sequence of the current returned type. - the identifier select SQL fragment. - - - - Render the identifier select, but in a 'scalar' context (i.e. generate the column alias). - - the sequence of the returned type - the identifier select with the column alias. - - - - Returns the property select SQL fragment. - - The total number of returned types. - The sequence of the current returned type. - - the property select SQL fragment. - - - - Returns the type of a property, given it's name (the last part) and the full path. - - The last part of the full path to the property. - The full property path. - The type - - - - This accounts for a quirk in Queryable, where it sometimes generates ', ' in front of the - SQL fragment. :-P - - A SQL fragment. - The fragment, without the leading comma and spaces. - - - - Returns the Hibernate queryable implementation for the HQL class. - - - - - Insert a new node into both the Tree and the Node Array. Add DOWN and UP nodes if needed. - - The parent node - The child node - - - - Count the number of child nodes (including DOWNs and UPs) of a parent node - - The index of the parent in the node array - The number of child nodes - - - - Represents the [] operator and provides it's semantics. - Author: josh - Ported by: Steve Strong - - - - - Author: Steve Ebersole - Ported by: Steve Strong - - - - - Defines a top-level AST node representing an HQL "insert select" statement. - - - - Performs detailed semantic validation on this insert statement tree. - Indicates validation failure. - - - Retreive this insert statement's into-clause. - The into-clause - - - Retreive this insert statement's select-clause. - The select-clause. - - - - Represents an entity referenced in the INTO clause of an HQL - INSERT statement. - - Author: Steve Ebersole - Ported by: Steve Strong - - - - - Returns additional display text for the AST node. - - The additional display text. - - - - Determine whether the two types are "assignment compatible". - - The type defined in the into-clause. - The type defined in the select clause. - True if they are assignment compatible. - - - - Interface for nodes which require access to the SessionFactory - - Author: Steve Ebersole - Ported by: Steve Strong - - - - - IsNotNullLogicOperatorNode implementation - - Author: Steve Ebersole - Ported by: Steve Strong - - - - - Represents a 'is null' check. - - - - - A node representing a static Java constant. - - Author: Steve Ebersole - Ported by: Steve Strong - - - - - Implementation of OrderByClause. - Author: Steve Ebersole - Ported by: Steve Strong - - - - - Implementation of ParameterNode. - Author: Steve Ebersole - Ported by: Steve Strong - - - - - Locate the select clause that is part of this select statement. - Note, that this might return null as derived select clauses (i.e., no - select clause at the HQL-level) get generated much later than when we - get created; thus it depends upon lifecycle. - - Our select clause, or null. - - - - Represents the list of expressions in a SELECT clause. - Author: josh - Ported by: Steve Strong - - - - Prepares a derived (i.e., not explicitly defined in the query) select clause. - - @param fromClause The from clause to which this select clause is linked. - - - Prepares an explicitly defined select clause. - - @param fromClause The from clause linked to this select clause. - @throws SemanticException - - - - FromElements which need to be accounted for in the load phase (either for return or for fetch). - - - - - The column alias names being used in the generated SQL. - - - - - The constructor to use for dynamic instantiation queries. - - - - - The HQL aliases, or generated aliases - - - - - The types actually being returned from this query at the "object level". - - - - - A select expression that was generated by a FROM element. - Author: josh - Ported by: Steve Strong - - - - - Represents an SQL fragment in the AST. - Author: josh - Ported by: Steve Strong - - - - - Defines a top-level AST node representing an HQL update statement. - - - - - Generates class/table/column aliases during semantic analysis and SQL rendering. - Its essential purpose is to keep an internal counter to ensure that the - generated aliases are unique. - - - - - Appends child nodes to a parent efficiently. - - - - - Depth first iteration of an ANTLR AST. - Author: josh - Ported by: Steve Strong - - - - - Returns the 'list' representation with some brackets around it for debugging. - - The tree. - The list representation of the tree. - - - - Determine if a given node (test) is contained anywhere in the subtree - of another given node (fixture). - - The node against which to be checked for children. - The node to be tested as being a subtree child of the parent. - True if child is contained in the parent's collection of children. - - - - Finds the first node of the specified type in the chain of children. - - The parent - The type to find. - The first node of the specified type, or null if not found. - - - - Filters nodes in/out of a tree. - - The node to check. - true to keep the node, false if the node should be filtered out. - - - - Generates the scalar column AST nodes for a given array of SQL columns - - - - - Performs the post-processing of the join information gathered during semantic analysis. - The join generating classes are complex, this encapsulates some of the JoinSequence-related - code. - Author: Joshua Davis - Ported by: Steve Strong - - - - - Constructs a new JoinProcessor. - - The walker to which we are bound, giving us access to needed resources. - - - - Translates an AST join type (i.e., the token type) into a JoinFragment.XXX join type. - - The AST join type (from HqlSqlWalker) - a JoinType.XXX join type. - - - - Indicates that Float and Double literal values should - be treated using the SQL "exact" format (i.e., '.001') - - - - - Indicates that Float and Double literal values should - be treated using the SQL "approximate" format (i.e., '1E-3') - - - - - In what format should Float and Double literal values be sent - to the database? - See #EXACT, #APPROXIMATE - - - - - Traverse the AST tree depth first. Note that the AST passed in is not visited itself. Visitation starts - with its children. - - ast - - - - Turns a path into an AST. - - The path. - The AST factory to use. - An HQL AST representing the path. - - - - Creates synthetic and nodes based on the where fragment part of a JoinSequence. - Author: josh - Ported by: Steve Strong - - - - - Generates translators which uses the Antlr-based parser to perform - the translation. - - Author: Gavin King - Ported by: Steve Strong - - - - - Facade for generation of - and instances. - - - - - Construct a instance - capable of translating an HQL query string. - - - The query-identifier (used in collection). - This is typically the same as the queryString parameter except for the case of - split polymorphic queries which result in multiple physical sql queries. - - The query string to be translated - Currently enabled filters - The session factory - An appropriate translator. - - - - Construct a instance capable of - translating an HQL filter string. - - - The query-identifier (used in collection). - This is typically the same as the queryString parameter except for the case of - split polymorphic queries which result in multiple physical sql queries. - - The query string to be translated - Currently enabled filters - The session factory - An appropriate translator. - - - - Look ahead for tokenizing is all lowercase, whereas the original case of an input stream is preserved. - Copied from http://www.antlr.org/wiki/pages/viewpage.action?pageId=1782 - - - - - Provides a map of collection function names to the corresponding property names. - Authoer: josh - Ported by: Steve Strong - - - - - A problem occurred translating a Hibernate query to SQL due to invalid query syntax, etc. - - - - - Initializes a new instance of the class. - - The message that describes the error. - - - - Initializes a new instance of the class. - - The message that describes the error. - - The exception that is the cause of the current exception. If the innerException parameter - is not a null reference, the current exception is raised in a catch block that handles - the inner exception. - - - - - Initializes a new instance of the class. - - The message that describes the error. - The query that contains the error. - - - - Initializes a new instance of the class. - - - The exception that is the cause of the current exception. If the innerException parameter - is not a null reference, the current exception is raised in a catch block that handles - the inner exception. - - - - - Initializes a new instance of the class - with serialized data. - - - The that holds the serialized object - data about the exception being thrown. - - - The that contains contextual information about the source or destination. - - - - - Sets the serialization info for after - getting the info from the base Exception. - - - The that holds the serialized object - data about the exception being thrown. - - - The that contains contextual information about the source or destination. - - - - - Gets or sets the of HQL that caused the Exception. - - - - - Gets a message that describes the current . - - The error message that explains the reason for this exception including the HQL. - - - - An error handler that counts parsing errors and warnings. - - - - - Defines the behavior of an error handler for the HQL parsers. - Author: josh - Ported by: Steve Strong - - - - - A custom token class for the HQL grammar. - - - - - The previous token type. - - - - - Public constructor - - - - - Returns a string representation of the object. - - The debug string - - - - Indicates if the token could be an identifier. - - - - - Gets or Sets the type of the token, remembering the previous type on Sets. - - - - - Returns the previous token type. - - - - - Exception thrown when an invalid path is found in a query. - Author: josh - Ported by: Steve Strong - - - - - Specialized interface for filters. - - - - - Defines the constract of an HQL->SQL translator. - - - - - Compile a "normal" query. This method may be called multiple times. Subsequent invocations are no-ops. - - Defined query substitutions. - Does this represent a shallow (scalar or entity-id) select? - There was a problem parsing the query string. - There was a problem querying defined mappings. - - - - Perform a list operation given the underlying query definition. - - The session owning this query. - The query bind parameters. - The query list results. - - - - - Perform a bulk update/delete operation given the underlying query defintion. - - The query bind parameters. - The session owning this query. - The number of entities updated or deleted. - - - - - Returns the column names in the generated SQL. - - the column names in the generated SQL. - - - - Information about any parameters encountered during translation. - - - - - The set of query spaces (table names) that the query referrs to. - - - - - The SQL string generated by the translator. - - - - - The HQL string processed by the translator. - - - - - Returns the filters enabled for this query translator. - - Filters enabled for this query execution. - - - - Returns an array of Types represented in the query result. - - Query return types. - - - - Returns an array of HQL aliases - - Returns an array of HQL aliases - - - - Does the translated query contain collection fetches? - - True if the query does contain collection fetched; false otherwise. - - - - Compile a filter. This method may be called multiple - times. Subsequent invocations are no-ops. - - the role name of the collection used as the basis for the filter. - Defined query substitutions. - Does this represent a shallow (scalar or entity-id) select? - - - - Creates a new AST-based query translator. - - The query-identifier (used in stats collection) - The hql query to translate - Currently enabled filters - The session factory constructing this translator instance. - - - - Compile a "normal" query. This method may be called multiple - times. Subsequent invocations are no-ops. - - Defined query substitutions. - Does this represent a shallow (scalar or entity-id) select? - - - - Compile a filter. This method may be called multiple - times. Subsequent invocations are no-ops. - - the role name of the collection used as the basis for the filter. - Defined query substitutions. - Does this represent a shallow (scalar or entity-id) select? - - - - Performs both filter and non-filter compiling. - - Defined query substitutions. - Does this represent a shallow (scalar or entity-id) select? - the role name of the collection used as the basis for the filter, NULL if this is not a filter. - - - - Construct a new SessionFactoryHelperExtensions instance. - - The SessionFactory impl to be encapsulated. - - - - Locate a registered sql function by name. - - The name of the function to locate - The sql function, or null if not found. - - - - Locate a registered sql function by name. - - The name of the function to locate - The sql function, or throws QueryException if no matching sql functions could be found. - - - - Find the function return type given the function name and the first argument expression node. - - The function name. - The first argument expression. - the function return type given the function name and the first argument expression node. - - - - Given a (potentially unqualified) class name, locate its imported qualified name. - - The potentially unqualified class name - The qualified class name. - - - - Does the given persister define a physical discriminator column - for the purpose of inheritence discrimination? - - The persister to be checked. - True if the persister does define an actual discriminator column. - - - - Locate the collection persister by the collection role. - - The collection role name. - The defined CollectionPersister for this collection role, or null. - - - - Determine the name of the property for the entity encapsulated by the - given type which represents the id or unique-key. - - The type representing the entity. - The corresponding property name - - - - Retrieves the column names corresponding to the collection elements for the given - collection role. - - The collection role - The sql column-qualification alias (i.e., the table alias) - the collection element columns - - - - Essentially the same as GetElementType, but requiring that the - element type be an association type. - - The collection type to be checked. - The AssociationType of the elements of the collection. - - - - Locate the collection persister by the collection role, requiring that - such a persister exist. - - The collection role name. - The defined CollectionPersister for this collection role. - - - - Locate the persister by class or entity name, requiring that such a persister - exist. - - The class or entity name - The defined persister for this entity - - - - Given a (potentially unqualified) class name, locate its persister. - - The (potentially unqualified) class name. - The defined persister for this class, or null if none found. - - - - Given a (potentially unqualified) class name, locate its persister. - - The session factory implementor. - The (potentially unqualified) class name. - The defined persister for this class, or null if none found. - - - - Locate the persister by class or entity name. - - The class or entity name - The defined persister for this entity, or null if none found. - - - - Create a join sequence rooted at the given collection. - - The persister for the collection at which the join should be rooted. - The alias to use for qualifying column references. - The generated join sequence. - - - - Generate an empty join sequence instance. - - The generated join sequence. - - - - Generate a join sequence representing the given association type. - - Should implicit joins (theta-style) or explicit joins (ANSI-style) be rendered - The type representing the thing to be joined into. - The table alias to use in qualifing the join conditions - The type of join to render (inner, outer, etc) - The columns making up the condition of the join. - The generated join sequence. - - - - Retreive a PropertyMapping describing the given collection role. - - The collection role for whcih to retrieve the property mapping. - The property mapping. - - - - Given a collection type, determine the Type representing elements - within instances of that collection. - - The collection type to be checked. - The Type of the elements of the collection. - - - - Generates translators which uses the older hand-written parser to perform the translation. - - - - - Parses the hibernate query into its constituent clauses. - - - - - A parser is a state machine that accepts a string of tokens, - bounded by start() and end() and modifies a QueryTranslator. Parsers - are NOT intended to be threadsafe. They SHOULD be reuseable - for more than one token stream. - - - - - - - - - - - - - - - - - - - - - - - - Parses the from clause of a hibernate query, looking for tables and - aliases for the SQL query. - - - - - - - - FromPathExpressionParser - - - - - Parses an expression of the form foo.bar.baz and builds up an expression - involving two less table joins than there are path components. - - - - - - - - - - NOTE: we avoid joining to the next table if the named property is just the foreign key value - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Used to hold column type in nested functions. - - - - - Parses the GROUP BY clause of an aggregate query - - - - - Parses the having clause of a hibernate query and translates it to an - SQL having clause. - - - - Parses the where clause of a hibernate query and translates it to an - SQL where clause. - - - - - - - - - - - - - - - - - - - - - - - - Parses the ORDER BY clause of a query - - - - - - - HQL lexical analyzer (not really a parser) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - An instance of QueryTranslator translates a Hibernate query string to SQL. - - - - Construct a query translator - - A unique identifier for the query of which this - translation is part; typically this is the original, user-supplied query string. - - - The "preprocessed" query string; at the very least - already processed by {@link org.hibernate.hql.QuerySplitter}. - - Any enabled filters. - The session factory. - - - - Construct a query translator - - - - - Compile a subquery - - - - - - Compile a "normal" query. This method may be called multiple - times. Subsequent invocations are no-ops. - - - - - Compile a filter. This method may be called multiple - times. Subsequent invocations are no-ops. - - - - - Compile the query (generate the SQL). - - - - - WARNING: side-effecty - - - - - Extract the complete clause of function. - - The list of tokens - The index of the list that represent the founded function. - String trepresentation of each token. - Each token can be string or SqlString - - - Used for collection filters - - - - - - - Persisters for the return values of a List style query - - - The Persisters stored by QueryTranslator have to be . The - setter will attempt to cast the ILoadable array passed in into an - IQueryable array. - - - - - Types of the return values of an Enumerate() style query. - Return an array of s. - - - - - - - - Is this query called by Scroll() or Iterate()? - - true if it is, false if it is called by find() or list() - - - - - - - - - - Parsers the select clause of a hibernate query, looking - for a table (well, really class) alias. - - - - - - - - - - - - - - - - - - - - - - - Wraps SessionFactoryImpl, adding more lookup behaviors and encapsulating some of the error handling. - - - - - Provides utility methods for generating HQL / SQL names. - Shared by both the 'classic' and 'new' query translators. - - - - - Handle Hibernate "implicit" polymorphism, by translating the query string into - several "concrete" queries against mapped classes. - - - - - - - - - Contract for providing callback access to a , - typically from the . - - - - Retrieve the next value from the underlying source. - - - - Encapsulates definition of the underlying data structure backing a sequence-style generator. - - - - - A callback to be able to get the next value from the underlying - structure as needed. - - The session. - The next value. - - - - Prepare this structure for use. Called sometime after instantiation, - but before first use. - - The optimizer being applied to the generator. - - - Commands needed to create the underlying structures. - The database dialect being used. - The creation commands. - - - Commands needed to drop the underlying structures. - The database dialect being used. - The drop commands. - - - The name of the database structure (table or sequence). - - - How many times has this structure been accessed through this reference? - - - The configured increment size - - - - Performs optimization on an optimizable identifier generator. Typically - this optimization takes the form of trying to ensure we do not have to - hit the database on each and every request to get an identifier value. - - - - Optimizers work on constructor injection. They should provide - a constructor with the following arguments. - - - The return type for the generated values. - - int The increment size. - - - - - Generate an identifier value accounting for this specific optimization. - - Callback to access the underlying value source. - The generated identifier value. - - - - A common means to access the last value obtained from the underlying - source. This is intended for testing purposes, since accessing the - unerlying database source directly is much more difficult. - - - The last value we obtained from the underlying source; - -1 indicates we have not yet consulted with the source. - - - - - Defined increment size. - - The increment size. - - - - - Are increments to be applied to the values stored in the underlying - value source? - - - True if the values in the source are to be incremented - according to the defined increment size; false otherwise, in which - case the increment is totally an in memory construct. - - - - - Describes a sequence. - - - - - An that requires creation of database objects - All s that also implement - An have access to a special mapping parameter: schema - - - - - The general contract between a class that generates unique - identifiers and the . - - - - It is not intended that this interface ever be exposed to the - application. It is intended that users implement this interface - to provide custom identifier generation strategies. - - - Implementors should provide a public default constructor. - - - Implementations that accept configuration parameters should also - implement . - - - Implementors must be threadsafe. - - - - - - Generate a new identifier - - The this id is being generated in. - The entity for which the id is being generated. - The new identifier - - - - The SQL required to create the underlying database objects - - The to help with creating the sql. - - An array of objects that contain the sql to create the - necessary database objects. - - - - - The SQL required to remove the underlying database objects - - The to help with creating the sql. - - A that will drop the database objects. - - - - - Return a key unique to the underlying database objects. - - - A key unique to the underlying database objects. - - - Prevents us from trying to create/remove them multiple times - - - - - An IdentiferGenerator that supports "configuration". - - - - - Configure this instance, given the values of parameters - specified by the user as <param> elements. - This method is called just once, followed by instantiation. - - The the identifier should be. - An of Param values that are keyed by parameter name. - The to help with Configuration. - - - - Describes a table used to mimic sequence behavior - - - - - Abstract InsertGeneratedIdentifierDelegate implementation where the - underlying strategy causes the generated identitifer to be returned as an - effect of performing the insert statement. Thus, there is no need for an - additional sql statement to determine the generated identitifer. - - - - - Responsible for handling delegation relating to variants in how - insert-generated-identifier generator strategies dictate processing: -
              -
            • building the sql insert statement
            • -
            • determination of the generated identifier value
            • -
            -
            -
            - - - Build a specific to the delegate's mode - of handling generated key values. - - The insert object. - - - - Perform the indicated insert SQL statement and determine the identifier value generated. - - - - - The generated identifier value. - - - - Abstract InsertGeneratedIdentifierDelegate implementation where the - underlying strategy requires an subsequent select after the insert - to determine the generated identifier. - - - - Extract the generated key value from the given result set. - The session - The result set containing the generated primay key values. - The entity being saved. - The generated identifier - - - Bind any required parameter values into the SQL command . - The session - The prepared command - The entity being saved. - - - Get the SQL statement to be used to retrieve generated key values. - The SQL command string - - - - Types of any required parameter values into the SQL command . - - - - - Nothing more than a distinguishing subclass of Insert used to indicate - intent. - Some subclasses of this also provided some additional - functionality or semantic to the genernated SQL statement string. - - - - - A class that builds an INSERT sql statement. - - - - - - - - Builds a SqlString from the internal data. - - A valid SqlString that can be converted into an IDbCommand - - - - Adds the Property's columns to the INSERT sql - - The column name for the Property - The IType of the property. - The SqlInsertBuilder. - The column will be associated with a parameter. - - - - Add a column with a specific value to the INSERT sql - - The name of the Column to add. - The value to set for the column. - The NHibernateType to use to convert the value to a sql string. - The SqlInsertBuilder. - - - - Add a column with a specific value to the INSERT sql - - The name of the Column to add. - A valid sql string to set as the value of the column. - The SqlInsertBuilder. - - - - Specialized IdentifierGeneratingInsert which appends the database - specific clause which signifies to return generated IDENTITY values - to the end of the insert statement. - - - - - Disable comments on insert. - - - - - implementation where the - underlying strategy causes the generated identitifer to be returned, as an - effect of performing the insert statement, in a Output parameter. - Thus, there is no need for an additional sql statement to determine the generated identitifer. - - - - - Specialized IdentifierGeneratingInsert which appends the database - specific clause which signifies to return generated identifier values - to the end of the insert statement. - - - - - - - The IdentityGenerator for autoincrement/identity key generation. - - The this id is being generated in. - The entity the id is being generated for. - - IdentityColumnIndicator Indicates to the Session that identity (i.e. identity/autoincrement column) - key generation should be used. - - - - - An that returns the current identifier - assigned to an instance. - - -

            - This id generation strategy is specified in the mapping file as - <generator class="assigned" /> -

            -
            -
            - - - Generates a new identifier by getting the value of the identifier - for the obj parameter. - - The this id is being generated in. - The entity for which the id is being generated. - The value that was assigned to the mapped id's property. - - Thrown when a is passed in as the obj or - if the identifier of obj is null. - - - - - An that returns a Int64 constructed from the system - time and a counter value. Not safe for use in a clustser! - - - - - An that uses the value of - the id property of an associated object - - - - This id generation strategy is specified in the mapping file as - - <generator class="foreign"> - <param name="property">AssociatedObject</param> - </generator> - - - The mapping parameter property is required. - - - - - Generates an identifer from the value of a Property. - - The this id is being generated in. - The entity for which the id is being generated. - - The identifier value from the associated object or - if the session - already contains obj. - - - - - Configures the ForeignGenerator by reading the value of property - from the parms parameter. - - The the identifier should be. - An of Param values that are keyed by parameter name. - The to help with Configuration. - - Thrown if the key property is not found in the parms parameter. - - - - - An that generates values - using a strategy suggested Jimmy Nilsson's - article - on informit.com. - - -

            - This id generation strategy is specified in the mapping file as - <generator class="guid.comb" /> -

            -

            - The comb algorithm is designed to make the use of GUIDs as Primary Keys, Foreign Keys, - and Indexes nearly as efficient as ints. -

            -

            - This code was contributed by Donald Mull. -

            -
            -
            - - - Generate a new using the comb algorithm. - - The this id is being generated in. - The entity for which the id is being generated. - The new identifier as a . - - - - Generate a new using the comb algorithm. - - - - - An that generates values - using Guid.NewGuid(). - - -

            - This id generation strategy is specified in the mapping file as - <generator class="guid" /> -

            -
            -
            - - - Generate a new for the identifier. - - The this id is being generated in. - The entity for which the id is being generated. - The new identifier as a . - - - - Thrown by implementation class when ID generation fails - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The message that describes the error. - - - - Initializes a new instance of the class. - - The message that describes the error. - - The exception that is the cause of the current exception. If the innerException parameter - is not a null reference, the current exception is raised in a catch block that handles - the inner exception. - - - - - Initializes a new instance of the class - with serialized data. - - - The that holds the serialized object - data about the exception being thrown. - - - The that contains contextual information about the source or destination. - - - - - Factory methods for IdentifierGenerator framework. - - -

            The built in strategies for identifier generation in NHibernate are:

            - - - strategy - Implementation of strategy - - - assigned - - - - counter - - - - foreign - - - - guid - - - - guid.comb - - - - guid.native - - - - hilo - - - - identity - - - - native - - Chooses between , - , and based on the - 's capabilities. - - - - seqhilo - - - - sequence - - - - uuid.hex - - - - uuid.string - - - -
            -
            - - Get the generated identifier when using identity columns - The to read the identifier value from. - The the value should be converted to. - The the value is retrieved in. - The value for the identifier. - - - - Gets the value of the identifier from the and - ensures it is the correct . - - The to read the identifier value from. - The the value should be converted to. - The the value is retrieved in. - - The value for the identifier. - - - Thrown if there is any problem getting the value from the - or with converting it to the . - - - - - An where the key is the strategy and - the value is the for the strategy. - - - - - When this is returned by Generate() it indicates that the object - has already been saved. - - - String.Empty - - - - - When this is return - - - - - Initializes the static fields in . - - - - - Creates an from the named strategy. - - - The name of the generator to create. This can be one of the NHibernate abbreviations (ie - native, - sequence, guid.comb, etc...), a full class name if the Type is in the NHibernate assembly, or - a full type name if the strategy is in an external assembly. - - The that the retured identifier should be. - An of <param> values from the mapping. - The to help with Configuration. - - An instantiated and configured . - - - Thrown if there are any exceptions while creating the . - - - - - Create the correct boxed for the identifier. - - The value of the new identifier. - The the identifier should be. - - The identifier value converted to the . - - - The type parameter must be an , , - or . - - - - - An that indicates to the that identity - (ie. identity/autoincrement column) key generation should be used. - - -

            - This id generation strategy is specified in the mapping file as - <generator class="identity" /> - or if the database natively supports identity columns - <generator class="native" /> -

            -

            - This indicates to NHibernate that the database generates the id when - the entity is inserted. -

            -
            -
            - - - Delegate for dealing with IDENTITY columns where the dialect supports returning - the generated IDENTITY value directly from the insert statement. - - - - - Delegate for dealing with IDENTITY columns where the dialect requires an - additional command execution to retrieve the generated IDENTITY value - - - - The configuration parameter holding the entity name - - - - An IIdentifierGenerator that returns a Int64, constructed by - counting from the maximum primary key value at startup. Not safe for use in a - cluster! - - - - java author Gavin King, .NET port Mark Holden - - - Mapping parameters supported, but not usually needed: table, column. - - - - - - - - - - - - - - - - - - - - - The configuration parameter holding the schema name - - - - The configuration parameter holding the table name for the - generated id - - - - - The configuration parameter holding the table names for all - tables for which the id must be unique - - - - - The configuration parameter holding the primary key column - name of the generated id - - - - The configuration parameter holding the catalog name - - - - A persister that may have an identity assigned by execution of a SQL INSERT. - - - - - Get a SQL select string that performs a select based on a unique - key determined by the given property name). - - - The name of the property which maps to the - column(s) to use in the select statement restriction. - - The SQL select string - - - - Get the database-specific SQL command to retrieve the last - generated IDENTITY value. - - - - The names of the primary key columns in the root table. - The primary key column names. - - - - Get the identifier type - - - - - Generates Guid values using the server side Guid function. - - - - - A generator that selects the just inserted row to determine the identifier - value assigned by the database. The correct row is located using a unique key. - - One mapping parameter is required: key (unless a natural-id is defined in the mapping). - - - The delegate for the select generation strategy. - - - - An that generates Int64 values using an - oracle-style sequence. A higher performance algorithm is - . - - -

            - This id generation strategy is specified in the mapping file as - - <generator class="sequence"> - <param name="sequence">uid_sequence</param> - <param name="schema">db_schema</param> - </generator> - -

            -

            - The sequence parameter is required while the schema is optional. -

            -
            -
            - - - The name of the sequence parameter. - - - - - The parameters parameter, appended to the create sequence DDL. - For example (Oracle): INCREMENT BY 1 START WITH 1 MAXVALUE 100 NOCACHE. - - - - - Configures the SequenceGenerator by reading the value of sequence and - schema from the parms parameter. - - The the identifier should be. - An of Param values that are keyed by parameter name. - The to help with Configuration. - - - - Generate an , , or - for the identifier by using a database sequence. - - The this id is being generated in. - The entity for which the id is being generated. - The new identifier as a , , or . - - - - The SQL required to create the database objects for a SequenceGenerator. - - The to help with creating the sql. - - An array of objects that contain the Dialect specific sql to - create the necessary database objects for the SequenceGenerator. - - - - - The SQL required to remove the underlying database objects for a SequenceGenerator. - - The to help with creating the sql. - - A that will drop the database objects for the SequenceGenerator. - - - - - Return a key unique to the underlying database objects for a SequenceGenerator. - - - The configured sequence name. - - - - - An that combines a hi/lo algorithm with an underlying - oracle-style sequence that generates hi values. - - -

            - This id generation strategy is specified in the mapping file as - - <generator class="seqhilo"> - <param name="sequence">uid_sequence</param> - <param name="max_lo">max_lo_value</param> - <param name="schema">db_schema</param> - </generator> - -

            -

            - The sequence parameter is required, the max_lo and schema are optional. -

            -

            - The user may specify a max_lo value to determine how often new hi values are - fetched. If sequences are not avaliable, TableHiLoGenerator might be an - alternative. -

            -
            -
            - - - The name of the maximum low value parameter. - - - - - Configures the SequenceHiLoGenerator by reading the value of sequence, max_lo, - and schema from the parms parameter. - - The the identifier should be. - An of Param values that are keyed by parameter name. - The to help with Configuration. - - - - Generate an , , or - for the identifier by using a database sequence. - - The this id is being generated in. - The entity for which the id is being generated. - The new identifier as a , , or . - - - - A generator which combines sequence generation with immediate retrieval - by attaching a output parameter to the SQL command - In this respect it works much like ANSI-SQL IDENTITY generation. - - - - - An that uses a database table to store the last - generated value. - - -

            - It is not intended that applications use this strategy directly. However, - it may be used to build other (efficient) strategies. The return type is - System.Int32 -

            -

            - The hi value MUST be fetched in a seperate transaction to the ISession - transaction so the generator must be able to obtain a new connection and commit it. - Hence this implementation may not be used when the user is supplying connections. -

            -

            - The mapping parameters table and column are required. -

            -
            -
            - - - An additional where clause that is added to - the queries against the table. - - - - - The name of the column parameter. - - - - - The name of the table parameter. - - - - Default column name - - - Default table name - - - - Configures the TableGenerator by reading the value of table, - column, and schema from the parms parameter. - - The the identifier should be. - An of Param values that are keyed by parameter name. - The to help with Configuration. - - - - Generate a , , or - for the identifier by selecting and updating a value in a table. - - The this id is being generated in. - The entity for which the id is being generated. - The new identifier as a , , or . - - - - The SQL required to create the database objects for a TableGenerator. - - The to help with creating the sql. - - An array of objects that contain the Dialect specific sql to - create the necessary database objects and to create the first value as 1 - for the TableGenerator. - - - - - The SQL required to remove the underlying database objects for a TableGenerator. - - The to help with creating the sql. - - A that will drop the database objects for the TableGenerator. - - - - - Return a key unique to the underlying database objects for a TableGenerator. - - - The configured table name. - - - - - An that returns an Int64, constructed using - a hi/lo algorithm. - - -

            - This id generation strategy is specified in the mapping file as - - <generator class="hilo"> - <param name="table">table</param> - <param name="column">id_column</param> - <param name="max_lo">max_lo_value</param> - <param name="schema">db_schema</param> - </generator> - -

            -

            - The table and column parameters are required, the max_lo and - schema are optional. -

            -

            - The hi value MUST be fecthed in a seperate transaction to the ISession - transaction so the generator must be able to obtain a new connection and - commit it. Hence this implementation may not be used when the user is supplying - connections. In that case a would be a - better choice (where supported). -

            -
            -
            - - - The name of the max lo parameter. - - - - - Configures the TableHiLoGenerator by reading the value of table, - column, max_lo, and schema from the parms parameter. - - The the identifier should be. - An of Param values that are keyed by parameter name. - The to help with Configuration. - - - - Generate a for the identifier by selecting and updating a value in a table. - - The this id is being generated in. - The entity for which the id is being generated. - The new identifier as a . - - - - An that returns a string of length - 32, 36, or 38 depending on the configuration. - - -

            - This id generation strategy is specified in the mapping file as - - <generator class="uuid.hex"> - <param name="format">format_string</param> - <param name="seperator">seperator_string</param> - </generator> - -

            -

            - The format and seperator parameters are optional. -

            -

            - The identifier string will consist of only hex digits. Optionally, the identifier string - may be generated with enclosing characters and seperators between each component - of the UUID. If there are seperators then the string length will be 36. If a format - that has enclosing brackets is used, then the string length will be 38. -

            -

            - format is either - "N" (xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx), - "D" (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx), - "B" ({xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}), - or "P" ((xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)). These formats are described in - the Guid.ToString(String) method. - If no format is specified the default is "N". -

            -

            - seperator is the char that will replace the "-" if specified. If no value is - configured then the default seperator for the format will be used. If the format "D", "B", or - "P" is specified, then the seperator will replace the "-". If the format is "N" then this - parameter will be ignored. -

            -

            - This class is based on -

            -
            -
            - - - Generate a new for the identifier using the "uuid.hex" algorithm. - - The this id is being generated in. - The entity for which the id is being generated. - The new identifier as a . - - - - Configures the UUIDHexGenerator by reading the value of format and - seperator from the parms parameter. - - The the identifier should be. - An of Param values that are keyed by parameter name. - The to help with Configuration. - - - - Generate a Guid into a string using the format. - - A new Guid string - - - - An that returns a string of length - 16. - - -

            - This id generation strategy is specified in the mapping file as - <generator class="uuid.string" /> -

            - - The identifier string will NOT consist of only alphanumeric characters. Use - this only if you don't mind unreadable identifiers. - - - This impelementation was known to be incompatible with Postgres. - -
            -
            - - - Generate a new for the identifier using the "uuid.string" algorithm. - - The this id is being generated in. - The entity for which the id is being generated. - The new identifier as a . - - - - Base class to create queries in "detached mode" where the NHibernate session is not available. - - - - - The behaviour of each method is basically the same of methods. - The main difference is on : - If you mix with named parameters setter, if same param name are found, - the value of the parameter setter override the value read from the POCO. - - - - - Interface to create queries in "detached mode" where the NHibernate session is not available. - All methods have the same semantics as the corresponding methods of the interface. - - - - - Get an executable instance of , - to actually run the query. - - - - Set the maximum number of rows to retrieve. - - The maximum number of rows to retreive. - - - - Sets the first row to retrieve. - - The first row to retreive. - - - - Enable caching of this query result set. - - Should the query results be cacheable? - - - Set the name of the cache region. - The name of a query cache region, or - for the default query cache - - - - Entities retrieved by this query will be loaded in - a read-only mode where Hibernate will never dirty-check - them or make changes persistent. - - Enable/Disable read -only mode - - - - The timeout for the underlying ADO query - - - - - Set a fetch size for the underlying ADO query. - the fetch size - - - - Set the lockmode for the objects idententified by the - given alias that appears in the FROM clause. - - alias a query alias, or this for a collection filter - - - - Add a comment to the generated SQL. - a human-readable string - - - - Bind a value to an indexed parameter. - - Position of the parameter in the query, numbered from 0 - The possibly null parameter value - The Hibernate type - - - - Bind a value to a named query parameter - - The name of the parameter - The possibly null parameter value - The NHibernate . - - - - Bind a value to an indexed parameter, guessing the Hibernate type from - the class of the given object. - - The position of the parameter in the query, numbered from 0 - The non-null parameter value - - - - Bind a value to a named query parameter, guessing the NHibernate - from the class of the given object. - - The name of the parameter - The non-null parameter value - - - - Bind multiple values to a named query parameter. This is useful for binding a list - of values to an expression such as foo.bar in (:value_list) - - The name of the parameter - A collection of values to list - The Hibernate type of the values - - - - Bind multiple values to a named query parameter, guessing the Hibernate - type from the class of the first object in the collection. This is useful for binding a list - of values to an expression such as foo.bar in (:value_list) - - The name of the parameter - A collection of values to list - - - - Bind the property values of the given object to named parameters of the query, - matching property names with parameter names and mapping property types to - Hibernate types using heuristics. - - Any POCO - - - - Bind an instance of a to an indexed parameter - using an NHibernate . - - The position of the parameter in the query string, numbered from 0 - A non-null instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a . - - - - Bind an instance of a array to an indexed parameter - using an NHibernate . - - The position of the parameter in the query string, numbered from 0 - A non-null instance of a array. - - - - Bind an instance of a array to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a array. - - - - Bind an instance of a to an indexed parameter - using an NHibernate . - - The position of the parameter in the query string, numbered from 0 - A non-null instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a . - - - - Bind an instance of a to an indexed parameter - using an NHibernate . - - The position of the parameter in the query string, numbered from 0 - A non-null instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a . - - - - Bind an instance of a to an indexed parameter - using an NHibernate . - - The position of the parameter in the query string, numbered from 0 - A non-null instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a . - - - - Bind an instance of a to an indexed parameter - using an NHibernate . - - The position of the parameter in the query string, numbered from 0 - A non-null instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - A non-null instance of a . - The name of the parameter - - - - Bind an instance of a to an indexed parameter - using an NHibernate . - - The position of the parameter in the query string, numbered from 0 - A non-null instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a . - - - - Bind an instance of a to an indexed parameter - using an NHibernate . - - The position of the parameter in the query string, numbered from 0 - A non-null instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a . - - - - Bind an instance of a mapped persistent class to an indexed parameter. - - Position of the parameter in the query string, numbered from 0 - A non-null instance of a persistent class - - - - Bind an instance of a mapped persistent class to a named parameter. - - The name of the parameter - A non-null instance of a persistent class - - - - Bind an instance of a persistent enumeration class to an indexed parameter - using an NHibernate . - - The position of the parameter in the query string, numbered from 0 - A non-null instance of a persistent enumeration - - - - Bind an instance of a persistent enumeration class to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a persistent enumeration - - - - Bind an instance of a to an indexed parameter - using an NHibernate . - - The position of the parameter in the query string, numbered from 0 - A non-null instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a . - - - - Bind an instance of a to an indexed parameter - using an NHibernate . - - The position of the parameter in the query string, numbered from 0 - A non-null instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a . - - - - Bind an instance of a to an indexed parameter - using an NHibernate . - - The position of the parameter in the query string, numbered from 0 - A non-null instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a . - - - - Bind an instance of a to an indexed parameter - using an NHibernate . - - The position of the parameter in the query string, numbered from 0 - A non-null instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a . - - - - Bind an instance of a to an indexed parameter - using an NHibernate . - - The position of the parameter in the query string, numbered from 0 - A non-null instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a . - - - - Bind an instance of a to an indexed parameter - using an NHibernate . - - The position of the parameter in the query string, numbered from 0 - A non-null instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a . - - - - Bind an instance of a to an indexed parameter - using an NHibernate . - - The position of the parameter in the query string, numbered from 0 - A non-null instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The position of the parameter in the query string, numbered from 0 - An instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - An instance of a . - - - - Override the current session flush mode, just for this query. - - - - - Set a strategy for handling the query results. This can be used to change - "shape" of the query result. - - - - - Set the value to ignore unknown parameters names. - - True to ignore unknown parameters names. - - - Override the current session cache mode, just for this query. - The cache mode to use. - this (for method chaining) - - - - Interface for DetachedQuery implementors. - - - When you are working with queries in "detached mode" you may need some additional services like clone, - copy of parameters from another query and so on. - - - - - Copy all properties to a given . - - The given . - - Usually the implementation use to set properties to the . - This mean that existing properties are merged/overriden. - - - - - Set only parameters to a given . - - The given . - - Existing parameters are merged/overriden. - - - - - Override all properties reading new values from a given . - - The given origin. - - - - Override all parameters reading new values from a given . - - The given origin. - - - Override the current session cache mode, just for this query. - The cache mode to use. - this (for method chaining) - - - - Fill all properties. - - The . - - Query properties are overriden/merged. - - - - - Copy all properties to a given . - - The given . - - The method use to set properties of . - - - - - Set only parameters to a given . - - The given . - - The method use to set properties of . - Existing parameters in are merged/overriden. - - - - - Clear all existing parameters and copy new parameters from a given origin. - - The origin of parameters. - The current instance - If is null. - - - - Abstract implementation of the IQuery interface. - - - - - An object-oriented representation of a NHibernate query. - - - An IQuery instance is obtained by calling ISession.CreateQuery(). This interface - exposes some extra functionality beyond that provided by ISession.Iterate() and - ISession.List(); - - - A particulare page of the result set may be selected by calling - SetMaxResults(), SetFirstResult(). The generated sql - depends on the capabilities of the . Some - Dialects are for databases that have built in paging (LIMIT) and those capabilities - will be used to limit the number of records returned by the sql statement. - If the database does not support LIMITs then all of the records will be returned, - but the objects created will be limited to the specific results requested. - - Named query parameters may be used - - - Named query parameters are tokens of the form :name in the query string. A value is bound - to the Int32 parameter :foo by calling - - SetParameter("foo", foo, NHibernateUtil.Int32); - - for example. A name may appear multiple times in the query string. - - - Unnamed parameters ? are also supported. To bind a value to an unnamed - parameter use a Set method that accepts an Int32 positional argument - numbered from - zero. - - - You may not mix and match unnamed parameters and named parameters in the same query. - - - Queries are executed by calling List() or Iterate(). A query - may be re-executed by subsequent invocations. Its lifespan is, however, bounded by the lifespan - of the ISession that created it. - - - Implementors are not intended to be threadsafe. - - - - - - Return the query results as an . If the query contains multiple results - per row, the results are returned in an instance of object[]. - - -

            - Entities returned as results are initialized on demand. The first SQL query returns - identifiers only. -

            -

            - This is a good strategy to use if you expect a high number of the objects - returned to be already loaded in the or in the 2nd level cache. -

            -
            -
            - - - Strongly-typed version of . - - - - - - - Return the query results as an . If the query contains multiple results per row, - the results are returned in an instance of object[]. - - The filled with the results. - - This is a good strategy to use if you expect few of the objects being returned are already loaded - or if you want to fill the 2nd level cache. - - - - - Return the query results an place them into the . - - The to place the results in. - - - - Strongly-typed version of . - - - - - Convenience method to return a single instance that matches - the query, or null if the query returns no results. - - the single result or - - Thrown when there is more than one matching result. - - - - - Strongly-typed version of . - - - - - Execute the update or delete statement. - - The number of entities updated or deleted. - - - - Set the maximum number of rows to retrieve. - - The maximum number of rows to retreive. - - - - Sets the first row to retrieve. - - The first row to retreive. - - - - Entities retrieved by this query will be loaded in - a read-only mode where Hibernate will never dirty-check - them or make changes persistent. - - - - - Enable caching of this query result set. - - Should the query results be cacheable? - - - Set the name of the cache region. - The name of a query cache region, or - for the default query cache - - - - The timeout for the underlying ADO query - - - - - Set a fetch size for the underlying ADO query. - the fetch size - - - - Set the lockmode for the objects idententified by the - given alias that appears in the FROM clause. - - alias a query alias, or this for a collection filter - - - - Add a comment to the generated SQL. - a human-readable string - - - - Override the current session flush mode, just for this query. - - - - Override the current session cache mode, just for this query. - The cache mode to use. - this (for method chaining) - - - - Bind a value to an indexed parameter. - - Position of the parameter in the query, numbered from 0 - The possibly null parameter value - The Hibernate type - - - - Bind a value to a named query parameter - - The name of the parameter - The possibly null parameter value - The NHibernate . - - - - Bind a value to an indexed parameter. - - Position of the parameter in the query, numbered from 0 - The possibly null parameter value - The parameter's - - - - Bind a value to a named query parameter - - The name of the parameter - The possibly null parameter value - The parameter's - - - - Bind a value to an indexed parameter, guessing the Hibernate type from - the class of the given object. - - The position of the parameter in the query, numbered from 0 - The non-null parameter value - - - - Bind a value to a named query parameter, guessing the NHibernate - from the class of the given object. - - The name of the parameter - The non-null parameter value - - - - Bind multiple values to a named query parameter. This is useful for binding a list - of values to an expression such as foo.bar in (:value_list) - - The name of the parameter - A collection of values to list - The Hibernate type of the values - - - - Bind multiple values to a named query parameter, guessing the Hibernate - type from the class of the first object in the collection. This is useful for binding a list - of values to an expression such as foo.bar in (:value_list) - - The name of the parameter - A collection of values to list - - - - Bind multiple values to a named query parameter. This is useful for binding - a list of values to an expression such as foo.bar in (:value_list). - - the name of the parameter - a collection of values to list - the Hibernate type of the values - - - - Bind multiple values to a named query parameter. The Hibernate type of the parameter is - first detected via the usage/position in the query and if not sufficient secondly - guessed from the class of the first object in the array. This is useful for binding a list of values - to an expression such as foo.bar in (:value_list). - - the name of the parameter - a collection of values to list - - - - Bind the property values of the given object to named parameters of the query, - matching property names with parameter names and mapping property types to - Hibernate types using heuristics. - - Any PONO - - - - Bind an instance of a to an indexed parameter - using an NHibernate . - - The position of the parameter in the query string, numbered from 0 - A non-null instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a . - - - - Bind an instance of a array to an indexed parameter - using an NHibernate . - - The position of the parameter in the query string, numbered from 0 - A non-null instance of a array. - - - - Bind an instance of a array to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a array. - - - - Bind an instance of a to an indexed parameter - using an NHibernate . - - The position of the parameter in the query string, numbered from 0 - A non-null instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a . - - - - Bind an instance of a to an indexed parameter - using an NHibernate . - - The position of the parameter in the query string, numbered from 0 - A non-null instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a . - - - - Bind an instance of a to an indexed parameter - using an NHibernate . - - The position of the parameter in the query string, numbered from 0 - A non-null instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a . - - - - Bind an instance of a to an indexed parameter - using an NHibernate . - - The position of the parameter in the query string, numbered from 0 - A non-null instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - A non-null instance of a . - The name of the parameter - - - - Bind an instance of a to an indexed parameter - using an NHibernate . - - The position of the parameter in the query string, numbered from 0 - A non-null instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a . - - - - Bind an instance of a to an indexed parameter - using an NHibernate . - - The position of the parameter in the query string, numbered from 0 - A non-null instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a . - - - - Bind an instance of a persistent enumeration class to an indexed parameter - using an NHibernate . - - The position of the parameter in the query string, numbered from 0 - A non-null instance of a persistent enumeration - - - - Bind an instance of a persistent enumeration class to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a persistent enumeration - - - - Bind an instance of a to an indexed parameter - using an NHibernate . - - The position of the parameter in the query string, numbered from 0 - A non-null instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a . - - - - Bind an instance of a to an indexed parameter - using an NHibernate . - - The position of the parameter in the query string, numbered from 0 - A non-null instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a . - - - - Bind an instance of a to an indexed parameter - using an NHibernate . - - The position of the parameter in the query string, numbered from 0 - A non-null instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a . - - - - Bind an instance of a to an indexed parameter - using an NHibernate . - - The position of the parameter in the query string, numbered from 0 - A non-null instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a . - - - - Bind an instance of a to an indexed parameter - using an NHibernate . - - The position of the parameter in the query string, numbered from 0 - A non-null instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a . - - - - Bind an instance of a to an indexed parameter - using an NHibernate . - - The position of the parameter in the query string, numbered from 0 - A non-null instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a . - - - - Bind an instance of a to an indexed parameter - using an NHibernate . - - The position of the parameter in the query string, numbered from 0 - A non-null instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The position of the parameter in the query string, numbered from 0 - An instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - An instance of a . - - - - Bind an instance of a mapped persistent class to an indexed parameter. - - Position of the parameter in the query string, numbered from 0 - A non-null instance of a persistent class - - - - Bind an instance of a mapped persistent class to a named parameter. - - The name of the parameter - A non-null instance of a persistent class - - - - Set a strategy for handling the query results. This can be used to change - "shape" of the query result. - - - - - Get a enumerable that when enumerated will execute - a batch of queries in a single database roundtrip - - - - - - - Get an IFutureValue instance, whose value can be retrieved through - its Value property. The query is not executed until the Value property - is retrieved, which will execute other Future queries as well in a - single roundtrip - - - - - - - The query string - - - - - The Hibernate types of the query result set. - - - - Return the HQL select clause aliases (if any) - an array of aliases as strings - - - - The names of all named parameters of the query - - The parameter names, in no particular order - - - - Perform parameter validation. Used prior to executing the encapsulated query. - - - if true, the first ? will not be verified since - its needed for e.g. callable statements returning a out parameter - - - - - Guesses the from the param's value. - - The object to guess the of. - An for the object. - - Thrown when the param is null because the - can't be guess from a null value. - - - - - Guesses the from the . - - The to guess the of. - An for the . - - Thrown when the clazz is null because the - can't be guess from a null type. - - - - - Warning: adds new parameters to the argument by side-effect, as well as mutating the query string! - - - - - Warning: adds new parameters to the argument by side-effect, as well as mutating the query string! - - - - Override the current session cache mode, just for this query. - - The cache mode to use. - this (for method chaining) - - - Functionality common to stateless and stateful sessions - - - - Implementation of the interface for collection filters. - - - - - Default implementation of the , - for "ordinary" HQL queries (not collection filters) - - - - - - Implementation of the interface - - - - - Criteria is a simplified API for retrieving entities by composing - objects. - - - - Using criteria is a very convenient approach for functionality like "search" screens - where there is a variable number of conditions to be placed upon the result set. - - - The Session is a factory for ICriteria. Expression instances are usually obtained via - the factory methods on . eg: - - - IList cats = session.CreateCriteria(typeof(Cat)) - .Add( Expression.Like("name", "Iz%") ) - .Add( Expression.Gt( "weight", minWeight ) ) - .AddOrder( Order.Asc("age") ) - .List(); - - You may navigate associations using or . - - IList cats = session.CreateCriteria(typeof(Cat)) - .CreateCriteria("kittens") - .Add( Expression.like("name", "Iz%") ) - .List(); - - - You may specify projection and aggregation using Projection - instances obtained via the factory methods on Projections. - - IList cats = session.CreateCriteria(typeof(Cat)) - .setProjection( Projections.ProjectionList() - .Add( Projections.RowCount() ) - .Add( Projections.Avg("weight") ) - .Add( Projections.Max("weight") ) - .Add( Projections.Min("weight") ) - .Add( Projections.GroupProperty("color") ) - ) - .AddOrder( Order.Asc("color") ) - .List(); - - - - - - - Used to specify that the query results will be a projection (scalar in - nature). Implicitly specifies the projection result transformer. - - The projection representing the overall "shape" of the - query results. - This instance (for method chaining) - - - The individual components contained within the given - determines the overall "shape" of the query result. - - - - - - Add an Expression to constrain the results to be retrieved. - - - - - - - An an Order to the result set - - - - - - Specify an association fetching strategy. Currently, only - one-to-many and one-to-one associations are supported. - - A dot seperated property path. - The Fetch mode. - - - - - Set the lock mode of the current entity - - the lock mode - - - - - Set the lock mode of the aliased entity - - an alias - the lock mode - - - - - Join an association, assigning an alias to the joined entity - - - - - - - - Join an association using the specified join-type, assigning an alias to the joined - association - - - - The type of join to use. - this (for method chaining) - - - - Create a new , "rooted" at the associated entity - - - - - - - Create a new , "rooted" at the associated entity, - using the specified join type. - - A dot-seperated property path - The type of join to use - The created "sub criteria" - - - - Create a new , "rooted" at the associated entity, - assigning the given alias - - - - - - - - Create a new , "rooted" at the associated entity, - assigning the given alias and using the specified join type. - - A dot-separated property path - The alias to assign to the joined association (for later reference). - The type of join to use. - The created "sub criteria" - - - - Set a strategy for handling the query results. This determines the - "shape" of the query result set. - - - - - - - - - - Set a limit upon the number of objects to be retrieved - - - - - - Set the first result to be retrieved - - - - - Set a fetch size for the underlying ADO query. - the fetch size - this (for method chaining) - - - - Set a timeout for the underlying ADO.NET query - - - - - - - Enable caching of this query result set - - - - - - - Set the name of the cache region. - - the name of a query cache region, or - for the default query cache - - - - Add a comment to the generated SQL. - a human-readable string - this (for method chaining) - - - Override the flush mode for this particular query. - The flush mode to use. - this (for method chaining) - - - Override the cache mode for this particular query. - The cache mode to use. - this (for method chaining) - - - - Get the results - - - - - - Convenience method to return a single instance that matches - the query, or null if the query returns no results. - - the single result or - - If there is more than one matching result - - - - - Get a enumerable that when enumerated will execute - a batch of queries in a single database roundtrip - - - - - - - Get an IFutureValue instance, whose value can be retrieved through - its Value property. The query is not executed until the Value property - is retrieved, which will execute other Future queries as well in a - single roundtrip - - - - - - - Get the results and fill the - - The list to fill with the results. - - - - Strongly-typed version of . - - - - - Strongly-typed version of . - - - - - Clear all orders from criteria. - - - - - Allows to get a sub criteria by path. - Will return null if the criteria does not exists. - - The path. - - - - Alows to get a sub criteria by alias. - Will return null if the criteria does not exists - - The alias. - - - - - Gets the root entity type if available, throws otherwise - - - This is an NHibernate specific method, used by several dependent - frameworks for advance integration with NHibernate. - - - - - Get the alias of the entity encapsulated by this criteria instance. - - The alias for the encapsulated entity. - - - Override the cache mode for this particular query. - The cache mode to use. - this (for method chaining) - - - Override the cache mode for this particular query. - The cache mode to use. - this (for method chaining) - - - - The Clone is supported only by a root criteria. - - The clone of the root criteria. - - - - Expose the batch functionality in ADO.Net 2.0 - Microsoft in its wisdom decided to make my life hard and mark it internal. - Through the use of Reflection and some delegates magic, I opened up the functionality. - - Observable performance benefits are 50%+ when used, so it is really worth it. - - - - - Append a command to the batch - - - - - - Executes the batch - - - This seems to be returning the total number of affected rows in all queries - - - - - Return the batch command to be executed - - - - - The number of commands batched in this instance - - - - - Append a command to the batch - - - - - - This is required because SqlClient.SqlCommandSet will throw if - the command has no parameters. - - - - - - Executes the batch - - - This seems to be returning the total number of affected rows in all queries - - - - - Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - - 2 - - - - Return the batch command to be executed - - - - - The number of commands batched in this instance - - - - - Named query in "detached mode" where the NHibernate session is not available. - - - - - - - - - Create a new instance of for a named query string defined in the mapping file. - - The name of a query defined externally. - - The query can be either in HQL or SQL format. - - - - - Get an executable instance of , to actually run the query. - - - - - Creates a new DetachedNamedQuery that is a deep copy of the current instance. - - The clone. - - - - Get the query name. - - - - - Query in "detached mode" where the NHibernate session is not available. - - - - - - - - Create a new instance of for the given query string. - - A hibernate query string - - - - Get an executable instance of , to actually run the query. - - - - - Creates a new DetachedQuery that is a deep copy of the current instance. - - The clone. - - - - Get the HQL string. - - - - - Provides an wrapper over the results of an . - - - This is the IteratorImpl in H2.0.3 - - - - - Create an wrapper over an . - - The to enumerate over. - The used to create the . - The to use to load objects. - The s contained in the . - The names of the columns in the . - The that should be applied to the . - Instantiator of the result holder (used for "select new SomeClass(...)" queries). - - The should already be positioned on the first record in . - - - - - Returns an enumerator that can iterate through the query results. - - - An that can be used to iterate through the query results. - - - - - Advances the enumerator to the next element of the query results. - - - if the enumerator was successfully advanced to the next query results - ; if the enumerator has passed the end of the query results. - - - - - - - - A flag to indicate if Dispose() has been called. - - - - - Finalizer that ensures the object is correctly disposed of. - - - - - Takes care of freeing the managed and unmanaged resources that - this class is responsible for. - - - - - Takes care of freeing the managed and unmanaged resources that - this class is responsible for. - - Indicates if this EnumerableImpl is being Disposed of or Finalized. - - The command is closed and the reader is disposed. This allows other ADO.NET - related actions to occur without needing to move all the way through the - EnumerableImpl. - - - - - Gets the current element in the query results. - - - The current element in the query results which is either an object or - an object array. - - - If the only returns one type of Entity then an object will - be returned. If this is a multi-column resultset then an object array will be - returned. - - - - - - - - - Type definition of Filter. Filter defines the user's view into enabled dynamic filters, - allowing them to set filter parameter values. - - - - - Set the named parameter's value list for this filter. - - The parameter's name. - The values to be applied. - This FilterImpl instance (for method chaining). - - - - Set the named parameter's value list for this filter. Used - in conjunction with IN-style filter criteria. - - The parameter's name. - The values to be expanded into an SQL IN list. - This FilterImpl instance (for method chaining). - - - - Set the named parameter's value list for this filter. Used - in conjunction with IN-style filter criteria. - - The parameter's name. - The values to be expanded into an SQL IN list. - This FilterImpl instance (for method chaining). - - - - Perform validation of the filter state. This is used to verify the - state of the filter after its enablement and before its use. - - - - - - Get the name of this filter. - - This filter's name. - - - - Get the filter definition containing additional information about the - filter (such as default-condition and expected parameter names/types). - - The filter definition - - - - Set the named parameter's value for this filter. - - The parameter's name. - The value to be applied. - This FilterImpl instance (for method chaining). - - - - Set the named parameter's value list for this filter. Used - in conjunction with IN-style filter criteria. - - The parameter's name. - The values to be expanded into an SQL IN list. - This FilterImpl instance (for method chaining). - - - - Set the named parameter's value list for this filter. Used - in conjunction with IN-style filter criteria. - - The parameter's name. - The values to be expanded into an SQL IN list. - This FilterImpl instance (for method chaining). - - - - Perform validation of the filter state. This is used to verify the - state of the filter after its enablement and before its use. - - - - - Get the name of this filter. - - - - - Helper methods for rendering log messages and exception messages - - - - - Generate small message that can be used in traces and exception messages. - - The to create the string from. - The identifier of the object. - A descriptive in the format of [classname#id] - - - - Generate small message that can be used in traces and exception messages. - - The for the class in question. - The identifier of the object. - The . - A descriptive in the format of [classname#id] - - - - Generate small message that can be used in traces and exception messages. - - The for the class in question. - The identifier of the object. - The . - The NHibernate type of the identifier. - A descriptive in the format of [classname#id] - - - - Generate small message that can be used in traces and exception messages. - - The for the class in question - The id - A descriptive in the form [FooBar#id] - - - - Generate small message that can be used in traces and exception messages. - - The for the class in question - A descriptive in the form [FooBar] - - - - Generate small message that can be used in traces and exception messages. - - The for the class in question - The id - A descriptive in the form [collectionrole#id] - - - - Generate an info message string relating to a given property value - for an entity. - - The entity name - The name of the property - The property value. - An info string, in the form [Foo.bars#1] - - - - Generate an info message string relating to a particular managed - collection. - - The persister for the collection - The id value of the owner - The session factory - An info string, in the form [Foo.bars#1] - - - - Generate an info message string relating to a particular entity, - based on the given entityName and id. - - The defined entity name. - The entity id value. - An info string, in the form [FooBar#1]. - - - - Combines several queries into a single DB call - - - - - Get all the results - - - - - Adds the specified criteria to the query. The result will be contained in a - - Return results in a - The criteria. - - - - - Adds the specified criteria to the query. The result will be contained in a - - The criteria. - - - - - Adds the specified criteria to the query, and associates it with the given key. The result will be contained in a - - The key - The criteria - - - - - Adds the specified detached criteria. The result will be contained in a - - The detached criteria. - - - - - Adds the specified detached criteria, and associates it with the given key. The result will be contained in a - - The key - The detached criteria - - - - - Adds the specified criteria to the query - - The criteria. - - - - - Adds the specified criteria to the query, and associates it with the given key - - The key - The criteria - - - - - Adds the specified detached criteria. - - The detached criteria. - - - - - Adds the specified detached criteria, and associates it with the given key - - The key - The detached criteria - - - - - Sets whatevert this criteria is cacheable. - - if set to true [cachable]. - - - - Set the cache region for thie criteria - - The region - - - - - Force a cache refresh - - - - - - - Sets the result transformer for all the results in this mutli criteria instance - - The result transformer. - - - - - Returns the result of one of the Criteria based on the key - - The key - - - - - Initializes a new instance of the class. - - The session. - The factory. - - - - Combines sevaral queries into a single database call - - - - - Get all the results - - - - - Adds the specified criteria to the query. The result will be contained in a - - Return results in a - The criteria. - - - - - Add the specified HQL query to the multi query. The result will be contained in a - - - - - Add the specified HQL query to the multi query, and associate it with the given key. The result will be contained in a - - - - - - - - Add the specified HQL Query to the multi query, and associate it with the given key. The result will be contained in a - - - - - - - - Add the specified HQL query to the multi query. The result will be contained in a - - - - - Add a named query to the multi query. The result will be contained in a - - - - - Add a named query to the multi query, and associate it with the given key. The result will be contained in a - - - - - - - - Add the specified HQL query to the multi query, and associate it with the given key - - - - - - - - Add the specified HQL query to the multi query - - - - - Add the specified HQL Query to the multi query, and associate it with the given key - - - - - - - - Add the specified HQL query to the multi query - - - - - Add a named query to the multi query - - - - - Add a named query to the multi query, and associate it with the given key - - - - - - - - Enable caching of this query result set. - - Should the query results be cacheable? - - - Set the name of the cache region. - The name of a query cache region, or - for the default query cache - - - Should the query force a refresh of the specified query cache region? - This is particularly useful in cases where underlying data may have been - updated via a seperate process (i.e., not modified through Hibernate) and - allows the application to selectively refresh the query cache regions - based on its knowledge of those events. - Should the query result in a forcible refresh of - the query cache? - - - - The timeout for the underlying ADO query - - - - - - Bind a value to a named query parameter - - The name of the parameter - The possibly null parameter value - The NHibernate . - - - - Bind a value to a named query parameter, guessing the NHibernate - from the class of the given object. - - The name of the parameter - The non-null parameter value - - - - Bind multiple values to a named query parameter. This is useful for binding a list - of values to an expression such as foo.bar in (:value_list) - - The name of the parameter - A collection of values to list - The Hibernate type of the values - - - - Bind multiple values to a named query parameter, guessing the Hibernate - type from the class of the first object in the collection. This is useful for binding a list - of values to an expression such as foo.bar in (:value_list) - - The name of the parameter - A collection of values to list - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a . - - - - Bind an instance of a array to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a array. - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - A non-null instance of a . - The name of the parameter - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a . - - - - Bind an instance of a mapped persistent class to a named parameter. - - The name of the parameter - A non-null instance of a persistent class - - - - Bind an instance of a persistent enumeration class to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a persistent enumeration - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - An instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a . - - - - Bind an instance of a to a named parameter - using an NHibernate . - - The name of the parameter - A non-null instance of a . - - - - Override the current session flush mode, just for this query. - - - - - Set a strategy for handling the query results. This can be used to change - "shape" of the query result. - - - - - Returns the result of one of the Criteria based on the key - - The key - - - - - Return the query results of all the queries - - - - - - - an actual entity object, not a proxy! - - - - - - Concrete implementation of a SessionFactory. - - - Has the following responsibilities: - - - Caches configuration settings (immutably) - - Caches "compiled" mappings - ie. - and - - - Caches "compiled" queries (memory sensitive cache) - - - Manages PreparedStatements/IDbCommands - how true in NH? - - - Delegates IDbConnection management to the - - - Factory for instances of - - - - This class must appear immutable to clients, even if it does all kinds of caching - and pooling under the covers. It is crucial that the class is not only thread safe - , but also highly concurrent. Synchronization must be used extremely sparingly. - - - - - - - - - - - NH specific : to avoid the use of entityName for generic implementation - - this is a shortcut. - - - - Gets the hql query identified by the name. - - The name of that identifies the query. - - A hql query or if the named - query does not exist. - - - - Get the return aliases of a query - - - - Return the names of all persistent (mapped) classes that extend or implement the - given class or interface, accounting for implicit/explicit polymorphism settings - and excluding mapped subclasses/joined-subclasses of other classes in the result. - - - - - - - - - - - Closes the session factory, releasing all held resources. - - cleans up used cache regions and "stops" the cache provider. - close the ADO.NET connection - - - - - Get a new stateless session. - - - Get a new stateless session for the given ADO.NET connection. - - - - - - - - - Statistics SPI - - - Get the statistics for this session factory - - - - Gets the ICurrentSessionContext instance attached to this session factory. - - - - - Delegate to handle the scenario of an entity not found by a specified id. - - - - - Delegate method to handle the scenario of an entity not found. - - The entityName (may be the class fullname) - The requested id not founded. - - - - Resolves lookups and deserialization. - - - - This is used heavily be Deserialization. Currently a SessionFactory is not really serialized. - All that is serialized is it's name and uid. During Deserializaiton the serialized SessionFactory - is converted to the one contained in this object. So if you are serializing across AppDomains - you should make sure that "name" is specified for the SessionFactory in the hbm.xml file and that the - other AppDomain has a configured SessionFactory with the same name. If - you are serializing in the same AppDomain then there will be no problem because the uid will - be in this object. - - - TODO: verify that the AppDomain statements are correct. - - - - - - - - - Adds an Instance of the SessionFactory to the local "cache". - - The identifier of the ISessionFactory. - The name of the ISessionFactory. - The ISessionFactory. - The configured properties for the ISessionFactory. - - - - Removes the Instance of the SessionFactory from the local "cache". - - The identifier of the ISessionFactory. - The name of the ISessionFactory. - The configured properties for the ISessionFactory. - - - - Returns a Named Instance of the SessionFactory from the local "cache" identified by name. - - The name of the ISessionFactory. - An instantiated ISessionFactory. - - - - Returns an Instance of the SessionFactory from the local "cache" identified by UUID. - - The identifier of the ISessionFactory. - An instantiated ISessionFactory. - - - - Error handling in this case will only kick in if we cannot set values on the TLS - this is usally the case if we are called from the finalizer, since this is something - that we do only for logging, we ignore the error. - - - - - Concrete implementation of a Session, also the central, organizing component - of Hibernate's internal implementation. - - - Exposes two interfaces: ISession itself, to the application and ISessionImplementor - to other components of hibernate. This is where the hard stuff is... - NOT THREADSAFE - - - - - Constructor used to recreate the Session during the deserialization. - - - - - This is needed because we have to do some checking before the serialization process - begins. I don't know how to add logic in ISerializable.GetObjectData and have .net - write all of the serializable fields out. - - - - - Verify the ISession can be serialized and write the fields to the Serializer. - - - - - The fields are marked with [NonSerializable] as just a point of reference. This method - has complete control and what is serialized and those attributes are ignored. However, - this method should be in synch with the attributes for easy readability. - - - - - Once the entire object graph has been deserialized then we can hook the - collections, proxies, and entities back up to the ISession. - - - - - - Constructor used for OpenSession(...) processing, as well as construction - of sessions for GetCurrentSession(). - - The user-supplied connection to use for this session. - The factory from which this session was obtained - NOT USED - The timestamp for this session - The interceptor to be applied to this session - The entity-mode for this session - Should we auto flush before completion of transaction - Should we auto close after completion of transaction - The mode by which we should release JDBC connections. - - - - Constructor used in building "child sessions". - - The parent Session - The entity mode - - - - Close the session and release all resources - - Do not call this method inside a transaction scope, use Dispose instead, since - Close() is not aware of distributed transactions - - - - - - Ensure that the locks are downgraded to - and that all of the softlocks in the have - been released. - - - - - Save a transient object. An id is generated, assigned to the object and returned - - - - - - - Save a transient object with a manually assigned ID - - - - - - - Delete a persistent object - - - - - Delete a persistent object (by explicit entity name) - - - - Retrieve a list of persistent objects using a Hibernate query - - - - - - - - - - - - - - - Give the interceptor an opportunity to override the default instantiation - - - - - - - Force an immediate flush - - - Cascade merge an entity instance - - - Cascade persist an entity instance - - - Cascade persist an entity instance during the flush process - - - Cascade refresh an entity instance - - - Cascade copy an entity instance - - - Cascade delete an entity instance - - - - detect in-memory changes, determine if the changes are to tables - named in the query and, if so, complete execution the flush - - - - - - - Load the data for the object with the specified id into a newly created object - using "for update", if supported. A new key will be assigned to the object. - This should return an existing proxy where appropriate. - - If the object does not exist in the database, an exception is thrown. - - - - - - - Thrown when the object with the specified id does not exist in the database. - - - - - Load the data for the object with the specified id into a newly created object - using "for update", if supported. A new key will be assigned to the object. - This should return an existing proxy where appropriate. - - If the object does not exist in the database, null is returned. - - - - - - - - - Load the data for the object with the specified id into a newly created object. - This is only called when lazily initializing a proxy. - Do NOT return a proxy. - - - - - Return the object with the specified id or throw exception if no row with that id exists. Defer the load, - return a new proxy or return an existing proxy if possible. Do not check if the object was deleted. - - - - - - - - This can be called from commit() or at the start of a List() method. - - Perform all the necessary SQL statements in a sensible order, to allow - users to repect foreign key constraints: - - Inserts, in the order they were performed - Updates - Deletion of collection elements - Insertion of collection elements - Deletes, in the order they were performed - - - - Go through all the persistent objects and look for collections they might be - holding. If they had a nonpersistable collection, substitute a persistable one - - - - - - Not for internal use - - - - - - - Get the id value for an object that is actually associated with the session. - This is a bit stricter than GetEntityIdentifierIfNotUnsaved(). - - - - - - - called by a collection that wants to initialize itself - - - - - - - - - - Finalizer that ensures the object is correctly disposed of. - - - - - Perform a soft (distributed transaction aware) close of the session - - - - - Takes care of freeing the managed and unmanaged resources that - this class is responsible for. - - Indicates if this Session is being Disposed of or Finalized. - - If this Session is being Finalized (isDisposing==false) then make sure not - to call any methods that could potentially bring this Session back to life. - - - - - remove any hard references to the entity that are held by the infrastructure - (references held by application or other persistant instances are okay) - - - - - - - - - - - - - - - - - - - - - Get the ActionQueue for this session - - - - - - - Gets if the ISession is connected. - - - if the ISession is connected. - - - An ISession is considered connected if there is an (regardless - of its state) or if it the field connect is true. Meaning that it will connect - at the next operation that requires a connection. - - - - Get the statistics for this session. - - - Retrieves the configured event listeners from this event source. - - - - Implements SQL query passthrough - - - An example mapping is: - - <sql-query-name name="mySqlQuery"> - <return alias="person" class="eg.Person" /> - SELECT {person}.NAME AS {person.name}, {person}.AGE AS {person.age}, {person}.SEX AS {person.sex} - FROM PERSON {person} WHERE {person}.NAME LIKE 'Hiber%' - </sql-query-name> - - - - - - Declare a "root" entity, without specifying an alias - - - - - Declare a "root" entity - - - - - Declare a "root" entity, specifying a lock mode - - - - - Declare a "root" entity, without specifying an alias - - - - - Declare a "root" entity - - - - - Declare a "root" entity, specifying a lock mode - - - - - Declare a "joined" entity - - - - - Declare a "joined" entity, specifying a lock mode - - - - - Declare a scalar query result - - - - - Use a predefined named ResultSetMapping - - - - Constructs a SQLQueryImpl given a sql query defined in the mappings. - The representation of the defined sql-query. - The session to which this SQLQueryImpl belongs. - Metadata about parameters found in the query. - - - - A command-oriented API for performing bulk operations against a database. - - - A stateless session does not implement a first-level cache nor - interact with any second-level cache, nor does it implement - transactional write-behind or automatic dirty checking, nor do - operations cascade to associated instances. Collections are - ignored by a stateless session. Operations performed via a - stateless session bypass Hibernate's event model and - interceptors. Stateless sessions are vulnerable to data - aliasing effects, due to the lack of a first-level cache. - - For certain kinds of transactions, a stateless session may - perform slightly faster than a stateful session. - - - - Close the stateless session and release the ADO.NET connection. - - - Insert a entity. - A new transient instance - the identifier of the instance - - - Insert a row. - The entityName for the entity to be inserted - a new transient instance - the identifier of the instance - - - Update a entity. - a detached entity instance - - - Update a entity. - The entityName for the entity to be updated - a detached entity instance - - - Delete a entity. - a detached entity instance - - - Delete a entity. - The entityName for the entity to be deleted - a detached entity instance - - - Retrieve a entity. - a detached entity instance - - - Retrieve a entity. - - - a detached entity instance - - - - - Retrieve a entity, obtaining the specified lock mode. - - a detached entity instance - - - - Retrieve a entity, obtaining the specified lock mode. - - a detached entity instance - - - - Refresh the entity instance state from the database. - - The entity to be refreshed. - - - - Refresh the entity instance state from the database. - - The entityName for the entity to be refreshed. - The entity to be refreshed. - - - - Refresh the entity instance state from the database. - - The entity to be refreshed. - The LockMode to be applied. - - - - Refresh the entity instance state from the database. - - The entityName for the entity to be refreshed. - The entity to be refreshed. - The LockMode to be applied. - - - - Create a new instance of Query for the given HQL query string. - - Entities returned by the query are detached. - - - - Obtain an instance of for a named query string defined in - the mapping file. - - - The query can be either in HQL or SQL format. - Entities returned by the query are detached. - - - - - Create a new instance, for the given entity class, - or a superclass of an entity class. - - A class, which is persistent, or has persistent subclasses - The . - Entities returned by the query are detached. - - - - Create a new instance, for the given entity class, - or a superclass of an entity class, with the given alias. - - A class, which is persistent, or has persistent subclasses - The alias of the entity - The . - Entities returned by the query are detached. - - - - Create a new instance, for the given entity class, - or a superclass of an entity class. - - A class, which is persistent, or has persistent subclasses - The . - Entities returned by the query are detached. - - - - Create a new instance, for the given entity class, - or a superclass of an entity class, with the given alias. - - A class, which is persistent, or has persistent subclasses - The alias of the entity - The . - Entities returned by the query are detached. - - - - Create a new instance, for the given entity name. - - The entity name. - The . - Entities returned by the query are detached. - - - - Create a new instance, for the given entity name, - with the given alias. - - The entity name. - The alias of the entity - The . - Entities returned by the query are detached. - - - - Create a new instance of for the given SQL query string. - Entities returned by the query are detached. - - a SQL query - The - - - Begin a NHibernate transaction. - - - Get the current Hibernate transaction. - - - - Returns the current ADO.NET connection associated with this instance. - - - If the session is using aggressive connection release (as in a - CMT environment), it is the application's responsibility to - close the connection returned by this call. Otherwise, the - application should not close the connection. - - - - Close the stateless session and release the ADO.NET connection. - - - Insert a entity. - A new transient instance - the identifier of the instance - - - Insert a row. - The entityName for the entity to be inserted - a new transient instance - the identifier of the instance - - - Update a entity. - a detached entity instance - - - Update a entity. - The entityName for the entity to be updated - a detached entity instance - - - Delete a entity. - a detached entity instance - - - Delete a entity. - The entityName for the entity to be deleted - a detached entity instance - - - Retrieve a entity. - a detached entity instance - - - Retrieve a entity. - - - a detached entity instance - - - - - Retrieve a entity, obtaining the specified lock mode. - - a detached entity instance - - - - Retrieve a entity, obtaining the specified lock mode. - - a detached entity instance - - - - Refresh the entity instance state from the database. - - The entity to be refreshed. - - - - Refresh the entity instance state from the database. - - The entityName for the entity to be refreshed. - The entity to be refreshed. - - - - Refresh the entity instance state from the database. - - The entity to be refreshed. - The LockMode to be applied. - - - - Refresh the entity instance state from the database. - - The entityName for the entity to be refreshed. - The entity to be refreshed. - The LockMode to be applied. - - - - Create a new instance, for the given entity class, - or a superclass of an entity class. - - A class, which is persistent, or has persistent subclasses - The . - Entities returned by the query are detached. - - - - Create a new instance, for the given entity class, - or a superclass of an entity class, with the given alias. - - A class, which is persistent, or has persistent subclasses - The alias of the entity - The . - Entities returned by the query are detached. - - - - Create a new instance, for the given entity name. - - The entity name. - The . - Entities returned by the query are detached. - - - - Create a new instance, for the given entity name, - with the given alias. - - The entity name. - The alias of the entity - The . - Entities returned by the query are detached. - - - Begin a NHibernate transaction. - - - - Finalizer that ensures the object is correctly disposed of. - - - - - Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - - 2 - - - Get the current Hibernate transaction. - - - Contract for field interception handlers. - - - Use to associate the entity to which we are bound to the given session. - The session to which we are now associated. - - - The the given field initialized for the entity to which we are bound? - The name of the field to check - True if the given field is initialized; otherwise false. - - - Forcefully mark the entity as being dirty. - - - Clear the internal dirty flag. - - - Is the entity considered dirty? - True if the entity is dirty; otherwise false. - - - Is the entity to which we are bound completely initialized? - - - Helper class for dealing with enhanced entity classes. - - - Marker value for uninitialized properties - - - Contract for controlling how lazy properties get initialized. - - - Initialize the property, and return its new value - - - - Walker for collections of values and many-to-many associations - - - - - Superclass of walkers for collection initializers - - - - - - - - Add on association (one-to-one, many-to-one, or a collection) to a list - of associations to be fetched by outerjoin (if necessary) - - - - - Add on association (one-to-one, many-to-one, or a collection) to a list - of associations to be fetched by outerjoin - - - - - For an entity class, return a list of associations to be fetched by outerjoin - - - - - For a collection role, return a list of associations to be fetched by outerjoin - - - - - For a collection role, return a list of associations to be fetched by outerjoin - - - - - For an entity class, add to a list of associations to be fetched - by outerjoin - - - - - For a component, add to a list of associations to be fetched by outerjoin - - - - - For a composite element, add to a list of associations to be fetched by outerjoin - - - - - Extend the path by the given property name - - - - - Get the join type (inner, outer, etc) or -1 if the - association should not be joined. Override on - subclasses. - - - - - Use an inner join if it is a non-null association and this - is the "first" join in a series - - - - - Does the mapping, and Hibernate default semantics, specify that - this association should be fetched by outer joining - - - - - Override on subclasses to enable or suppress joining - of certain association types - - - - - Used to detect circularities in the joined graph, note that - this method is side-effecty - - - - - Used to detect circularities in the joined graph, note that - this method is side-effecty - - - - - Should we join this association? - - - - - Generate a sequence of LEFT OUTER JOIN clauses for the given associations. - - - - - Count the number of instances of IJoinable which are actually - also instances of ILoadable, or are one-to-many associations - - - - - Count the number of instances of which - are actually also instances of - which are being fetched by outer join - - - - - Get the order by string required for collection fetching - - - - - Render the where condition for a (batch) load by identifier / collection key - - - - - Generate a select list of columns containing all properties of the entity classes - - - - - Uniquely identifier a foreign key, so that we don't - join it more than once, and create circularities - - - - - We can use an inner join for first many-to-many association - - - - - Loads a collection of values or a many-to-many association. - - - The collection persister must implement . For - other collections, create a customized subclass of - - - - - - Superclass for loaders that initialize collections - - - - - - - Implements logic for walking a tree of associated classes. - - - Generates an SQL select string containing all properties of those classes. - Tablse are joined using an ANSI-style left outer join. - - - - - An interface for collection loaders - - - - - - - Initialize the given collection - - - - - "Batch" loads collections, using multiple foreign key values in the SQL Where clause - - - - - - - Walker for one-to-many associations - - - - - - Loads one-to-many associations - - - The collection persister must implement . - For other collections, create a customized subclass of . - - - - - Implements subselect fetching for a collection - - - - Implements subselect fetching for a one to many association - - - - - A for queries. - - - - - - The superclass deliberately excludes collections - - - - - Don't bother with the discriminator, unless overridden by subclass - - - - - Use the discriminator, to narrow the select to instances - of the queried subclass, also applying any filters. - - - - - A Loader for queries. - - - Note that criteria - queries are more like multi-object Load()s than like HQL queries. - - - - - Get the names of the columns constrained - by this criterion. - - - - - Get the a typed value for the given property value. - - - - - Get the aliases of the columns constrained - by this criterion (for use in ORDER BY clause). - - - - Implements Hibernate's built-in support for native SQL queries. - This support is built on top of the notion of "custom queries"... - - - - Extension point allowing any SQL query with named and positional parameters - to be executed by Hibernate, returning managed entities, collections and - simple scalar values. - - - - The SQL query string to be performed. - - - - Any query spaces to apply to the query execution. Query spaces are - used in Hibernate's auto-flushing mechanism to determine which - entities need to be checked for pending changes. - - - - - A map representing positions within the supplied query to - which we need to bind named parameters. - - - Optional, may return null if no named parameters. - The structure of the returned map (if one) as follows: -
              -
            1. The keys into the map are the named parameter names
            2. -
            3. The corresponding value is either an if the - parameter occurs only once in the query; or a List of int if the - parameter occurs more than once
            4. -
            -
            -
            - - - A collection of descriptors describing the - ADO result set to be expected and how to map this result set. - - - - - Substitues ADO parameter placeholders (?) for all encountered - parameter specifications. It also tracks the positions of these - parameter specifications within the query string. This accounts for - ordinal-params, named-params, and ejb3-positional-params. - - The query string. - The SQL query with parameter substitution complete. - - - Spefically a fetch return that refers to a collection association. - - - Represents a return which names a fetched association. - - - Represents some non-scalar (entity/collection) return within the query result. - - - Represents a return in a custom query. - - - Retrieves the return descriptor for the owner of this fetch. - - - The name of the property on the owner which represents this association. - - - - Represents a return which names a collection role; it - is used in defining a custom query for loading an entity's - collection in non-fetching scenarios (i.e., loading the collection - itself as the "root" of the result). - - - - Returns the class owning the collection. - - - Returns the name of the property representing the collection from the . - - - - that uses columnnames instead of generated aliases. - Aliases can still be overwritten via <return-property> - - - - - Type definition of CollectionAliases. - - - - - Returns the suffixed result-set column-aliases for columns making - up the key for this collection (i.e., its FK to its owner). - - The key result-set column aliases. - - - - Returns the suffixed result-set column-aliases for the columns - making up the collection's index (map or list). - - The index result-set column aliases. - - - - Returns the suffixed result-set column-aliases for the columns - making up the collection's elements. - - The element result-set column aliases. - - - - Returns the suffixed result-set column-aliases for the column - defining the collection's identifier (if any). - - The identifier result-set column aliases. - - - - Returns the suffix used to unique the column aliases for this - particular alias set. - - The uniqued column alias suffix. - - - - Returns the suffixed result-set column-aliases for columns making up the key for this collection (i.e., its FK to - its owner). - - The key result-set column aliases. - - - - Returns the suffixed result-set column-aliases for the columns making up the collection's index (map or list). - - The index result-set column aliases. - - - - Returns the suffixed result-set column-aliases for the columns making up the collection's elements. - - The element result-set column aliases. - - - - Returns the suffixed result-set column-aliases for the column defining the collection's identifier (if any). - - The identifier result-set column aliases. - - - - Returns the suffix used to unique the column aliases for this particular alias set. - - The uniqued column alias suffix. - - - - that chooses the column names over the alias names. - - - - - EntityAliases which handles the logic of selecting user provided aliases (via return-property), - before using the default aliases. - - - - - Metadata describing the SQL result set column aliases - for a particular entity - - - - - The result set column aliases for the property columns of a subclass - - - - - The result set column aliases for the primary key columns - - - - - The result set column aliases for the discriminator columns - - - - - The result set column aliases for the version columns - - - - - The result set column alias for the Oracle row id - - - - - The result set column aliases for the property columns - - - - - Calculate and cache select-clause suffixes. - - - - - Extension point for loaders which use a SQL result set with "unexpected" column aliases. - - - - Build a logical result row. - - Entity data defined as "root returns" and already handled by the normal Loader mechanism. - - The ADO result set (positioned at the row currently being processed). - Does this query have an associated . - The session from which the query request originated. - The logical result row - - At this point, Loader has already processed all non-scalar result data. We - just need to account for scalar result data here... - - - - - Encapsulates the metadata available from the database result set. - - - - - Initializes a new instance of the class. - - The result set. - - - - Gets the column count in the result set. - - The column count. - - - - Gets the (zero-based) position of the column with the specified name. - - Name of the column. - The column position. - - - - Gets the name of the column at the specified position. - - The (zero-based) position. - The column name. - - - - Gets the Hibernate type of the specified column. - - The column position. - The Hibernate type. - - - Specifically a fetch return that refers to an entity association. - - - - Represents a return which names a "root" entity. - - - A root entity means it is explicitly a "column" in the result, as opposed to - a fetched association. - - - - Represent a scalar (AKA simple value) return within a query result. - - - - Abstract superclass for entity loaders that use outer joins - - - - - Loads entities for a - - - - - Load an entity instance. If OptionalObject is supplied, load the entity - state into the given (uninitialized) object - - - - - "Batch" loads entities, using multiple primary key values in the - SQL where clause. - - - - - - A walker for loaders that fetch entities - - - - - - Disable outer join fetching if this loader obtains an - upgrade lock mode - - - - - Load an entity using outerjoin fetching to fetch associated entities. - - - The must implement . For other entities, - create a customized subclass of . - - - - - CollectionAliases which handles the logic of selecting user provided aliases (via return-property), - before using the default aliases. - - - - - Returns the suffixed result-set column-aliases for columns making up the key for this collection (i.e., its FK to - its owner). - - - - - Returns the suffixed result-set column-aliases for the columns making up the collection's index (map or list). - - - - - Returns the suffixed result-set column-aliases for the columns making up the collection's elements. - - - - - Returns the suffixed result-set column-aliases for the column defining the collection's identifier (if any). - - - - - Returns the suffix used to unique the column aliases for this particular alias set. - - - - - Get the position of the join with the given alias in the - list of joins - - - - - Convenience base class for AuxiliaryDatabaseObjects. - - - This implementation performs dialect scoping checks strictly based on - dialect name comparisons. Custom implementations might want to do - instanceof-type checks. - - - - - Auxiliary database objects (i.e., triggers, stored procedures, etc) defined - in the mappings. Allows Hibernate to manage their lifecycle as part of - creating/dropping the schema. - - - - - Operations to create/drop the mapping element in the database. - - - - - When implemented by a class, generates the SQL string to create - the mapping element in the database. - - The to use for SQL rules. - - - - - A string that contains the SQL to create an object. - - - - - When implemented by a class, generates the SQL string to drop - the mapping element from the database. - - The to use for SQL rules. - - - - A string that contains the SQL to drop an object. - - - - - Add the given dialect name to the scope of dialects to which - this database object applies. - - The name of a dialect. - - - - Does this database object apply to the given dialect? - - The dialect to check against. - True if this database object does apply to the given dialect. - - - - Gets called by NHibernate to pass the configured type parameters to the implementation. - - - - - A NHibernate any type. - - - Polymorphic association to one of several tables. - - - - - Any value that maps to columns. - - - - - Represents an identifying key of a table: the value for primary key - of an entity, or a foreign key of a collection or join table or - joined subclass table. - - - - - A value is anything that is persisted by value, instead of - by reference. It is essentially a Hibernate IType, together - with zero or more columns. Values are wrapped by things with - higher level semantics, for example properties, collections, - classes. - - - - - - - - - - Determines if the Value is part of a valid mapping. - - The to validate. - - if the Value is part of a valid mapping, - otherwise. - - - - Mainly used to make sure that Value maps to the correct number - of columns. - - - - - Gets the number of columns that this value spans in the table. - - - - - Gets an of objects - that this value is stored in. - - - - - Gets the to read/write the Values. - - - - - Gets the this Value is stored in. - - - - - Gets a indicating if this Value is unique. - - - - - Gets a indicating if this Value can have - null values. - - - - - Gets a indicating if this is a SimpleValue - that does not involve foreign keys. - - - - - Get or set the identifier type name - - - - - Get or set the metatype - - - - - Represent the relation between a meta-value and the related entityName - - - - - An array has a primary key consisting of the key columns + index column - - - - - A list has a primary key consisting of the key columns + index column - - - - - Indexed collections include IList, IDictionary, Arrays - and primitive Arrays. - - - - - Base class that stores the mapping information for <array>, <bag>, - <id-bag>, <list>, <map>, and <set> - collections. - - - Subclasses are responsible for the specialization required for the particular - collection style. - - - - - Any mapping with an outer-join attribute - - - - - Defines mapping elements to which filters may be applied. - - - - - Gets or sets a indicating if this is a - mapping for a generic collection. - - - if a collection from the System.Collections.Generic namespace - should be used, if a collection from the System.Collections - namespace should be used. - - - This has no affect on any versions of the .net framework before .net-2.0. - - - - - Gets or sets an array of that contains the arguments - needed to construct an instance of a closed type. - - - - - Initializes a new instance of the class. - - The that contains this list mapping. - - - - Gets the appropriate that is - specialized for this list mapping. - - - - - Mapping for a property of a .NET class (entity - or component). - - - - Common interface for things that can handle meta attributes. - - - - Retrieve the - - The attribute name - The if exists; null otherwise - - - - Meta-Attribute collection. - - - - - Gets the number of columns this property uses in the db. - - - - - Gets an of s. - - - - - Gets or Sets the name of the Property in the class. - - - - - - - - A bag permits duplicates, so it has no primary key - - - - - A bag permits duplicates, so it has no primary key. - - The that contains this bag mapping. - - - - Gets the appropriate that is - specialized for this bag mapping. - - - - - Represents the mapping to a column in a database. - - - - - Initializes a new instance of . - - - - - Initializes a new instance of . - - The name of the column. - - - - Gets the name of this Column in quoted form if it is necessary. - - - The that knows how to quote - the column name. - - - The column name in a form that is safe to use inside of a SQL statement. - Quoted if it needs to be, not quoted if it does not need to be. - - - - For any column name, generate an alias that is unique - to that column name, and also 10 characters or less - in length. - - - - Gets the name of the data type for the column. - - The to use to get the valid data types. - - - The name of the data type for the column. - - - If the mapping file contains a value of the attribute sql-type this will - return the string contained in that attribute. Otherwise it will use the - typename from the of the object. - - - - - Determines if this instance of and a specified object, - which must be a Column can be considered the same. - - An that should be a . - - if the name of this Column and the other Column are the same, - otherwise . - - - - - Determines if this instance of and the specified Column - can be considered the same. - - A to compare to this Column. - - if the name of this Column and the other Column are the same, - otherwise . - - - - - Returns the hash code for this instance. - - - - returns quoted name as it would be in the mapping file. - - - Shallow copy, the value is not copied - - - - Gets or sets the length of the datatype in the database. - - The length of the datatype in the database. - - - - Gets or sets the name of the column in the database. - - - The name of the column in the database. The get does - not return a Quoted column name. - - -

            - If a value is passed in that is wrapped by ` then - NHibernate will Quote the column whenever SQL is generated - for it. How the column is quoted depends on the Dialect. -

            -

            - The value returned by the getter is not Quoted. To get the - column name in quoted form use . -

            -
            -
            - - - Gets or sets if the column can have null values in it. - - if the column can have a null value in it. - - - - Gets or sets the index of the column in the . - - - The index of the column in the . - - - - - Gets or sets if the column contains unique values. - - if the column contains unique values. - - - - Gets or sets the sql data type name of the column. - - - The sql data type name of the column. - - - This is usually read from the sql-type attribute. - - - - - Gets or sets if the column needs to be quoted in SQL statements. - - if the column is quoted. - - - - Gets or sets whether the column is unique. - - - - - Gets or sets a check constraint on the column - - - - - Do we have a check constraint? - - - - - The underlying columns SqlType. - - - If null, it is because the sqltype code is unknown. - - Use to retreive the sqltypecode used - for the columns associated Value/Type. - - - - - The mapping for a component, composite element, composite identifier, - etc. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Base class for relational constraints in the database. - - - - - Adds the to the of - Columns that are part of the constraint. - - The to include in the Constraint. - - - - Generates the SQL string to drop this Constraint in the database. - - The to use for SQL rules. - - - - A string that contains the SQL to drop this Constraint. - - - - - Generates the SQL string to create this Constraint in the database. - - The to use for SQL rules. - - - - - A string that contains the SQL to create this Constraint. - - - - - When implemented by a class, generates the SQL string to create the named - Constraint in the database. - - The to use for SQL rules. - The name to use as the identifier of the constraint in the database. - - - - A string that contains the SQL to create the named Constraint. - - - - - Gets or sets the Name used to identify the constraint in the database. - - The Name used to identify the constraint in the database. - - - - Gets an of objects that are part of the constraint. - - - An of objects that are part of the constraint. - - - - - Gets the number of columns that this Constraint contains. - - - The number of columns that this Constraint contains. - - - - - Gets or sets the this Constraint is in. - - - The this Constraint is in. - - - - - Represents a Table in a database that an object gets mapped against. - - - - - Initializes a new instance of . - - - - - Generates the SQL string to create this Table in the database. - - The to use for SQL rules. - - - - - A string that contains the SQL to create this Table, Primary Key Constraints - , and Unique Key Constraints. - - - - - Generates the SQL string to drop this Table in the database. - - The to use for SQL rules. - - - - A string that contains the SQL to drop this Table and to cascade the drop to - the constraints if the database supports it. - - - - - Gets the schema qualified name of the Table. - - The that knows how to Quote the Table name. - The name of the table qualified with the schema if one is specified. - - - - Gets the schema qualified name of the Table using the specified qualifier - - The that knows how to Quote the Table name. - The catalog name. - The schema name. - A String representing the Qualified name. - If this were used with MSSQL it would return a dbo.table_name. - - - returns quoted name as it would be in the mapping file. - - - - Gets the name of this Table in quoted form if it is necessary. - - - The that knows how to quote the Table name. - - - The Table name in a form that is safe to use inside of a SQL statement. - Quoted if it needs to be, not quoted if it does not need to be. - - - - returns quoted name as it is in the mapping file. - - - - Gets the schema for this table in quoted form if it is necessary. - - - The that knows how to quote the table name. - - - The schema name for this table in a form that is safe to use inside - of a SQL statement. Quoted if it needs to be, not quoted if it does not need to be. - - - - - Gets the at the specified index. - - The index of the Column to get. - - The at the specified index. - - - - - Adds the to the of - Columns that are part of the Table. - - The to include in the Table. - - - - Gets the identified by the name. - - The name of the to get. - - The identified by the name. If the - identified by the name does not exist then it is created. - - - - - Gets the identified by the name. - - The name of the to get. - - The identified by the name. If the - identified by the name does not exist then it is created. - - - - - Create a for the columns in the Table. - - - An of objects. - - - - A for the columns in the Table. - - - This does not necessarily create a , if - one already exists for the columns then it will return an - existing . - - - - - Generates a unique string for an of - objects. - - An of objects. - - An unique string for the objects. - - - - - Sets the Identifier of the Table. - - The that represents the Identifier. - - - - - - - - - Return the column which is identified by column provided as argument. - column with atleast a name. - - The underlying column or null if not inside this table. - Note: the instance *can* be different than the input parameter, but the name will be the same. - - - - - Gets or sets the name of the Table in the database. - - - The name of the Table in the database. The get does - not return a Quoted Table name. - - -

            - If a value is passed in that is wrapped by ` then - NHibernate will Quote the Table whenever SQL is generated - for it. How the Table is quoted depends on the Dialect. -

            -

            - The value returned by the getter is not Quoted. To get the - column name in quoted form use . -

            -
            -
            - - - Gets the number of columns that this Table contains. - - - The number of columns that this Table contains. - - - - - Gets an of objects that - are part of the Table. - - - An of objects that are - part of the Table. - - - - - Gets an of objects that - are part of the Table. - - - An of objects that are - part of the Table. - - - - - Gets an of objects that - are part of the Table. - - - An of objects that are - part of the Table. - - - - - Gets an of objects that - are part of the Table. - - - An of objects that are - part of the Table. - - - - - Gets or sets the of the Table. - - The of the Table. - - - - Gets or sets the schema the table is in. - - - The schema the table is in or if no schema is specified. - - - - - Gets the unique number of the Table. - - The unique number of the Table. - - - - Gets or sets if the column needs to be quoted in SQL statements. - - if the column is quoted. - - - - A value which is "typed" by reference to some other value - (for example, a foreign key is typed by the referenced primary key). - - - - - A Foreign Key constraint in the database. - - - - - Generates the SQL string to create the named Foreign Key Constraint in the database. - - The to use for SQL rules. - The name to use as the identifier of the constraint in the database. - - - - A string that contains the SQL to create the named Foreign Key Constraint. - - - - - Get the SQL string to drop this Constraint in the database. - - The to use for SQL rules. - - - - A string that contains the SQL to drop this Constraint. - - - - - Validates that columnspan of the foreignkey and the primarykey is the same. - Furthermore it aligns the length of the underlying tables columns. - - - - - Gets or sets the that the Foreign Key is referencing. - - The the Foreign Key is referencing. - - Thrown when the number of columns in this Foreign Key is not the same - amount of columns as the Primary Key in the ReferencedTable. - - - - Does this foreignkey reference the primary key of the reference table - - - - A formula is a derived column value. - - - - - - - - - - - - - - - - - - - An PersistentIdentifierBag has a primary key consistenting of just - the identifier column. - - - - - A collection with a synthetic "identifier" column. - - - - - - - - - - - - - - - - - - - - - - - - - - An Index in the database. - - - - - Generates the SQL string to create this Index in the database. - - The to use for SQL rules. - - - - - A string that contains the SQL to create this Index. - - - - - Generates the SQL string to drop this Index in the database. - - The to use for SQL rules. - - - - A string that contains the SQL to drop this Index. - - - - - Adds the to the of - Columns that are part of the Index. - - The to include in the Index. - - - - Gets or sets the this Index is in. - - - The this Index is in. - - - - - Gets an of objects that are - part of the Index. - - - An of objects that are - part of the Index. - - - - - Gets or sets the Name used to identify the Index in the database. - - The Name used to identify the Index in the database. - - - - Declaration of a System.Type mapped with the <subclass> or - <joined-subclass> element. - - - - - Base class for the mapped by <class> and a - that is mapped by <subclass> or - <joined-subclass>. - - - - - - - - - - - Adds a to the class hierarchy. - - The to add to the hierarchy. - - - - Change the property definition or add a new property definition - - The to add. - - - - Adds a that is implemented by a subclass. - - The implemented by a subclass. - - - - Adds a that a subclass is stored in. - - The the subclass is stored in. - - - - Creates the for the - this type is persisted in. - - The that is used to Alias columns. - - - - Given a property path, locate the appropriate referenceable property reference. - - - A referenceable property is a property which can be a target of a foreign-key - mapping (an identifier or explicitly named in a property-ref). - - The property path to resolve into a property reference. - The property reference (never null). - If the property could not be found. - - - - - - - - - - Gets the that is being mapped. - - The that is being mapped. - - The value of this is set by the name attribute on the <class> - element. - - - - - Gets or sets the to use as a Proxy. - - The to use as a Proxy. - - The value of this is set by the proxy attribute. - - - - - Gets or Sets if the Insert Sql is built dynamically. - - if the Sql is built at runtime. - - The value of this is set by the dynamic-insert attribute. - - - - - Gets or Sets if the Update Sql is built dynamically. - - if the Sql is built at runtime. - - The value of this is set by the dynamic-update attribute. - - - - - Gets or Sets the value to use as the discriminator for the Class. - - - A value that distinguishes this subclass in the database. - - - The value of this is set by the discriminator-value attribute. Each <subclass> - in a hierarchy must define a unique discriminator-value. The default value - is the class name if no value is supplied. - - - - - Gets the number of subclasses that inherit either directly or indirectly. - - The number of subclasses that inherit from this PersistentClass. - - - - Iterate over subclasses in a special 'order', most derived subclasses first. - - - It will recursively go through Subclasses so that if a SubclassType has Subclasses - it will pick those up also. - - - - - Gets an of objects - that directly inherit from this PersistentClass. - - - An of objects - that directly inherit from this PersistentClass. - - - - - When implemented by a class, gets a boolean indicating if this - mapped class is inherited from another. - - - if this class is a subclass or joined-subclass - that inherited from another class. - - - - - When implemented by a class, gets a boolean indicating if the mapped class - has a version property. - - if there is a <version> property. - - - - When implemented by a class, gets an - of objects that this mapped class contains. - - - An of objects that - this mapped class contains. - - - This is all of the properties of this mapped class and each mapped class that - it is inheriting from. - - - - - When implemented by a class, gets an - of objects that this mapped class reads from - and writes to. - - - An of objects that - this mapped class reads from and writes to. - - - This is all of the tables of this mapped class and each mapped class that - it is inheriting from. - - - - - Gets an of objects that - this mapped class contains and that all of its subclasses contain. - - - An of objects that - this mapped class contains and that all of its subclasses contain. - - - - - Gets an of all of the objects that the - subclass finds its information in. - - An of objects. - It adds the TableClosureIterator and the subclassTables into the IEnumerable. - - - - When implemented by a class, gets or sets the of the Persister. - - - - - When implemented by a class, gets the of the class - that is mapped in the class element. - - - The of the class that is mapped in the class element. - - - - - - - - - - - - - - - Build a collection of properties which are "referenceable". - - - See for a discussion of "referenceable". - - - - - - - - - - - - - - - Build an iterator over the properties defined on this class. The returned - iterator only accounts for "normal" properties (i.e. non-identifier - properties). - - - An of objects. - - - Differs from in that the iterator - we return here will include properties defined as part of a join. - - - - - Build an enumerable over the properties defined on this class which - are not defined as part of a join. - As with the returned iterator only accounts - for non-identifier properties. - - An enumerable over the non-joined "normal" properties. - - - - - - - - - Gets a boolean indicating if this PersistentClass has any subclasses. - - if this PeristentClass has any subclasses. - - - - Gets or Sets the that this class is stored in. - - The this class is stored in. - - The value of this is set by the table attribute. - - - - - When implemented by a class, gets or set a boolean indicating - if the mapped class has properties that can be changed. - - if the object is mutable. - - The value of this is set by the mutable attribute. - - - - - When implemented by a class, gets a boolean indicating - if the mapped class has a Property for the id. - - if there is a Property for the id. - - - - When implemented by a class, gets or sets the - that is used as the id. - - - The that is used as the id. - - - - - When implemented by a class, gets or sets the - that contains information about the identifier. - - The that contains information about the identifier. - - - - When implemented by a class, gets or sets the - that is used as the version. - - The that is used as the version. - - - - When implemented by a class, gets or sets the - that contains information about the discriminator. - - The that contains information about the discriminator. - - - - When implemented by a class, gets or sets if the mapped class has subclasses or is - a subclass. - - - if the mapped class has subclasses or is a subclass. - - - - - When implemented by a class, gets or sets the CacheConcurrencyStrategy - to use to read/write instances of the persistent class to the Cache. - - The CacheConcurrencyStrategy used with the Cache. - - - - When implemented by a class, gets or sets the - that this mapped class is extending. - - - The that this mapped class is extending. - - - - - When implemented by a class, gets or sets a boolean indicating if - explicit polymorphism should be used in Queries. - - - if only classes queried on should be returned, - if any class in the heirarchy should implicitly be returned. - - The value of this is set by the polymorphism attribute. - - - - - - - - - - When implemented by a class, gets or sets a boolean indicating if the identifier is - embedded in the class. - - if the class identifies itself. - - An embedded identifier is true when using a composite-id specifying - properties of the class as the key-property instead of using a class - as the composite-id. - - - - - When implemented by a class, gets the of the class - that is mapped in the class element. - - - The of the class that is mapped in the class element. - - - - - When implemented by a class, gets or sets the - that contains information about the Key. - - The that contains information about the Key. - - - - When implemented by a class, gets or sets the sql string that should - be a part of the where clause. - - - The sql string that should be a part of the where clause. - - - The value of this is set by the where attribute. - - - - - Gets or sets a boolean indicating if only values in the discriminator column that - are mapped will be included in the sql. - - if the mapped discriminator values should be forced. - - The value of this is set by the force attribute on the discriminator element. - - - - - Initializes a new instance of the class. - - The that is the superclass. - - - - Add the to this PersistentClass. - - The to add. - - This also adds the to the Superclass' collection - of SubclassType Properties. - - - - - Adds a that is implemented by a subclass. - - The implemented by a subclass. - - This also adds the to the Superclass' collection - of SubclassType Properties. - - - - - Adds a that a subclass is stored in. - - The the subclass is stored in. - - This also adds the to the Superclass' collection - of SubclassType Tables. - - - - - - - - - - Gets a boolean indicating if this mapped class is inherited from another. - - - because this is a SubclassType. - - - - - Gets an of objects that this mapped class contains. - - - An of objects that - this mapped class contains. - - - This is all of the properties of this mapped class and each mapped class that - it is inheriting from. - - - - - Gets an of objects that this - mapped class reads from and writes to. - - - An of objects that - this mapped class reads from and writes to. - - - This is all of the tables of this mapped class and each mapped class that - it is inheriting from. - - - - - Gets a boolean indicating if the mapped class has a version property. - - if for the Superclass there is a Property for a version. - - - - - - - - - Gets the of the class - that is mapped in the class element. - - - The of the Superclass that is mapped in the class element. - - - - - - - - - - Gets or sets the CacheConcurrencyStrategy - to use to read/write instances of the persistent class to the Cache. - - The CacheConcurrencyStrategy used with the Cache. - - - - Gets the of the class that is mapped in the class element. - - - The of the Superclass that is mapped in the class element. - - - - - Gets or sets the that this mapped class is extending. - - - The that this mapped class is extending. - - - - - Gets or sets the that is used as the id. - - - The from the Superclass that is used as the id. - - - - - Gets or sets the that contains information about the identifier. - - The from the Superclass that contains information about the identifier. - - - - Gets a boolean indicating if the mapped class has a Property for the id. - - if in the Superclass there is a Property for the id. - - - - Gets or sets the that contains information about the discriminator. - - The from the Superclass that contains information about the discriminator. - - - - Gets or set a boolean indicating if the mapped class has properties that can be changed. - - if the Superclass is mutable. - - - - Gets or sets if the mapped class is a subclass. - - - since this mapped class is a subclass. - - - The setter should not be used to set the value to anything but . - - - - - Gets or sets the that is used as the version. - - The from the Superclass that is used as the version. - - - - Gets or sets a boolean indicating if the identifier is - embedded in the class. - - if the Superclass has an embedded identifier. - - An embedded identifier is true when using a composite-id specifying - properties of the class as the key-property instead of using a class - as the composite-id. - - - - - Gets or sets the that contains information about the Key. - - The that contains information about the Key. - - - - Gets or sets a boolean indicating if explicit polymorphism should be used in Queries. - - - The value of the Superclasses IsExplicitPolymorphism property. - - - - - Gets the sql string that should be a part of the where clause. - - - The sql string that should be a part of the where clause. - - - Thrown when the setter is called. The where clause can not be set on the - SubclassType, only the RootClass. - - - - - Gets or Sets the that this class is stored in. - - The this class is stored in. - - This also adds the to the Superclass' collection - of SubclassType Tables. - - - - - - - - - A many-to-one association mapping - - - - A simple-point association (ie. a reference to another entity). - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A map has a primary key consisting of the key columns - + index columns. - - - - - Initializes a new instance of the class. - - The that contains this map mapping. - - - - Gets the appropriate that is - specialized for this list mapping. - - - - - A meta attribute is a named value or values. - - - - - A mapping for a one-to-many association. - - - - - - - - - - No foreign key element for a one-to-many - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A mapping for a one-to-one association. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A Primary Key constraint in the database. - - - - - Generates the SQL string to create the Primary Key Constraint in the database. - - The to use for SQL rules. - - - A string that contains the SQL to create the Primary Key Constraint. - - - - - Generates the SQL string to create the named Primary Key Constraint in the database. - - The to use for SQL rules. - The name to use as the identifier of the constraint in the database. - - - - A string that contains the SQL to create the named Primary Key Constraint. - - - - - Get the SQL string to drop this Constraint in the database. - - The to use for SQL rules. - - - - A string that contains the SQL to drop this Constraint. - - - - - A primitive array has a primary key consisting - of the key columns + index column. - - - - - Indicates whether given properties are generated by the database and, if - so, at what time(s) they are generated. - - - - - Values for this property are never generated by the database. - - - - - Values for this property are generated by the database on insert. - - - - - Values for this property are generated by the database on both insert and update. - - - - - Declaration of a System.Type mapped with the <class> element that - is the root class of a table-per-subclass, or table-per-concrete-class - inheritance heirarchy. - - - - - The default name of the column for the Identifier - - id is the default column name for the Identifier. - - - - The default name of the column for the Discriminator - - class is the default column name for the Discriminator. - - - - Adds a to the class hierarchy. - - The to add to the hierarchy. - - When a is added this mapped class has the property - set to . - - - - - - - - - - - Gets a boolean indicating if this mapped class is inherited from another. - - - because this is the root mapped class. - - - - - Gets an of objects that this mapped class contains. - - - An of objects that - this mapped class contains. - - - - - Gets an of objects that this - mapped class reads from and writes to. - - - An of objects that - this mapped class reads from and writes to. - - - There is only one in the since - this is the root class. - - - - - Gets a boolean indicating if the mapped class has a version property. - - if there is a Property for a version. - - - - Gets the of the class - that is mapped in the class element. - - - The of the class this mapped class. - - - - - Gets or sets a boolean indicating if the identifier is - embedded in the class. - - if the class identifies itself. - - An embedded identifier is true when using a composite-id specifying - properties of the class as the key-property instead of using a class - as the composite-id. - - - - - Gets or sets the cache region name. - - The region name used with the Cache. - - - - - - - - - Gets or sets the that is used as the id. - - - The that is used as the id. - - - - - Gets or sets the that contains information about the identifier. - - The that contains information about the identifier. - - - - Gets a boolean indicating if the mapped class has a Property for the id. - - if there is a Property for the id. - - - - Gets or sets the that contains information about the discriminator. - - The that contains information about the discriminator. - - - - Gets or sets if the mapped class has subclasses. - - - if the mapped class has subclasses. - - - - - Gets the of the class that is mapped in the class element. - - - this since this is the root mapped class. - - - - - Gets or sets a boolean indicating if explicit polymorphism should be used in Queries. - - - if only classes queried on should be returned, - if any class in the hierarchy should implicitly be returned. - - - - - Gets or sets the that is used as the version. - - The that is used as the version. - - - - Gets or set a boolean indicating if the mapped class has properties that can be changed. - - if the object is mutable. - - - - Gets or sets the that this mapped class is extending. - - - since this is the root class. - - - Thrown when the setter is called. The Superclass can not be set on the - RootClass, only the SubclassType can have a Superclass set. - - - - - Gets or sets the that contains information about the Key. - - The that contains information about the Key. - - - - - - - - - Gets or sets a boolean indicating if only values in the discriminator column that - are mapped will be included in the sql. - - if the mapped discriminator values should be forced. - - - - Gets or sets the sql string that should be a part of the where clause. - - - The sql string that should be a part of the where clause. - - - - - Gets or sets the CacheConcurrencyStrategy - to use to read/write instances of the persistent class to the Cache. - - The CacheConcurrencyStrategy used with the Cache. - - - - A Set with no nullable element columns will have a primary - key consisting of all table columns (ie - key columns + - element columns). - - - - - A simple implementation of AbstractAuxiliaryDatabaseObject in which the CREATE and DROP strings are - provided up front. - - - Contains simple facilities for templating the catalog and schema - names into the provided strings. - This is the form created when the mapping documents use <create/> and <drop/>. - - - - Placeholder for typedef information - - - - An Unique Key constraint in the database. - - - - - Generates the SQL string to create the Unique Key Constraint in the database. - - The to use for SQL rules. - A string that contains the SQL to create the Unique Key Constraint. - - - - Generates the SQL string to create the Unique Key Constraint in the database. - - The to use for SQL rules. - - - - - A string that contains the SQL to create the Unique Key Constraint. - - - - - Get the SQL string to drop this Constraint in the database. - - The to use for SQL rules. - - - - A string that contains the SQL to drop this Constraint. - - - - - Exposes entity class metadata to the application - - - - - Get the type of a particular (named) property - - - Return the values of the mapped properties of the object - - - - The persistent class - - - - - Create a class instance initialized with the given identifier - - - - - Get the value of a particular (named) property - - - - Extract the property values from the given entity. - The entity from which to extract the property values. - The entity-mode of the given entity - The property values. - - - - Set the value of a particular (named) property - - - - - Set the given values to the mapped properties of the given object - - - - - Get the identifier of an instance (throw an exception if no identifier property) - - - - - Set the identifier of an instance (or do nothing if no identifier property) - - - - Does the class implement the interface? - - - Does the class implement the interface? - - - - Get the version number (or timestamp) from the object's version property - (or return null if not versioned) - - - - - The name of the entity - - - - - The name of the identifier property (or return null) - - - - - The names of the class' persistent properties - - - - - The identifier Hibernate type - - - - - The Hibernate types of the classes properties - - - - - Are instances of this class mutable? - - - - - Are instances of this class versioned by a timestamp or version number column? - - - - - Gets the index of the version property - - - - - Get the nullability of the class' persistent properties - - - - Get the "laziness" of the properties of this class - - - Which properties hold the natural id? - - - Does this entity extend a mapped superclass? - - - Does the class support dynamic proxies? - - - Does the class have an identifier property? - - - Does this entity declare a natural id? - - - Does this entity have mapped subclasses? - - - - Exposes collection metadata to the application - - - - - The collection key type - - - - - The collection element type - - - - - The collection index type (or null if the collection has no index) - - - - - Is the collection indexed? - - - - - The name of this collection role - - - - - Is the collection an array? - - - - - Is the collection a primitive array? - - - - - Is the collection lazily initialized? - - - - - An additional contract for parameters which originate from parameters explicitly encountered in the source statement - (HQL or native-SQL). - Author: Steve Ebersole - Ported by: Steve Strong - - - - - Maintains information relating to parameters which need to get bound into a - JDBC {@link PreparedStatement}. - Author: Steve Ebersole - Ported by: Steve Strong - - - - - Bind the appropriate value into the given statement at the specified position. - - The statement into which the value should be bound. - The defined values for the current query execution. - The session against which the current execution is occuring. - The position from which to start binding value(s). - The number of sql bind positions "eaten" by this bind operation. - - - - Render this parameter into displayable info (for logging, etc). - - The displayable info - - - - Get or set the type which we are expeting for a bind into this parameter based - on translated contextual information. - - - - - Retrieves the line number on which this parameter occurs in the source query. - - - - - Retrieves the column number (within the {@link #getSourceLine()}) where this parameter occurs. - - - - - Constructs an AbstractExplicitParameterSpecification. - - sourceLine - sourceColumn - - - - Creates a specialized collection-filter collection-key parameter spec. - - The collection role being filtered. - The mapped collection-key type. - The position within QueryParameters where we can find the appropriate param value to bind. - - - - Constructs a parameter specification for a particular filter parameter. - - The name of the filter - The name of the parameter - The paremeter type specified on the filter metadata - - - - Parameter bind specification for an explicit named parameter. - Author: Steve Ebersole - Ported by: Steve Strong - - - - - Constructs a named parameter bind specification. - - sourceLine - sourceColumn - The named parameter name. - - - - Bind the appropriate value into the given statement at the specified position. - - The statement into which the value should be bound. - The defined values for the current query execution. - The session against which the current execution is occuring. - The position from which to start binding value(s). - The number of sql bind positions "eaten" by this bind operation. - - - - Getter for property 'name'. - - - - - Defines the information available for parameters encountered during - query translation through the antlr-based parser. - Author: Steve Ebersole - Ported by: Steve Strong - - - - - Parameter bind specification for an explicit positional (or ordinal) parameter. - Author: Steve Ebersole - Ported by: Steve Strong - - - - - Constructs a position/ordinal parameter bind specification. - - sourceLine - sourceColumn - The position in the source query, relative to the other source positional parameters. - - - - Bind the appropriate value into the given statement at the specified position. - - The statement into which the value should be bound. - The defined values for the current query execution. - The session against which the current execution is occuring. - The position from which to start binding value(s). - The number of sql bind positions "eaten" by this bind operation. - - - - Getter for property 'hqlPosition'. - - - - - Summary description for AbstractCollectionPersister. - - - - - A collection role that may be queried or loaded by outer join. - - - - - Abstraction of all mappings that define properties: entities, collection elements. - - - - - Given a component path expression, get the type of the property - - - - - - - Given a component path expression, get the type of the property. - - - - true if a type was found, false if not - - - - Given a query alias and a property path, return the qualified column name - - - - - - - Given a property path, return the corresponding column name(s). - - - - Get the type of the thing containing the properties - - - - - Anything that can be loaded by outer join - namely persisters for classes or collections. - - - - - All columns to select, when loading. - - - - - Get the where clause part of any joins (optional operation) - - - - - - - - - Get the from clause part of any joins (optional operation) - - - - - - - - - Get the where clause filter, given a query alias and considering enabled session filters - - - - - Very, very, very ugly... - - Does this persister "consume" entity column aliases in the result - set? - - - - Very, very, very ugly... - - Does this persister "consume" collection column aliases in the result - set? - - - - An identifying name; a class name or collection role name. - - - - - The columns to join on. - - - - - Is this instance actually a ICollectionPersister? - - - - - The table to join to. - - - - - A strategy for persisting a collection role. - - - Defines a contract between the persistence strategy and the actual persistent collection framework - and session. Does not define operations that are required for querying collections, or loading by outer join. - - Implements persistence of a collection instance while the instance is - referenced in a particular role. - - This class is highly coupled to the - hierarchy, since double dispatch is used to load and update collection - elements. - - May be considered an immutable view of the mapping object - - - - - Initialize the given collection with the given key - - - - - - - Read the key from a row of the - - - - - Read the element from a row of the - - - - - Read the index from a row of the - - - - - Read the identifier from a row of the - - - - - Completely remove the persistent state of the collection - - - - - - - (Re)create the collection's persistent state - - - - - - - - Delete the persistent state of any elements that were removed from the collection - - - - - - - - Update the persistent state of any elements that were modified - - - - - - - - Insert the persistent state of any new collection elements - - - - - - - - Generates the collection's key column aliases, based on the given - suffix. - - The suffix to use in the key column alias generation. - The key column aliases. - - - - Generates the collection's index column aliases, based on the given - suffix. - - The suffix to use in the index column alias generation. - The index column aliases, or null if not indexed. - - - - Generates the collection's element column aliases, based on the given - suffix. - - The suffix to use in the element column alias generation. - The element column aliases. - - - - Generates the collection's identifier column aliases, based on the given - suffix. - - The suffix to use in the identifier column alias generation. - The identifier column aliases. - - - - Get the cache - - - - Get the cache structure - - - - Get the associated IType - - - - - Get the "key" type (the type of the foreign key) - - - - - Get the "index" type for a list or map (optional operation) - - - - - Get the "element" type - - - - - Return the element class of an array, or null otherwise - - - - - Is this an array or primitive values? - - - - - Is this an array? - - - - Is this a one-to-many association? - - - - Is this a many-to-many association? Note that this is mainly - a convenience feature as the single persister does not - contain all the information needed to handle a many-to-many - itself, as internally it is looked at as two many-to-ones. - - - - - Is this collection lazily initialized? - - - - - Is this collection "inverse", so state changes are not propogated to the database. - - - - - Get the name of this collection role (the fully qualified class name, extended by a "property path") - - - - Get the persister of the entity that "owns" this collection - - - - Get the surrogate key generation strategy (optional operation) - - - - - Get the type of the surrogate key - - - - Get the "space" that holds the persistent state - - - - Is cascade delete handled by the database-level - foreign key constraint definition? - - - - - Does this collection cause version increment of the owning entity? - - - - Can the elements of this collection change? - - - - Is this collection role cacheable - - - - - Is this an "indexed" collection? (list or map) - - - - - Does this collection implement "orphan delete"? - - - - - Is this an ordered collection? (An ordered collection is - ordered by the initialization operation, not by sorting - that happens in memory, as in the case of a sorted collection.) - - - - - Generate a list of collection index and element columns - - - - - Get the names of the collection index columns if - this is an indexed collection (optional operation), - aliased by the given table alias - - - - - Get the names of the collection element columns (or the primary - key columns in the case of a one-to-many association), - aliased by the given table alias - - - - - Get the extra where clause filter SQL - - - - - - - Get the order by SQL - - - - - - - Get the order-by to be applied at the target table of a many to many - - The alias for the many-to-many target table - Appropriate order-by fragment or empty string. - - - - Get the index formulas if this is an indexed collection - (optional operation) - - - - - Get the persister of the element class, if this is a - collection of entities (optional operation). Note that - for a one-to-many association, the returned persister - must be OuterJoinLoadable. - - - - - Should we load this collection role by outer joining? - - - - - Get the names of the collection index columns if this is an indexed collection (optional operation) - - - - - Get the names of the collection element columns (or the primary key columns in the case of a one-to-many association) - - - - - Does this collection role have a where clause filter? - - - - - Reads the Element from the IDataReader. The IDataReader will probably only contain - the id of the Element. - - See ReadElementIdentifier for an explanation of why this method will be depreciated. - - - - Perform an SQL INSERT, and then retrieve a generated identifier. - - the id of the collection entry - - This form is used for PostInsertIdentifierGenerator-style ids (IDENTITY, select, etc). - - - - - Return the element class of an array, or null otherwise - - - - - Get the name of this collection role (the fully qualified class name, - extended by a "property path") - - - - - Collection persister for collections of values and many-to-many associations. - - - - - Generate the SQL DELETE that deletes all rows - - - - - - Generate the SQL INSERT that creates a new row - - - - - - Generate the SQL UPDATE that updates a row - - - - - - Generate the SQL DELETE that deletes a particular row - - - - - - Create the - - - - - Summary description for CollectionPropertyMapping. - - - - - The names of all the collection properties. - - - - - Summary description for CompositeElementPropertyMapping. - - - - - Base implementation of a PropertyMapping. - - - - - Summary description for ElementPropertyMapping. - - - - - Summary description for OneToManyPersister. - - - - - Generate the SQL UPDATE that updates all the foreign keys to null - - - - - - Generate the SQL UPDATE that updates a foreign key to a value - - - - - - Not needed for one-to-many association - - - - - - Generate the SQL UPDATE that updates a particular row's foreign - key to null - - - - - - Create the - - - - - Superclass for built-in mapping strategies. Implements functionalty common to both mapping - strategies - - - May be considered an immutable view of the mapping object - - - - - A ClassPersister that may be loaded by outer join using - the OuterJoinLoader hierarchy and may be an element - of a one-to-many association. - - - - - Implemented by ClassPersister that uses Loader. There are several optional - operations used only by loaders that inherit OuterJoinLoader - - - - - Concrete IEntityPersisters implement mapping and persistence logic for a particular class. - - - Implementors must be threadsafe (preferably immutable) and must provide a constructor of type - matching the signature of: (PersistentClass, SessionFactoryImplementor) - - - - - Finish the initialization of this object, once all ClassPersisters have been - instantiated. Called only once, before any other method. - - - - - Determine whether the given name represents a subclass entity - (or this entity itself) of the entity mapped by this persister. - - The entity name to be checked. - - True if the given entity name represents either the entity mapped by this persister or one of its subclass entities; - false otherwise. - - - - - Get the type of a particular property - - - - - - Locate the property-indices of all properties considered to be dirty. - The current state of the entity (the state to be checked). - The previous state of the entity (the state to be checked against). - The entity for which we are checking state dirtiness. - The session in which the check is ccurring. - or the indices of the dirty properties - - - Locate the property-indices of all properties considered to be dirty. - The old state of the entity. - The current state of the entity. - The entity for which we are checking state modification. - The session in which the check is ccurring. - return or the indicies of the modified properties - - - - Retrieve the current state of the natural-id properties from the database. - - - The identifier of the entity for which to retrieve the naturak-id values. - - - The session from which the request originated. - - The natural-id snapshot. - - - - Load an instance of the persistent class. - - - - - Do a version check (optional operation) - - - - - Persist an instance - - - - - Persist an instance, using a natively generated identifier (optional operation) - - - - - Delete a persistent instance - - - - - Update a persistent instance - - The id. - The fields. - The dirty fields. - if set to [has dirty collection]. - The old fields. - The old version. - The obj. - The rowId - The session. - - - - Get the current database state of the object, in a "hydrated" form, without resolving identifiers - - - - if select-before-update is not enabled or not supported - - - - Get the current version of the object, or return null if there is no row for - the given identifier. In the case of unversioned data, return any object - if the row exists. - - - - - - - Try to discover the entity mode from the entity instance - - - Has the class actually been bytecode instrumented? - - - Called just after the entities properties have been initialized - - - Called just after the entity has been reassociated with the session - - - - Create a new proxy instance - - - - - - - Is this a new transient instance? - - - Return the values of the insertable properties of the object (including backrefs) - - - - Perform a select to retrieve the values of any generated properties - back from the database, injecting these generated values into the - given entity as well as writing this state to the persistence context. - - - Note, that because we update the persistence context here, callers - need to take care that they have already written the initial snapshot - to the persistence context before calling this method. - - The entity's id value. - The entity for which to get the state. - The entity state (at the time of Save). - The session. - - - - Perform a select to retrieve the values of any generated properties - back from the database, injecting these generated values into the - given entity as well as writing this state to the persistence context. - - - Note, that because we update the persistence context here, callers - need to take care that they have already written the initial snapshot - to the persistence context before calling this method. - - The entity's id value. - The entity for which to get the state. - The entity state (at the time of Save). - The session. - - - - The persistent class, or null - - - - - Does the class implement the ILifecycle inteface? - - - - - Does the class implement the IValidatable interface? - - - - - Get the proxy interface that instances of this concrete class will be cast to - - - - - Set the given values to the mapped properties of the given object - - - - - Set the value of a particular property - - - - - Return the values of the mapped properties of the object - - - - - Get the value of a particular property - - - - - Get the value of a particular property - - - - - Get the identifier of an instance ( throw an exception if no identifier property) - - - - - Set the identifier of an instance (or do nothing if no identifier property) - - The object to set the Id property on. - The value to set the Id property to. - The EntityMode - - - - Get the version number (or timestamp) from the object's version property (or return null if not versioned) - - - - - Create a class instance initialized with the given identifier - - - - - Determines whether the specified entity is an instance of the class - managed by this persister. - - The entity. - The EntityMode - - if the specified entity is an instance; otherwise, . - - - - Does the given instance have any uninitialized lazy properties? - - - - Set the identifier and version of the given instance back - to its "unsaved" value, returning the id - - - - Get the persister for an instance of this class or a subclass - - - - Check the version value trough . - - The snapshot entity state - The result of . - NHibernate-specific feature, not present in H3.2 - - - - The ISessionFactory to which this persister "belongs". - - - - - Returns an object that identifies the space in which identifiers of - this entity hierarchy are unique. - - - - - The entity name which this persister maps. - - - - - Retrieve the underlying entity metamodel instance... - - The metamodel - - - - Returns an array of objects that identify spaces in which properties of - this entity are persisted, for instances of this class only. - - The property spaces. - - For most implementations, this returns the complete set of table names - to which instances of the mapped entity are persisted (not accounting - for superclass entity mappings). - - - - - Returns an array of objects that identify spaces in which properties of - this entity are persisted, for instances of this class and its subclasses. - - - Much like , except that here we include subclass - entity spaces. - - The query spaces. - - - - Are instances of this class mutable? - - - - - Determine whether the entity is inherited one or more other entities. - In other words, is this entity a subclass of other entities. - - True if other entities extend this entity; false otherwise. - - - - Is the identifier assigned before the insert by an IDGenerator or is it returned - by the Insert() method? - - - This determines which form of Insert() will be called. - - - - - Are instances of this class versioned by a timestamp or version number column? - - - - - Get the type of versioning (optional operation) - - - - - Which property holds the version number? (optional operation) - - - - - If the entity defines a natural id (), which - properties make up the natural id. - - - The indices of the properties making of the natural id; or - null, if no natural id is defined. - - - - - Return the IIdentifierGenerator for the class - - - - - Get the Hibernate types of the class properties - - - - - Get the names of the class properties - doesn't have to be the names of the actual - .NET properties (used for XML generation only) - - - - - Gets if the Property is insertable. - - if the Property's value can be inserted. - - This is for formula columns and if the user sets the insert attribute on the <property> element. - - - - Which of the properties of this class are database generated values on insert? - - - Which of the properties of this class are database generated values on update? - - - - Properties that may be dirty (and thus should be dirty-checked). These - include all updatable properties and some associations. - - - - - Get the nullability of the properties of this class - - - - - Get the "versionability" of the properties of this class (is the property optimistic-locked) - - if the property is optimistic-locked; otherwise, . - - - - Get the cascade styles of the properties (optional operation) - - - - - Get the identifier type - - - - - Get the name of the indentifier property (or return null) - need not return the - name of an actual .NET property - - - - - Should we always invalidate the cache instead of recaching updated state - - - - - Should lazy properties of this entity be cached? - - - - - Get the cache (optional operation) - - - - Get the cache structure - - - - Get the user-visible metadata for the class (optional operation) - - - - - Is batch loading enabled? - - - - Is select snapshot before update enabled? - - - - Does this entity contain a version property that is defined - to be database generated? - - - - - Does this class support dynamic proxies? - - - - - Do instances of this class contain collections? - - - - - Determine whether any properties of this entity are considered mutable. - - - True if any properties of the entity are mutable; false otherwise (meaning none are). - - - - - Determine whether this entity contains references to persistent collections - which are fetchable by subselect? - - - True if the entity contains collections fetchable by subselect; false otherwise. - - - - - Does this class declare any cascading save/update/deletes? - - - - - Does the class have a property holding the identifier value? - - - - - Determine whether detahced instances of this entity carry their own - identifier value. - - - True if either (1) or - (2) the identifier is an embedded composite identifier; false otherwise. - - - The other option is the deprecated feature where users could supply - the id during session calls. - - - - - Determine whether this entity defines a natural identifier. - - True if the entity defines a natural id; false otherwise. - - - - Determine whether this entity defines any lazy properties (ala - bytecode instrumentation). - - - True if the entity has properties mapped as lazy; false otherwise. - - - - - Gets if the Property is updatable - - if the Property's value can be updated. - - This is for formula columns and if the user sets the update attribute on the <property> element. - - - - - Does this class have a cache? - - - - - Does this entity define any properties as being database-generated on insert? - - - - - Does this entity define any properties as being database-generated on update? - - - - - Get the concrete subclass corresponding to the given discriminator value - - - - - Get the result set aliases used for the identifier columns, given a suffix - - - - - Get the result set aliases used for the property columns, given a suffix (properties of this class, only). - - - - - Get the result set column names mapped for this property (properties of this class, only). - - - - - Get the alias used for the discriminator column, given a suffix - - - - - Retrieve property values from one row of a result set - - - - - The discriminator type - - - - - Get the names of columns used to persist the identifier - - - - - Get the name of the column used as a discriminator - - - - - Does the persistent class have subclasses? - - - - Does the result set contain rowids? - - - - Generate a list of collection index and element columns - - - - - - - - How many properties are there, for this class and all subclasses? (optional operation) - - - - - - May this property be fetched using an SQL outerjoin? - - - - - - - Get the cascade style of this (subclass closure) property - - - - - Is this property defined on a subclass of the mapped class? - - - - - - - Get an array of the types of all properties of all subclasses (optional operation) - - - - - - - Get the name of the numbered property of the class or a subclass - (optional operation) - - - - - - - Is the numbered property of the class of subclass nullable? - - - - - Return the column names used to persist all properties of all sublasses of the persistent class - (optional operation) - - - - - Return the table name used to persist the numbered property of - the class or a subclass - (optional operation) - - - - - Given the number of a property of a subclass, and a table alias, return the aliased column names - (optional operation) - - - - - - - - Get the main from table fragment, given a query alias (optional operation) - - - - - - - Get the column names for the given property path - - - - - Get the table name for the given property path - - - - - Extends the generic ILoadable contract to add operations required by HQL - - - - - Given a query alias and an identifying suffix, render the intentifier select fragment. - - - - - - - - Given a query alias and an identifying suffix, render the property select fragment. - - - - - Given a property name, determine the number of the table which contains the column - to which this property is mapped. - - The name of the property. - The number of the table to which the property is mapped. - - Note that this is not relative to the results from {@link #getConstraintOrderedTableNameClosure()}. - It is relative to the subclass table name closure maintained internal to the persister (yick!). - It is also relative to the indexing used to resolve {@link #getSubclassTableName}... - - - - Determine whether the given property is declared by our - mapped class, our super class, or one of our subclasses... -

            - Note: the method is called 'subclass property...' simply - for consistency sake (e.g. {@link #getSubclassPropertyTableNumber} -

            - The property name. - The property declarer -
            - - - Get the name of the table with the given index from the internal array. - - The index into the internal array. - - - - - The alias used for any filter conditions (mapped where-fragments or - enabled-filters). - - The root alias - The alias used for "filter conditions" within the where clause. - - This may or may not be different from the root alias depending upon the - inheritance mapping strategy. - - - - - Is this class explicit polymorphism only? - - - - - The class that this class is mapped as a subclass of - not necessarily the direct superclass - - - - - The discriminator value for this particular concrete subclass, as a string that may be - embedded in a select statement - - - - - The discriminator value for this particular concrete subclass - - The DiscriminatorValue is specific of NH since we are using strongly typed parameters for SQL query. - - - - Is the inheritance hierarchy described by this persister contained across - multiple tables? - - True if the inheritance hierarchy is spread across multiple tables; false otherwise. - - - - Get the names of all tables used in the hierarchy (up and down) ordered such - that deletes in the given order would not cause constraint violations. - - The ordered array of table names. - - - - For each table specified in , get - the columns that define the key between the various hierarchy classes. - - - The first dimension here corresponds to the table indexes returned in - . - - The second dimension should have the same length across all the elements in - the first dimension. If not, that'd be a problem ;) - - - - - Get the name of the temporary table to be used to (potentially) store id values - when performing bulk update/deletes. - - The appropriate temporary table name. - - - - Get the appropriate DDL command for generating the temporary table to - be used to (potentially) store id values when performing bulk update/deletes. - - The appropriate temporary table creation command. - - - Is the version property included in insert statements? - - - - Describes a class that may be loaded via a unique key. - - - - - Load an instance of the persistent class, by a unique key other than the primary key. - - - - - Get the property number of the unique key property - - - - - A class persister that supports queries expressed in the platform native SQL dialect. - - - - - Returns the column alias names used to persist/query the numbered property of the class or a subclass (optional operation). - - - - - Return the column names used to persist/query the named property of the class or a subclass (optional operation). - - - - - All columns to select, when loading. - - - - - Get the type - - - - - Contract for things that can be locked via a . - - - Currently only the root table gets locked, except for the case of HQL and Criteria queries - against dialects which do not support either (1) FOR UPDATE OF or (2) support hint locking - (in which case *all* queried tables would be locked). - - - - - Get the SQL alias this persister would use for the root table - given the passed driving alias. - - - The driving alias; or the alias for the table mapped by this persister in the hierarchy. - - The root table alias. - - - - Locks are always applied to the "root table". - - - - - Get the names of columns on the root table used to persist the identifier. - - - - - For versioned entities, get the name of the column (again, expected on the - root table) used to store the version values. - - - - - To build the SQL command in pessimistic lock - - - - - Decide which tables need to be updated - - The indices of all the entity properties considered dirty. - Whether any collections owned by the entity which were considered dirty. - Array of booleans indicating which table require updating. - - The return here is an array of boolean values with each index corresponding - to a given table in the scope of this persister. - - - - - Generate the SQL that selects the version number by id - - - - - Retrieve the version number - - - - - Warning: - When there are duplicated property names in the subclasses - of the class, this method may return the wrong table - number for the duplicated subclass property (note that - SingleTableEntityPersister defines an overloaded form - which takes the entity name. - - - - - Get the column names for the numbered property of this class - - - - - Must be called by subclasses, at the end of their constructors - - - - Generate the SQL that updates a row by id (and version) - - - Generate the SQL that inserts a row - - - Marshall the fields of a persistent instance to a prepared statement - - - - Unmarshall the fields of a persistent instance from a result set, - without resolving associations or collections - - - - - Perform an SQL INSERT, and then retrieve a generated identifier. - - - This form is used for PostInsertIdentifierGenerator-style ids (IDENTITY, select, etc). - - - - - Perform an SQL INSERT. - - - This for is used for all non-root tables as well as the root table - in cases where the identifier value is known before the insert occurs. - - - - Perform an SQL UPDATE or SQL INSERT - - - - Perform an SQL DELETE - - - - - Load an instance using the appropriate loader (as determined by - - - - - Transform the array of property indexes to an array of booleans, true when the property is dirty - - - - Which properties appear in the SQL update? (Initialized, updateable ones!) - - - - Determines whether the specified entity is an instance of the class - managed by this persister. - - The entity. - The entity mode. - - if the specified entity is an instance; otherwise, . - - - - - The queries that delete rows by id (and version) - - - - - The queries that insert rows with a given id - - - - - The queries that update rows by id (and version) - - - - - The query that inserts a row, letting the database generate an id - - The IDENTITY-based insertion query. - - - - We can't immediately add to the cache if we have formulas - which must be evaluated, or if we have the possibility of - two concurrent updates to the same item being merged on - the database. This can happen if (a) the item is not - versioned and either (b) we have dynamic update enabled - or (c) we have multiple tables holding the state of the - item. - - - - The property name of the "special" identifier property in HQL - - - - A IEntityPersister implementing the normalized "table-per-subclass" mapping strategy - - - - - Constructs the NormalizedEntityPerister for the PersistentClass. - - The PersistentClass to create the EntityPersister for. - The configured . - The SessionFactory that this EntityPersister will be stored in. - The mapping used to retrieve type information. - - - - Find the Index of the table name from a list of table names. - - The name of the table to find. - The array of table names - The Index of the table in the array. - Thrown when the tableName specified can't be found - - - - Not really a Loader, just a wrapper around a named query. - - - - - Default implementation of the ClassPersister interface. Implements the - "table-per-class hierarchy" mapping strategy for an entity class. - - - - Generate the SQL that selects a row by id - - - - Factory for IEntityPersister and ICollectionPersister instances. - - - - - Creates a built in Entity Persister or a custom Persister. - - - - - Creates a specific Persister - could be a built in or custom persister. - - - - - A Strategy for converting a mapped property name to a Field name. - - - - - When implemented by a class, converts the Property's name into a Field name - - The name of the mapped property. - The name of the Field. - - - Represents a "back-reference" to the id of a collection owner. - - - - Abstracts the notion of a "property". Defines a strategy for accessing the - value of a mapped property. - - - - - When implemented by a class, create a "getter" for the mapped property. - - The to find the Property in. - The name of the mapped Property to get. - - The to use to get the value of the Property from an - instance of the . - - Thrown when a Property specified by the propertyName could not - be found in the . - - - - - When implemented by a class, create a "setter" for the mapped property. - - The to find the Property in. - The name of the mapped Property to set. - - The to use to set the value of the Property on an - instance of the . - - - Thrown when a Property specified by the propertyName could not - be found in the . - - - - - Allow embedded and custom accessors to define if the ReflectionOptimizer can be used. - - - - The Setter implementation for id backrefs. - - - - Sets values of a particular mapped property. - - - - - When implemented by a class, sets the value of the Property/Field on the object. - - The object to set the Property value in. - The value to set the Property to. - - Thrown when there is a problem setting the value in the target. - - - - - When implemented by a class, gets the name of the Property. - - The name of the Property or . - - This is an optional operation - if it is not implemented then - is an acceptable value to return. - - - - - When implemented by a class, gets the for the set - accessor of the property. - - - This is an optional operation - if the is not - for a property set then is an acceptable value to return. - It is used by the proxies to determine which setter to intercept for the - identifier property. - - - - The Getter implementation for id backrefs. - - - - Gets values of a particular mapped property. - - - - - When implemented by a class, gets the value of the Property/Field from the object. - - The object to get the Property/Field value from. - - The value of the Property for the target. - - - Thrown when there is a problem getting the value from the target. - - - - Get the property value from the given owner instance. - The instance containing the value to be retrieved. - a map of merged persistent instances to detached instances - The session from which this request originated. - The extracted value. - - - - When implemented by a class, gets the that the Property/Field returns. - - The that the Property returns. - - - - When implemented by a class, gets the name of the Property. - - The name of the Property or . - - This is an optional operation - if the is not - for a Property get then is an acceptable value to return. - - - - - When implemented by a class, gets the for the get - accessor of the property. - - - This is an optional operation - if the is not - for a property get then is an acceptable value to return. - It is used by the proxies to determine which getter to intercept for the - identifier property. - - - - - Accesses mapped property values via a get/set pair, which may be nonpublic. - The default (and recommended strategy). - - - - - Create a for the mapped property. - - The to find the Property in. - The name of the mapped Property to get. - - The to use to get the value of the Property from an - instance of the . - - Thrown when a Property specified by the propertyName could not - be found in the . - - - - - Create a for the mapped property. - - The to find the Property in. - The name of the mapped Property to get. - - The to use to set the value of the Property on an - instance of the . - - - Thrown when a Property specified by the propertyName could not - be found in the . - - - - - Helper method to find the Property get. - - The to find the Property in. - The name of the mapped Property to get. - - The for the Property get or - if the Property could not be found. - - - - - Helper method to find the Property set. - - The to find the Property in. - The name of the mapped Property to set. - - The for the Property set or - if the Property could not be found. - - - - - An for a Property get. - - - - - An that can emit IL to get the property value. - - - - - Emit IL to get the property value from the object on top of the stack. - - - - - Initializes a new instance of . - - The that contains the Property get. - The for reflection. - The name of the Property. - - - - Gets the value of the Property from the object. - - The object to get the Property value from. - - The value of the Property for the target. - - - - - Gets the that the Property returns. - - The that the Property returns. - - - - Gets the name of the Property. - - The name of the Property. - - - - Gets the for the Property. - - - The for the Property. - - - - - An for a Property set. - - - - - An that can emit IL to set the property value. - - - - - Emit IL to set the property of an object to the value. The object - is loaded onto the stack first, then the value, then this method - is called. - - - - - Initializes a new instance of . - - The that contains the Property set. - The for reflection. - The name of the mapped Property. - - - - Sets the value of the Property on the object. - - The object to set the Property value in. - The value to set the Property to. - - Thrown when there is a problem setting the value in the target. - - - - - Gets the name of the mapped Property. - - The name of the mapped Property or . - - - - Gets the for the mapped Property. - - The for the mapped Property. - - - - Implementation of for fields that are the - camelCase version of the PropertyName - - - - - Converts the Property's name into a Field name by making the first character - lower case. - - The name of the mapped property. - The name of the Field in CamelCase format. - - - - Implementation of for fields that are prefixed with - an underscore and the PropertyName is changed to camelCase. - - - - - Converts the Property's name into a Field name by making the first character - of the propertyName lowercase and prefixing it with an underscore. - - The name of the mapped property. - The name of the Field in CamelCase format prefixed with an underscore. - - - - Access the mapped property by using a Field to get and set the value. - - - The is useful when you expose getter and setters - for a Property, but they have extra code in them that shouldn't be executed when NHibernate - is setting or getting the values for loads or saves. - - - - - Initializes a new instance of . - - - - - Initializes a new instance of . - - The to use. - - - - Create a to get the value of the mapped Property - through a Field. - - The to find the Property in. - The name of the mapped Property to get. - - The to use to get the value of the Property from an - instance of the . - - Thrown when a Field specified by the propertyName could not - be found in the . - - - - - Create a to set the value of the mapped Property - through a Field. - - The to find the mapped Property in. - The name of the mapped Property to set. - - The to use to set the value of the Property on an - instance of the . - - - Thrown when a Field for the Property specified by the propertyName using the - could not be found in the . - - - - - Helper method to find the Field. - - The to find the Field in. - The name of the Field to find. - - The for the field. - - - Thrown when a field could not be found. - - - - - Converts the mapped property's name into a Field using - the if one exists. - - The name of the Property. - The name of the Field. - - - - Gets the used to convert the name of the - mapped Property in the hbm.xml file to the name of the field in the class. - - The or . - - - - An that uses a Field instead of the Property get. - - - - - Initializes a new instance of . - - The that contains the field to use for the Property get. - The for reflection. - The name of the Field. - - - - Gets the value of the Field from the object. - - The object to get the Field value from. - - The value of the Field for the target. - - - - - Gets the that the Field returns. - - The that the Field returns. - - - - Gets the name of the Property. - - since this is a Field - not a Property. - - - - Gets the for the Property. - - since this is a Field - not a Property. - - - - An that uses a Field instead of the Property set. - - - - - Initializes a new instance of . - - The that contains the Field to use for the Property set. - The for reflection. - The name of the Field. - - - - Sets the value of the Field on the object. - - The object to set the Field value in. - The value to set the Field to. - - Thrown when there is a problem setting the value in the target. - - - - - Gets the name of the Property. - - since this is a Field - not a Property. - - - - Gets the for the Property. - - since this is a Field - not a Property. - - - Represents a "back-reference" to the index of a collection. - - - Constructs a new instance of IndexPropertyAccessor. - The collection role which this back ref references. - The owner entity name. - - - The Setter implementation for index backrefs. - - - The Getter implementation for index backrefs. - - - - Implementation of for fields that are - the PropertyName in all LowerCase characters. - - - - - Converts the Property's name into a Field name by making the all characters - of the propertyName lowercase. - - The name of the mapped property. - The name of the Field in lowercase. - - - - Implementation of for fields that are prefixed with - an underscore and the PropertyName is changed to lower case. - - - - - Converts the Property's name into a Field name by making the all characters - of the propertyName lowercase and prefixing it with an underscore. - - The name of the mapped property. - The name of the Field in lowercase prefixed with an underscore. - - - Used to declare properties not represented at the pojo level - - - A Getter which will always return null. It should not be called anyway. - - - A Setter which will just do nothing. - - - - Access the mapped property through a Property get to get the value - and go directly to the Field to set the value. - - - This is most useful because Classes can provider a get for the Property - that is the <id> but tell NHibernate there is no setter for the Property - so the value should be written directly to the field. - - - - - Initializes a new instance of . - - The to use. - - - - Creates an to get the value from the Property. - - The to find the Property in. - The name of the mapped Property to get. - - The to use to get the value of the Property from an - instance of the . - - Thrown when a Property specified by the propertyName could not - be found in the . - - - - - Create a to set the value of the mapped Property - through a Field. - - The to find the mapped Property in. - The name of the mapped Property to set. - - The to use to set the value of the Property on an - instance of the . - - - Thrown when a Field for the Property specified by the propertyName using the - could not be found in the . - - - - - Converts the Property's name into a Field name by making the first character - of the propertyName uppercase and prefixing it with the letter 'm'. - - The name of the mapped property. - The name of the Field in PascalCase format prefixed with an 'm'. - - - - Implementation of for fields that are prefixed with - an m_ and the first character in PropertyName capitalized. - - - - - Converts the Property's name into a Field name by making the first character - of the propertyName uppercase and prefixing it with the letter 'm' - and an underscore. - - The name of the mapped property. - The name of the Field in PascalCase format prefixed with an 'm' and an underscore. - - - - Implementation of for fields that are prefixed with - an _ and the first character in PropertyName capitalized. - - - - - Converts the Property's name into a Field name by making the first character - of the propertyName uppercase and prefixing it with an underscore. - - The name of the mapped property. - The name of the Field in PascalCase format prefixed with an underscore. - - - - Factory for creating the various PropertyAccessor strategies. - - - - - Initializes the static members in . - - - - - Gets or creates the specified by the type. - - - The specified by the type. - - - The built in ways of accessing the values of Properties in your domain class are: - - - - Access Method - How NHibernate accesses the Mapped Class. - - - property - - The name attribute is the name of the Property. This is the - default implementation. - - - - field - - The name attribute is the name of the field. If you have any Properties - in the Mapped Class those will be bypassed and NHibernate will go straight to the - field. This is a good option if your setters have business rules attached to them - or if you don't want to expose a field through a Getter & Setter. - - - - nosetter - - The name attribute is the name of the Property. NHibernate will use the - Property's get method to retrieve the value and will use the field - to set the value. This is a good option for <id> Properties because this access method - allows users of the Class to get the value of the Id but not set the value. - - - - readonly - - The name attribute is the name of the Property. NHibernate will use the - Property's get method to retrieve the value but will never set the value back in the domain. - This is used for read-only calculated properties with only a get method. - - - - Assembly Qualified Name - - If NHibernate's built in s are not what is needed for your - situation then you are free to build your own. Provide an Assembly Qualified Name so that - NHibernate can call Activator.CreateInstance(AssemblyQualifiedName) to create it. - - - - - In order for the nosetter to know the name of the field to access NHibernate needs to know - what the naming strategy is. The following naming strategies are built into NHibernate: - - - - Naming Strategy - How NHibernate converts the value of the name attribute to a field name. - - - camelcase - - The name attribute should be changed to CamelCase to find the field. - <property name="Foo" ... > finds a field foo. - - - - camelcase-underscore - - The name attribute should be changed to CamelCase and prefixed with - an underscore to find the field. - <property name="Foo" ... > finds a field _foo. - - - - pascalcase-underscore - - The name attribute should be prefixed with an underscore - to find the field. - <property name="Foo" ... > finds a field _Foo. - - - - pascalcase-m-underscore - - The name attribute should be prefixed with an 'm' and underscore - to find the field. - <property name="Foo" ... > finds a field m_Foo. - - - - pascalcase-m - - The name attribute should be prefixed with an 'm'. - <property name="Foo" ... > finds a field mFoo. - - - - lowercase - - The name attribute should be changed to lowercase to find the field. - <property name="FooBar" ... > finds a field foobar. - - - - lowercase-underscore - - The name attribute should be changed to lowercase and prefixed with - and underscore to find the field. - <property name="FooBar" ... > finds a field _foobar. - - - - - The naming strategy can also be appended at the end of the field access method. Where - this could be useful is a scenario where you do expose a get and set method in the Domain Class - but NHibernate should only use the fields. - - - With a naming strategy and a get/set for the Property available the user of the Domain Class - could write an Hql statement from Foo as foo where foo.SomeProperty = 'a'. If no naming - strategy was specified the Hql statement would have to be from Foo as foo where foo._someProperty - (assuming CamelCase with an underscore field naming strategy is used). - - - - - Retrieves a PropertyAccessor instance based on the given property definition and entity mode. - The property for which to retrieve an accessor. - The mode for the resulting entity. - An appropriate accessor. - - - - Access the mapped property through a Property get to get the value - and do nothing to set the value. - - - This is useful to allow calculated properties in the domain that will never - be recovered from the DB but can be used for querying. - - - - - Initializes a new instance of . - - - - - Creates an to get the value from the Property. - - The to find the Property in. - The name of the mapped Property to get. - - The to use to get the value of the Property from an - instance of the . - - Thrown when a Property specified by the propertyName could not - be found in the . - - - - - Create a to do nothing when trying to - se the value of the mapped Property - - The to find the mapped Property in. - The name of the mapped Property to set. - - An instance of . - - - - - Responsible for accessing property values represented as a XmlElement - or XmlAttribute. - - - - For nodes like "@bar" - - - Defines the strategy for getting property values out of a dom4j Node. - - - Get the declared type - - - Optional operation (return null) - - - Optional operation (return null) - - - For nodes like "@bar" - - - Optional operation (return null) - - - Optional operation (return null) - - - For nodes like "foo/@bar" - - - For nodes like "foo/@bar" - - - For nodes like "foo" - - - For nodes like "foo" - - - For nodes like "." - - - For nodes like "." - - - Lazy initializer for "dynamic-map" entity representations. - - - - Provides the base functionality to Handle Member calls into a dynamically - generated NHibernate Proxy. - - - This could be an extension point later if the .net framework ever gets a Proxy - class that is similar to the java.lang.reflect.Proxy or if a library similar - to cglib was made in .net. - - - - - Perform an ImmediateLoad of the actual object for the Proxy. - - - Thrown when the Proxy has no Session or the Session is closed or disconnected. - - - - - Return the Underlying Persistent Object, initializing if necessary. - - The Persistent Object this proxy is Proxying. - - - - Return the Underlying Persistent Object in a given , or null. - - The Session to get the object from. - The Persistent Object this proxy is Proxying, or . - - - - - - Get the entity name - - - - - - - - - - - - - If this is returned by Invoke then the subclass needs to Invoke the - method call against the object that is being proxied. - - - - - Create a LazyInitializer to handle all of the Methods/Properties that are called - on the Proxy. - - The entityName - The Id of the Object we are Proxying. - The ISession this Proxy is in. - - - - Perform an ImmediateLoad of the actual object for the Proxy. - - - Thrown when the Proxy has no Session or the Session is closed or disconnected. - - - - - Return the Underlying Persistent Object, initializing if necessary. - - The Persistent Object this proxy is Proxying. - - - - Return the Underlying Persistent Object in a given , or null. - - The Session to get the object from. - The Persistent Object this proxy is Proxying, or . - - - - - - - - - Proxy for "dynamic-map" entity representations. - - - - A marker interface so NHibernate can know if it is dealing with - an object that is a Proxy. - - - - This interface should not be implemented by anything other than - the Dynamically generated Proxy. If it is implemented by a class then - NHibernate will think that class is a Proxy and will not work. - - - It has to be public scope because - the Proxies are created in a separate DLL than NHibernate. - - - - - Get the underlying lazy initialization handler. - - - Contract for run-time, proxy-based lazy initialization proxies. - - - Called immediately after instantiation of this factory. - - The name of the entity for which this factory should generate proxies. - - - The entity class for which to generate proxies; not always the same as the entityName. - - - The interfaces to expose in the generated proxy; - is already included in this collection. - - - Reference to the identifier getter method; invocation on this method should not force initialization - - - Reference to the identifier setter method; invocation on this method should not force initialization - - - For composite identifier types, a reference to - the type of the identifier - property; again accessing the id should generally not cause - initialization - but need to bear in mind key-many-to-one - mappings. - - Indicates a problem completing post - - Essentially equivalent to constructor injection, but contracted - here via interface. - - - - - Create a new proxy - - The id value for the proxy to be generated. - The session to which the generated proxy will be associated. - The generated proxy. - Indicates problems generating requested proxy. - - - Lazy initializer for POCOs - - - - Adds all of the information into the SerializationInfo that is needed to - reconstruct the proxy during deserialization or to replace the proxy - with the instantiated target. - - - This will only be called if the Dynamic Proxy generator does not handle serialization - itself or delegates calls to the method GetObjectData to the LazyInitializer. - - - - - Invokes the method if this is something that the LazyInitializer can handle - without the underlying proxied object being instantiated. - - The name of the method/property to Invoke. - The arguments to pass the method/property. - The proxy object that the method is being invoked on. - - The result of the Invoke if the underlying proxied object is not needed. If the - underlying proxied object is needed then it returns the result - which indicates that the Proxy will need to forward to the real implementation. - - - - - Convenient common implementation for ProxyFactory - - - - - Proxeability validator. - - - - - Validates whether can be specified as the base class - (or an interface) for a dynamically-generated proxy. - - The type to validate. - - A collection of errors messages, if any, or if none were found. - - - When the configuration property "use_proxy_validator" is set to true(default), the result of this method - is used to throw a detailed exception about the proxeability of the given . - - - - - Validate if a single method can be intercepted by proxy. - - The given method to check. - if the method can be intercepted by proxy. - otherwise. - - - This method can be used internally by the and is used - by to log errors when - a property accessor can't be intercepted by proxy. - The validation of property accessors is fairly enough if you ecampsulate each property. - - - - - Validates whether can be specified as the base class - (or an interface) for a dynamically-generated proxy. - - The type to validate. - - A collection of errors messages, if any, or if none were found. - - - - - NHibernateProxyHelper provides convenience methods for working with - objects that might be instances of Classes or the Proxied version of - the Class. - - - - - Get the class of an instance or the underlying class of a proxy (without initializing the proxy!). - It is almost always better to use the entity name! - - The object to get the type of. - The Underlying Type for the object regardless of if it is a Proxy. - - - - Get the true, underlying class of a proxied persistent class. This operation - will NOT initialize the proxy and thus may return an incorrect result. - - a persistable object or proxy - guessed class of the instance - - This method is approximate match for Session.bestGuessEntityName in H3.2 - - - - - Aliases tables and fields for Sql Statements. - - - Several methods of this class take an additional - parameter, while their Java counterparts - do not. The dialect is used to correctly quote and unquote identifiers. - Java versions do the quoting and unquoting themselves and fail to - consider dialect-specific rules, such as escaping closing brackets in - identifiers on MS SQL 2000. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - An ANSI SQL CASE expression. - case when ... then ... end as ... - - This class looks StringHelper.SqlParameter safe... - - - Abstract SQL case fragment renderer - - - - An ANSI-style Join. - - - - - - - - Sets the op - - The op to set - - - - - - - - - - - - - - - - - - - - - - - - - - - - - An Oracle-style DECODE function. - - decode(pkvalue, key1, 1, key2, 2, ..., 0) - - - - - - - - Represents an SQL for update of ... nowait statement - - - - - An Informix-style (theta) Join - - - - - Represents an ... in (...) expression - - - - - Add a value to the value list. Value may be a string, - a , or one of special values - or . - - - - - - - - An Oracle-style (theta) Join - - - - - This method is a bit of a hack, and assumes - that the column on the "right" side of the - join appears on the "left" side of the - operator, which is extremely weird if this - was a normal join condition, but is natural - for a filter. - - - - - A placeholder for an ADO.NET parameter in an . - - - - - We need to know what the position of the parameter was in a query - before we rearranged the query. - This is used only by dialects that rearrange the query, unfortunately, - the MS SQL 2005 dialect have to re shuffle the query (and ruin positional parameter - support) because the SQL 2005 and 2008 SQL dialects have a completely broken - support for paging, which is just a tad less important than SELECT. - See NH-1528 - - - - - Generates an array of parameters for the given SqlTypes. - - The number of parameters to generate. - An array of objects - - - - Determines whether this instance and the specified object - are of the same type and have the same values. - - An object to compare to this instance. - - if the object equals the current instance. - - - - - Gets a hash code for the parameter. - - - An value for the hash code. - - - - - Used as a placeholder when parsing HQL or SQL queries. - - - - - Summary description for QueryJoinFragment. - - - - - Summary description for QuerySelect. - - - - - Certain databases don't like spaces around these operators. - - - This needs to contain both a plain string and a - SqlString version of the operator because the portions in - the WHERE clause will come in as SqlStrings since there - might be parameters, other portions of the clause come in - as strings since there are no parameters. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Adds a string containing a valid "order by" sql statement - to this QuerySelect - - The "order by" sql statement. - - - - - - - - - - - - - - - - - Represents part of an SQL SELECT clause - - - - - Equivalent to ToSqlStringFragment. - - - - In H3, it is called ToFragmentString(). It appears to be - functionally equivalent as ToSqlStringFragment() here. - - - - - The base class for all of the SqlBuilders. - - - - - Converts the ColumnNames and ColumnValues to a WhereFragment - - The names of the Columns to Add to the WhereFragment - A SqlString that contains the WhereFragment - This just calls the overloaded ToWhereFragment() with the operator as " = " and the tableAlias null. - - - - Converts the ColumnNames and ColumnValues to a WhereFragment - - The Alias for the Table. - The names of the Columns to Add to the WhereFragment - A SqlString that contains the WhereFragment - This defaults the op to " = " - - - - Converts the ColumnNames and ColumnValues to a WhereFragment - - The names of the Columns to Add to the WhereFragment - The operator to use between the names & values. For example " = " or "!=" - A SqlString that contains the WhereFragment - - - - Converts the ColumnNames and ColumnValues to a WhereFragment - - The Alias for the Table. - The names of the Columns to Add to the WhereFragment - The operator to use between the names & values. For example " = " or "!=" - A SqlString that contains the WhereFragment - - - - A class that builds an DELETE sql statement. - - - - - Sets the IdentityColumn for the DELETE sql to use. - - An array of the column names for the Property - The IType of the Identity Property. - The SqlDeleteBuilder. - - - - Sets the VersionColumn for the DELETE sql to use. - - An array of the column names for the Property - The IVersionType of the Version Property. - The SqlDeleteBuilder. - - - - Adds the columns for the Type to the WhereFragment - - The names of the columns to add. - The IType of the property. - The operator to put between the column name and value. - The SqlDeleteBuilder - - - - Adds a string to the WhereFragement - - A well formed sql statement with no parameters. - The SqlDeleteBuilder - - - - Builds a SELECT SQL statement. - - - - - Sets the text that should appear after the FROM - - The fromClause to set - The SqlSelectBuilder - - - - Sets the text that should appear after the FROM - - The name of the Table to get the data from - The Alias to use for the table name. - The SqlSelectBuilder - - - - Sets the text that should appear after the FROM - - The fromClause in a SqlString - The SqlSelectBuilder - - - - Sets the text that should appear after the ORDER BY. - - The orderByClause to set - The SqlSelectBuilder - - - - Sets the text that should appear after the GROUP BY. - - The groupByClause to set - The SqlSelectBuilder - - - - Sets the SqlString for the OUTER JOINs. - - - All of the Sql needs to be included in the SELECT. No OUTER JOINS will automatically be - added. - - The outerJoinsAfterFrom to set - The outerJoinsAfterWhere to set - The SqlSelectBuilder - - - - Sets the text for the SELECT - - The selectClause to set - The SqlSelectBuilder - - - - Sets the text for the SELECT - - The selectClause to set - The SqlSelectBuilder - - - - Sets the criteria to use for the WHERE. It joins all of the columnNames together with an AND. - - - The names of the columns - The Hibernate Type - The SqlSelectBuilder - - - - Sets the prebuilt SqlString to the Where clause - - The SqlString that contains the sql and parameters to add to the WHERE - This SqlSelectBuilder - - - - Sets the criteria to use for the WHERE. It joins all of the columnNames together with an AND. - - - The names of the columns - The Hibernate Type - The SqlSelectBuilder - - - - Sets the prebuilt SqlString to the Having clause - - The SqlString that contains the sql and parameters to add to the HAVING - This SqlSelectBuilder - - - - ToSqlString() is named ToStatementString() in H3 - - - - - - - - - Summary description for SqlSimpleSelectBuilder. - - - - - - - - - - - - Adds a columnName to the SELECT fragment. - - The name of the column to add. - The SqlSimpleSelectBuilder - - - - Adds a columnName and its Alias to the SELECT fragment. - - The name of the column to add. - The alias to use for the column - The SqlSimpleSelectBuilder - - - - Adds an array of columnNames to the SELECT fragment. - - The names of the columns to add. - The SqlSimpleSelectBuilder - - - - Adds an array of columnNames with their Aliases to the SELECT fragment. - - The names of the columns to add. - The aliases to use for the columns - The SqlSimpleSelectBuilder - - - - Gets the Alias that should be used for the column - - The name of the column to get the Alias for. - The Alias if one exists, null otherwise - - - - Sets the IdentityColumn for the SELECT sql to use. - - An array of the column names for the Property - The IType of the Identity Property. - The SqlSimpleSelectBuilder. - - - - Sets the VersionColumn for the SELECT sql to use. - - An array of the column names for the Property - The IVersionType of the Version Property. - The SqlSimpleSelectBuilder. - - - - Set the Order By fragment of the Select Command - - The OrderBy fragment. It should include the SQL "ORDER BY" - The SqlSimpleSelectBuilder - - - - Adds the columns for the Type to the WhereFragment - - The names of the columns to add. - The IType of the property. - The operator to put between the column name and value. - The SqlSimpleSelectBuilder - - - - - - - This is a non-modifiable SQL statement that is ready to be prepared - and sent to the Database for execution. - - - - If you need to modify this object pass it to a and - get a new object back from it. - - - - - - Appends the SqlString parameter to the end of the current SqlString to create a - new SqlString object. - - The SqlString to append. - A new SqlString object. - - A SqlString object is immutable so this returns a new SqlString. If multiple Appends - are called it is better to use the SqlStringBuilder. - - - - - Appends the string parameter to the end of the current SqlString to create a - new SqlString object. - - The string to append. - A new SqlString object. - - A SqlString object is immutable so this returns a new SqlString. If multiple Appends - are called it is better to use the SqlStringBuilder. - - - - - Compacts the SqlString into the fewest parts possible. - - A new SqlString. - - Combines all SqlParts that are strings and next to each other into - one SqlPart. - - - - - Determines whether the end of this instance matches the specified String. - - A string to seek at the end. - if the end of this instance matches value; otherwise, - - - - Replaces all occurrences of a specified in this instance, - with another specified . - - A String to be replaced. - A String to replace all occurrences of oldValue. - - A new SqlString with oldValue replaced by the newValue. The new SqlString is - in the compacted form. - - - - - Determines whether the beginning of this SqlString matches the specified System.String, - using case-insensitive comparison. - - The System.String to seek - true if the SqlString starts with the value. - - - - Retrieves a substring from this instance. The substring starts at a specified character position. - - The starting character position of a substring in this instance. - - A new SqlString to the substring that begins at startIndex in this instance. - - - If the startIndex is greater than the length of the SqlString then is returned. - - - - - Returns the index of the first occurrence of , case-insensitive. - - Text to look for in the . Must be in lower - case. - - The text must be located entirely in a string part of the . - Searching for "a ? b" in an consisting of - "a ", Parameter, " b" will result in no matches. - - The index of the first occurrence of , or -1 - if not found. - - - - Removes all occurrences of white space characters from the beginning and end of this instance. - - - A new SqlString equivalent to this instance after white space characters - are removed from the beginning and end. - - - - - - - - - - - - - - - Returns the SqlString in a string where it looks like - SELECT col1, col2 FROM table WHERE col1 = ? - - - The question mark is used as the indicator of a parameter because at - this point we are not using the specific provider so we don't know - how that provider wants our parameters formatted. - - A provider-neutral version of the CommandText - - - - Returns substring of this SqlString starting with the specified - . If the text is not found, returns an - empty, not-null SqlString. - - - The method performs case-insensitive comparison, so the - passed should be in lower case. - - - - - Parse SQL in and create a SqlString representing it. - - - Parameter marks in single quotes will be correctly skipped, but otherwise the - lexer is very simple and will not parse double quotes or escape sequences - correctly, for example. - - - - - Gets the number of SqlParts contained in this SqlString. - - The number of SqlParts contained in this SqlString. - - - - The SqlStringBuilder is used to construct a SqlString. - - - - The SqlString is a nonmutable class so it can't have sql parts added - to it. Instead this class should be used to generate a new SqlString. - The SqlStringBuilder is to SqlString what the StringBuilder is to - a String. - - - This is different from the original version of SqlString because this does not - hold the sql string in the form of "column1=@column1" instead it uses an array to - build the sql statement such that - object[0] = "column1=" - object[1] = ref to column1 parameter - - - What this allows us to do is to delay the generating of the parameter for the sql - until the very end - making testing dialect indifferent. Right now all of our test - to make sure the correct sql is getting built are specific to MsSql2000Dialect. - - - - - - Create an empty StringBuilder with the default capacity. - - - - - Create a StringBuilder with a specific capacity. - - The number of parts expected. - - - - Create a StringBuilder to modify the SqlString - - The SqlString to modify. - - - - Adds the preformatted sql to the SqlString that is being built. - - The string to add. - This SqlStringBuilder - - - - Adds the Parameter to the SqlString that is being built. - The correct operator should be added before the Add(Parameter) is called - because there will be no operator ( such as "=" ) placed between the last Add call - and this Add call. - - The Parameter to add. - This SqlStringBuilder - - - - Attempts to discover what type of object this is and calls the appropriate - method. - - The part to add when it is not known if it is a Parameter, String, or SqlString. - This SqlStringBuilder. - Thrown when the part is not a Parameter, String, or SqlString. - - - - Adds an existing SqlString to this SqlStringBuilder. It does NOT add any - prefix, postfix, operator, or wrap around this. It is equivalent to just - adding a string. - - The SqlString to add to this SqlStringBuilder - This SqlStringBuilder - This calls the overloaded Add(sqlString, null, null, null, false) - - - - Adds an existing SqlString to this SqlStringBuilder - - The SqlString to add to this SqlStringBuilder - String to put at the beginning of the combined SqlString. - How these Statements should be junctioned "AND" or "OR" - String to put at the end of the combined SqlString. - This SqlStringBuilder - - This calls the overloaded Add method with an array of SqlStrings and wrapStatment=false - so it will not be wrapped with a "(" and ")" - - - - - Adds existing SqlStrings to this SqlStringBuilder - - The SqlStrings to combine. - String to put at the beginning of the combined SqlString. - How these SqlStrings should be junctioned "AND" or "OR" - String to put at the end of the combined SqlStrings. - This SqlStringBuilder - This calls the overloaded Add method with wrapStatement=true - - - - Adds existing SqlStrings to this SqlStringBuilder - - The SqlStrings to combine. - String to put at the beginning of the combined SqlStrings. - How these SqlStrings should be junctioned "AND" or "OR" - String to put at the end of the combined SqlStrings. - Wrap each SqlStrings with "(" and ")" - This SqlStringBuilder - - - - Insert a string containing sql into the SqlStringBuilder at the specified index. - - The zero-based index at which the sql should be inserted. - The string containing sql to insert. - This SqlStringBuilder - - - - Insert a Parameter into the SqlStringBuilder at the specified index. - - The zero-based index at which the Parameter should be inserted. - The Parameter to insert. - This SqlStringBuilder - - - - Removes the string or Parameter at the specified index. - - The zero-based index of the item to remove. - This SqlStringBuilder - - - - Converts the mutable SqlStringBuilder into the immutable SqlString. - - The SqlString that was built. - - - - Gets the number of SqlParts in this SqlStringBuilder. - - - The number of SqlParts in this SqlStringBuilder. - - - - - Gets or Sets the element at the index - - Returns a string or Parameter. - - - - - A class that builds an UPDATE sql statement. - - - - - Add a column with a specific value to the UPDATE sql - - The name of the Column to add. - The value to set for the column. - The NHibernateType to use to convert the value to a sql string. - The SqlUpdateBuilder. - - - - Add a column with a specific value to the UPDATE sql - - The name of the Column to add. - A valid sql string to set as the value of the column. - The SqlUpdateBuilder. - - - - Adds columns with a specific value to the UPDATE sql - - The names of the Columns to add. - A valid sql string to set as the value of the column. This value is assigned to each column. - The SqlUpdateBuilder. - - - - Adds the Property's columns to the UPDATE sql - - An array of the column names for the Property - The IType of the property. - The SqlUpdateBuilder. - - - - Adds the Property's updatable columns to the UPDATE sql - - An array of the column names for the Property - An array of updatable column flags. If this array is null, all supplied columns are considered updatable. - The IType of the property. - The SqlUpdateBuilder. - - - - Sets the IdentityColumn for the UPDATE sql to use. - - An array of the column names for the Property - The IType of the Identity Property. - The SqlUpdateBuilder. - - - - Sets the VersionColumn for the UPDATE sql to use. - - An array of the column names for the Property - The IVersionType of the Version Property. - The SqlUpdateBuilder. - - - - Adds the columns for the Type to the WhereFragment - - The names of the columns to add. - The IType of the property. - The operator to put between the column name and value. - The SqlUpdateBuilder - - - - Adds a string to the WhereFragment - - A well formed sql string with no parameters. - The SqlUpdateBuilder - - - - - - - Given an SQL SELECT statement, parse it to extract clauses starting with - FROM, up to and not including ORDER BY (known collectively - as a subselect clause). - - - - - Contains the subselect clause as it is being built. - - - - - Initializes a new instance of the class. - - The parts of an to extract the subselect clause from. - - - - Looks for a FROM clause in the - and adds the clause to the result if found. - - A or a . - if the part contained a FROM clause, - otherwise. - - - - Returns the subselect clause of the statement - being processed. - - An containing - the subselect clause of the original SELECT - statement. - - - - Allows us to construct SQL WHERE fragments - - - - - Describes the details of a with the - information required to to generate an . - - - This can store the length of the string that the can hold. - If no value is provided for the length then the Driver is responsible for - setting the properties on the correctly. - - - - - This is the base class that adds information to the - for the and - to use. - - -

            - The uses the SqlType to get enough - information to create an . -

            -

            - The use the SqlType to convert the - to the appropriate sql type for SchemaExport. -

            -
            -
            - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The length of the string the should hold. - - - - Describes the details of a with the - information required to generate an . - - - This can store the length of the string that the can hold. - If no value is provided for the length then the Driver is responsible for - setting the properties on the correctly. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The length of the string the should hold. - - - - Describes the details of a that is stored in - a BLOB column with the information required to generate - an . - - -

            - This can store the length of the binary data that the can hold. - If no value is provided for the length then the Driver is responsible for - setting the properties on the correctly. -

            -

            - This is only needed by DataProviders (SqlClient) that need to specify a Size for the - IDbDataParameter. Most DataProvider(Oralce) don't need to set the Size so a - BinarySqlType would work just fine. -

            -
            -
            - - - Describes the details of a with the - information required to to generate an . - - - This can store the binary data that the can hold. - If no value is provided for the length then the Driver is responsible for - setting the properties on the correctly. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The length of the binary data the should hold - - - - SqlTypeFactory provides Singleton access to the SqlTypes. - - - - - Describes the details of a that is stored in - a CLOB column with the information required to generate - an . - - -

            - This can store the length of the binary data that the can hold. - If no value is provided for the length then the Driver is responsible for - setting the properties on the correctly. -

            -

            - This is only needed by DataProviders (SqlClient) that need to specify a Size for the - IDbDataParameter. Most DataProvider(Oralce) don't need to set the Size so a - StringSqlType would work just fine. -

            -
            -
            - - - Describes the details of a with the - information required to generate an . - - - This can store the length of the string that the can hold. - If no value is provided for the length then the Driver is responsible for - setting the properties on the correctly. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The length of the string the should hold. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The length of the string the should hold. - - - - Describes the details of a with the - information required to to generate an . - - - This can store the length of the string that the can hold. - If no value is provided for the length then the Driver is responsible for - setting the properties on the correctly. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The length of the string the should hold. - - - - Statistics for a particular "category" (a named entity, - collection role, second level cache region or query). - - - - Collection related statistics - - - Entity related statistics - - - - Information about the first-level (session) cache for a particular session instance - - - - Get the number of entity instances associated with the session - - - Get the number of collection instances associated with the session - - - Get the set of all EntityKeys. - - - Get the set of all CollectionKeys. - - - - Statistics for a particular . - Beware of metrics, they are dependent of the precision: - - - - Reset all statistics - - - Find entity statistics per name - entity name - EntityStatistics object - - - Get collection statistics per role - collection role - CollectionStatistics - - - Second level cache statistics per region - region name - SecondLevelCacheStatistics - - - Query statistics from query string (HQL or SQL) - query string - QueryStatistics - - - log in info level the main statistics - - - Global number of entity deletes - - - Global number of entity inserts - - - Global number of entity loads - - - Global number of entity fetchs - - - Global number of entity updates - - - Global number of executed queries - - - The of the slowest query. - - - The query string for the slowest query. - - - The global number of cached queries successfully retrieved from cache - - - The global number of cached queries *not* found in cache - - - The global number of cacheable queries put in cache - - - Get the global number of flush executed by sessions (either implicit or explicit) - - - - Get the global number of connections asked by the sessions - (the actual number of connections used may be much smaller depending - whether you use a connection pool or not) - - - - Global number of cacheable entities/collections successfully retrieved from the cache - - - Global number of cacheable entities/collections not found in the cache and loaded from the database. - - - Global number of cacheable entities/collections put in the cache - - - Global number of sessions closed - - - Global number of sessions opened - - - Global number of collections loaded - - - Global number of collections fetched - - - Global number of collections updated - - - Global number of collections removed - - - Global number of collections recreated - - - Start time - - - Enable/Disable statistics logs (this is a dynamic parameter) - - - All executed query strings - - - The names of all entities - - - The names of all collection roles - - - Get all second-level cache region names - - - The number of transactions we know to have been successful - - - The number of transactions we know to have completed - - - The number of prepared statements that were acquired - - - The number of prepared statements that were released - - - The number of StaleObjectStateExceptions that occurred - - - - The OperationThreshold to a value greater than to enable logging of long running operations. - - Operations that exceed the level will be logged. - - - Statistics SPI for the NHibernate core - - - Query statistics (HQL and SQL) - Note that for a cached query, the cache miss is equals to the db count - - - Add statistics report of a DB query - rows count returned - time taken - - - Second level cache statistics of a specific region - - - - Not ported yet - - - - - Not ported yet - - - - - Not ported yet - - - - - Not ported yet - - - - - Contract for delegates responsible for managing connection used by the hbm2ddl tools. - - - - - Prepare the helper for use. - - - - - Release any resources held by this helper. - - - - - Get a reference to the connection we are using. - - - - - A implementation based on an internally - built and managed . - - - - - Generates ddl to export table schema for a configured Configuration to the database - - - This Class can be used directly or the command line wrapper NHibernate.Tool.hbm2ddl.exe can be - used when a dll can not be directly used. - - - - - Create a schema exported for a given Configuration - - The NHibernate Configuration to generate the schema from. - - - - Create a schema exporter for the given Configuration, with the given - database connection properties - - The NHibernate Configuration to generate the schema from. - The Properties to use when connecting to the Database. - - - - Set the output filename. The generated script will be written to this file - - The name of the file to output the ddl to. - The SchemaExport object. - - - - Set the end of statement delimiter - - The end of statement delimiter. - The SchemaExport object. - - - - Run the schema creation script - - if the ddl should be outputted in the Console. - if the ddl should be executed against the Database. - - This is a convenience method that calls and sets - the justDrop parameter to false. - - - - - Run the drop schema script - - if the ddl should be outputted in the Console. - if the ddl should be executed against the Database. - - This is a convenience method that calls and sets - the justDrop parameter to true. - - - - - Executes the Export of the Schema in the given connection - - if the ddl should be outputted in the Console. - if the ddl should be executed against the Database. - if only the ddl to drop the Database objects should be executed. - - The connection to use when executing the commands when export is . - Must be an opened connection. The method doesn't close the connection. - - The writer used to output the generated schema - - This method allows for both the drop and create ddl script to be executed. - This overload is provided mainly to enable use of in memory databases. - It does NOT close the given connection! - - - - - Executes the Export of the Schema. - - if the ddl should be outputted in the Console. - if the ddl should be executed against the Database. - if only the ddl to drop the Database objects should be executed. - - This method allows for both the drop and create ddl script to be executed. - - - - - Execute the schema updates - - - - - Execute the schema updates - - The action to write the each schema line. - Commit the script to DB - - - - Returns a List of all Exceptions which occured during the export. - - - - - Perform the validations. - - - - A implementation based on an explicitly supplied - connection. - - - - - A implementation based on a provided - . Essentially, ensures that the connection - gets cleaned up, but that the provider itself remains usable since it - was externally provided to us. - - - - - An abstract factory for instances. - Concrete implementations are specified by transaction.factory_class - configuration property. - - Implementors must be threadsafe and should declare a public default constructor. - - - - - - Configure from the given properties - - - - - - Create a new transaction and return it without starting it. - - - - - This is used as a marker interface for the different - transaction context required for each session - - - - - Wraps an ADO.NET to implement - the interface. - - - - - Allows the application to define units of work, while maintaining abstraction from the - underlying transaction implementation - - - A transaction is associated with a ISession and is usually instanciated by a call to - ISession.BeginTransaction(). A single session might span multiple transactions since - the notion of a session (a conversation between the application and the datastore) is of - coarser granularity than the notion of a transaction. However, it is intended that there be - at most one uncommitted ITransaction associated with a particular ISession - at a time. Implementors are not intended to be threadsafe. - - - - - Begin the transaction with the default isolation level. - - - - - Begin the transaction with the specified isolation level. - - Isolation level of the transaction - - - - Flush the associated ISession and end the unit of work. - - - This method will commit the underlying transaction if and only if the transaction - was initiated by this object. - - - - - Force the underlying transaction to roll back. - - - - - Enlist the in the current Transaction. - - The to enlist. - - It is okay for this to be a no op implementation. - - - - - Register a user synchronization callback for this transaction. - - The callback to register. - - - - Is the transaction in progress - - - - - Was the transaction rolled back or set to rollback only? - - - - - Was the transaction successfully committed? - - - This method could return even after successful invocation of Commit() - - - - - Initializes a new instance of the class. - - The the Transaction is for. - - - - Enlist the in the current . - - The to enlist in this Transaction. - - - This takes care of making sure the 's Transaction property - contains the correct or if there is no - Transaction for the ISession - ie BeginTransaction() not called. - - - This method may be called even when the transaction is disposed. - - - - - - Begins the on the - used by the . - - - Thrown if there is any problems encountered while trying to create - the . - - - - - Commits the by flushing the - and committing the . - - - Thrown if there is any exception while trying to call Commit() on - the underlying . - - - - - Rolls back the by calling the method Rollback - on the underlying . - - - Thrown if there is any exception while trying to call Rollback() on - the underlying . - - - - - A flag to indicate if Disose() has been called. - - - - - Finalizer that ensures the object is correctly disposed of. - - - - - Takes care of freeing the managed and unmanaged resources that - this class is responsible for. - - - - - Takes care of freeing the managed and unmanaged resources that - this class is responsible for. - - Indicates if this AdoTransaction is being Disposed of or Finalized. - - If this AdoTransaction is being Finalized (isDisposing==false) then make sure not - to call any methods that could potentially bring this AdoTransaction back to life. - - - - - Gets a indicating if the transaction was rolled back. - - - if the had Rollback called - without any exceptions. - - - - - Gets a indicating if the transaction was committed. - - - if the had Commit called - without any exceptions. - - - - - A mimic to the javax.transaction.Synchronization callback to enable - - - - - Implementors define a strategy for transforming criteria query - results into the actual application-visible query result list. - - - - - - - - - - - - - - - - - - - - - Result transformer that allows to transform a result to - a user specified class which will be populated via setter - methods or fields matching the alias names. - - - - IList resultWithAliasedBean = s.CreateCriteria(typeof(Enrollment)) - .CreateAlias("Student", "st") - .CreateAlias("Course", "co") - .SetProjection( Projections.ProjectionList() - .Add( Projections.Property("co.Description"), "CourseDescription" ) - ) - .SetResultTransformer( new AliasToBeanResultTransformer(typeof(StudentDTO)) ) - .List(); - - StudentDTO dto = (StudentDTO)resultWithAliasedBean[0]; - - - - - - Tranforms each result row from a tuple into a , such that what - you end up with is a of . - - - - - Each row of results is a map () from alias to values/entities - - - - Each row of results is a - - - - Creates a resulttransformer that will inject aliased values into instances - of via property methods or fields. - - - - Support for tuplizers relating to components. - - - - Defines further responsibilities regarding tuplization based on - a mapped components. - - - ComponentTuplizer implementations should have the following constructor signature: - (org.hibernate.mapping.Component) - - - - - A tuplizer defines the contract for things which know how to manage - a particular representation of a piece of data, given that - representation's (the entity-mode - essentially defining which representation). - - - If that given piece of data is thought of as a data structure, then a tuplizer - is the thing which knows how to: - - create such a data structure appropriately - extract values from and inject values into such a data structure - - - For example, a given piece of data might be represented as a POCO class. - Here, it's representation and entity-mode is POCO. Well a tuplizer for POCO - entity-modes would know how to: - - create the data structure by calling the POCO's constructor - extract and inject values through getters/setter, or by direct field access, etc - - - That same piece of data might also be represented as a DOM structure, using - the tuplizer associated with the XML entity-mode, which would generate instances - of as the data structure and know how to access the - values as either nested s or as s. - - - - - - - Extract the current values contained on the given entity. - - The entity from which to extract values. - The current property values. - HibernateException - - - Inject the given values into the given entity. - The entity. - The values to be injected. - - - Extract the value of a particular property from the given entity. - The entity from which to extract the property value. - The index of the property for which to extract the value. - The current value of the given property on the given entity. - - - Generate a new, empty entity. - The new, empty entity instance. - - - - Is the given object considered an instance of the the entity (acconting - for entity-mode) managed by this tuplizer. - - The object to be checked. - True if the object is considered as an instance of this entity within the given mode. - - - - Return the pojo class managed by this tuplizer. - - The persistent class. - - Need to determine how to best handle this for the Tuplizers for EntityModes - other than POCO. - - - - Retrieve the current value of the parent property. - - The component instance from which to extract the parent property value. - - The current value of the parent property. - - - Set the value of the parent property. - The component instance on which to set the parent. - The parent to be set on the component. - The current session factory. - - - Does the component managed by this tuuplizer contain a parent property? - True if the component does contain a parent property; false otherwise. - - - This method does not populate the component parent - - - - Handles mapping s to ComponentTuplizers. -

            - Most of the handling is really in the super class; here we just create - the tuplizers and add them to the superclass -

            -
            - - Centralizes handling of to mappings. - - - Given a supposed instance of an entity/component, guess its entity mode. - The supposed instance of the entity/component. - The guessed entity mode. - - - - Locate the contained tuplizer responsible for the given entity-mode. If - no such tuplizer is defined on this mapping, then return null. - - The entity-mode for which the caller wants a tuplizer. - The tuplizer, or null if not found. - - - Locate the tuplizer contained within this mapping which is responsible - for the given entity-mode. If no such tuplizer is defined on this - mapping, then an exception is thrown. - - - The entity-mode for which the caller wants a tuplizer. - - The tuplizer. - - HibernateException Unable to locate the requested tuplizer. - - - Centralizes metamodel information about a component. - - - - A specific to the dynamic-map entity mode. - - - - - A specific to the POCO entity mode. - - - - Support for tuplizers relating to entities. - - - - Defines further responsibilities regarding tuplization based on a mapped entity. - - - EntityTuplizer implementations should have the following constructor signature: - (, ) - - - - Create an entity instance initialized with the given identifier. - The identifier value for the entity to be instantiated. - The instantiated entity. - - - Extract the identifier value from the given entity. - The entity from which to extract the identifier value. - The identifier value. - - - - Inject the identifier value into the given entity. - - The entity to inject with the identifier value. - The value to be injected as the identifier. - Has no effect if the entity does not define an identifier property - - - - Inject the given identifier and version into the entity, in order to - "roll back" to their original values. - - - The identifier value to inject into the entity. - The version value to inject into the entity. - - - Extract the value of the version property from the given entity. - The entity from which to extract the version value. - The value of the version property, or null if not versioned. - - - Inject the value of a particular property. - The entity into which to inject the value. - The property's index. - The property value to inject. - - - Inject the value of a particular property. - The entity into which to inject the value. - The name of the property. - The property value to inject. - - - Extract the values of the insertable properties of the entity (including backrefs) - The entity from which to extract. - a map of instances being merged to merged instances - The session in which the resuest is being made. - The insertable property values. - - - Extract the value of a particular property from the given entity. - The entity from which to extract the property value. - The name of the property for which to extract the value. - The current value of the given property on the given entity. - - - Called just after the entities properties have been initialized. - The entity being initialized. - Are defined lazy properties currently unfecthed - The session initializing this entity. - - - - Generates an appropriate proxy representation of this entity for this entity-mode. - - The id of the instance for which to generate a proxy. - The session to which the proxy should be bound. - The generate proxies. - - - Does the given entity instance have any currently uninitialized lazy properties? - The entity to be check for uninitialized lazy properties. - True if uninitialized lazy properties were found; false otherwise. - - - - Does the class managed by this tuplizer implement - the interface. - - True if the ILifecycle interface is implemented; false otherwise. - - - - Does the class managed by this tuplizer implement - the interface. - - True if the IValidatable interface is implemented; false otherwise. - - - Returns the java class to which generated proxies will be typed. - The .NET class to which generated proxies will be typed - - - Is it an instrumented POCO? - - - Does this entity, for this mode, present a possibility for proxying? - True if this tuplizer can generate proxies for this entity. - - - Constructs a new AbstractEntityTuplizer instance. - The "interpreted" information relating to the mapped entity. - The parsed "raw" mapping data relating to the given entity. - - - Build an appropriate Getter for the given property. - The property to be accessed via the built Getter. - The entity information regarding the mapped entity owning this property. - An appropriate Getter instance. - - - Build an appropriate Setter for the given property. - The property to be accessed via the built Setter. - The entity information regarding the mapped entity owning this property. - An appropriate Setter instance. - - - Build an appropriate Instantiator for the given mapped entity. - The mapping information regarding the mapped entity. - An appropriate Instantiator instance. - - - Build an appropriate ProxyFactory for the given mapped entity. - The mapping information regarding the mapped entity. - The constructed Getter relating to the entity's id property. - The constructed Setter relating to the entity's id property. - An appropriate ProxyFactory instance. - - - Extract a component property value. - The component property types. - The component instance itself. - The property path for the property to be extracted. - The property value extracted. - - - Return the entity-mode handled by this tuplizer instance. - - - Retrieves the defined entity-name for the tuplized entity. - - - - Retrieves the defined entity-names for any subclasses defined for this entity. - - - - - Handles mapping s to s. - - - Most of the handling is really in the super class; here we just create - the tuplizers and add them to the superclass - - - - - Instantiates a EntityEntityModeToTuplizerMapping based on the given - entity mapping and metamodel definitions. - - The entity mapping definition. - The entity metamodel definition. - - - An specific to the POCO entity mode. - - - Contract for implementors responsible for instantiating entity/component instances. - - - Perform the requested entity instantiation. - The id of the entity to be instantiated. - An appropriately instantiated entity. - This form is never called for component instantiation, only entity instantiation. - - - Perform the requested instantiation. - The instantiated data structure. - - - - Performs check to see if the given object is an instance of the entity - or component which this Instantiator instantiates. - - The object to be checked. - True is the object does represent an instance of the underlying entity/component. - - - - Represents a defined entity identifier property within the Hibernate - runtime-metamodel. - - - Author: Steve Ebersole - - - - - Defines the basic contract of a Property within the runtime metamodel. - - - - - Constructor for Property instances. - - The name by which the property can be referenced within its owner. - The node name to use for XML-based representation of this property. - The Hibernate Type of this property. - - - - Construct a non-virtual identifier property. - - The name of the property representing the identifier within - its owning entity. - The node name to use for XML-based representation of this - property. - The Hibernate Type for the identifier property. - Is this an embedded identifier. - The value which, if found as the value on the identifier - property, represents new (i.e., un-saved) instances of the owning entity. - The generator to use for id value generation. - - - - Construct a virtual IdentifierProperty. - - The Hibernate Type for the identifier property. - Is this an embedded identifier. - The value which, if found as the value on the identifier - property, represents new (i.e., un-saved) instances of the owning entity. - The generator to use for id value generation. - - - - Defines a POCO-based instantiator for use from the tuplizers. - - - - Responsible for generation of runtime metamodel representations. - Makes distinction between identifier, version, and other (standard) properties. - - - Author: Steve Ebersole - - - - - Generates an IdentifierProperty representation of the for a given entity mapping. - - The mapping definition of the entity. - The identifier value generator to use for this identifier. - The appropriate IdentifierProperty definition. - - - - Generates a VersionProperty representation for an entity mapping given its - version mapping Property. - - The version mapping Property. - Is property lazy loading currently available. - The appropriate VersionProperty definition. - - - - Generate a "standard" (i.e., non-identifier and non-version) based on the given - mapped property. - - The mapped property. - Is property lazy loading currently available. - The appropriate StandardProperty definition. - - - - Represents a basic property within the Hibernate runtime-metamodel. - - - Author: Steve Ebersole - - - - - Constructs StandardProperty instances. - - The name by which the property can be referenced within - its owner. - The node name to use for XML-based representation of this - property. - The Hibernate Type of this property. - Should this property be handled lazily? - Is this property an insertable value? - Is this property an updateable value? - Is this property generated in the database on insert? - Is this property generated in the database on update? - Is this property a nullable value? - Is this property a checkable value? - Is this property a versionable value? - The cascade style for this property's value. - Any fetch mode defined for this property - - - - Represents a version property within the Hibernate runtime-metamodel. - - - Author: Steve Ebersole - - - - - Constructs VersionProperty instances. - - The name by which the property can be referenced within - its owner. - The node name to use for XML-based representation of this - property. - The Hibernate Type of this property. - Should this property be handled lazily? - Is this property an insertable value? - Is this property an updateable value? - Is this property generated in the database on insert? - Is this property generated in the database on update? - Is this property a nullable value? - Is this property a checkable value? - Is this property a versionable value? - The cascade style for this property's value. - The value which, if found as the value of - this (i.e., the version) property, represents new (i.e., un-saved) - instances of the owning entity. - - - Logic to bind stream of byte into a VARBINARY - - - - Superclass for mutable nullable types. - - - - - Superclass of single-column nullable types. - - - Maps the Property to a single column that is capable of storing nulls in it. If a .net Struct is - used it will be created with its unitialized value and then on Update the uninitialized value of - the Struct will be written to the column - not . - - - - - The base implementation of the interface. - Mapping of the built in Type hierarchy. - - - - - Disassembles the object into a cacheable representation. - - The value to disassemble. - The is not used by this method. - optional parent entity object (needed for collections) - The disassembled, deep cloned state of the object - - This method calls DeepCopy if the value is not null. - - - - - Reconstructs the object from its cached "disassembled" state. - - The disassembled state from the cache - The is not used by this method. - The parent Entity object is not used by this method - The assembled object. - - This method calls DeepCopy if the value is not null. - - - - - Should the parent be considered dirty, given both the old and current - field or element value? - - The old value - The current value - The is not used by this method. - true if the field is dirty - This method uses IType.Equals(object, object) to determine the value of IsDirty. - - - - Retrives an instance of the mapped class, or the identifier of an entity - or collection from a . - - The that contains the values. - - The names of the columns in the that contain the - value to populate the IType with. - - the session - The parent Entity - An identifier or actual object mapped by this IType. - - This method uses the IType.NullSafeGet(IDataReader, string[], ISessionImplementor, object) method - to Hydrate this . - - - - - Maps identifiers to Entities or Collections. - - An identifier or value returned by Hydrate() - The is not used by this method. - The parent Entity is not used by this method. - The value. - - There is nothing done in this method other than return the value parameter passed in. - - - - - Says whether the value has been modified - - - - - When implemented by a class, returns a deep copy of the persistent - state, stopping at entities and at collections. - A Collection element or Entity fieldThe entityMode.The session factory.A deep copy of the object. - - - - When implemented by a class, returns the SqlTypes for the columns mapped by this IType. - The that uses this IType.An array of s. - - - - When implemented by a class, returns how many columns are used to persist this type. - The that uses this IType.The number of columns this IType spans.MappingException - - - - - - - - - - When implemented by a class, puts the value/values from the mapped - class into the . - The to put the values into.The object that contains the values.The index of the to start writing the values to.Indicates which columns are to be set. - Implementors should handle possibility of null values. - A multi-column type should be written to parameters starting from . - - - - - When implemented by a class, puts the value/values from the mapped - class into the . - - The to put the values into. - The object that contains the values. - The index of the to start writing the values to. - - Implementors should handle possibility of null values. - A multi-column type should be written to parameters starting from . - - - - - When implemented by a class, a representation of the value to be - embedded in an XML element - The object that contains the values.An Xml formatted string. - - - - Gets a value indicating if the is an . - - false - by default an is not an . - - - - Gets a value indicating if the is a . - - false - by default an is not a . - - - - Gets a value indicating if the is an . - - false - by default an is not an . - - - - Gets a value indicating if the is a . - - false - by default an is not a . - - - - Gets a value indicating if the implementation is an "object" type - - false - by default an is not a "object" type. - - - - When implemented by a class, gets the value indicating if the objects - of this IType are mutable. - true if the objects mapped by this IType are mutable. - With respect to the referencing object... - Entities and Collections are considered immutable because they manage their own internal state. - - - - - When implemented by a class, gets the abbreviated name of the type. - The NHibernate type name. - - - - When implemented by a class, gets the returned - by the NullSafeGet() methods. - - The from the .NET framework. - - This is used to establish the class of an array of this Itype - - - - - Initialize a new instance of the NullableType class using a - . - - The underlying . - This is used when the Property is mapped to a single column. - - - - When implemented by a class, put the value from the mapped - Property into to the . - - The to put the value into. - The object that contains the value. - The index of the to start writing the values to. - - Implementors do not need to handle possibility of null values because this will - only be called from after - it has checked for nulls. - - - - - When implemented by a class, gets the object in the - for the Property. - - The that contains the value. - The index of the field to get the value from. - An object with the value from the database. - - - - When implemented by a class, gets the object in the - for the Property. - - The that contains the value. - The name of the field to get the value from. - An object with the value from the database. - - Most implementors just call the - overload of this method. - - - - - A representation of the value to be embedded in an XML element - - The object that contains the values. - - An Xml formatted string. - - - - When implemented by a class, a representation of the value to be - embedded in an XML element - The object that contains the values.An Xml formatted string. - - - This implementation forwards the call to if the parameter - value is not null. - - - It has been "sealed" because the Types inheriting from - do not need and should not override this method. All of their implementation - should be in . - - - - - - Parse the XML representation of an instance - - XML string to parse, guaranteed to be non-empty - - - - - When implemented by a class, puts the value/values from the mapped - class into the . - - The to put the values into. - The object that contains the values. - The index of the to start writing the values to. - - Implementors should handle possibility of null values. - A multi-column type should be written to parameters starting from . - - - - This implementation forwards the call to . - - - It has been "sealed" because the Types inheriting from - do not need to and should not override this method. All of their implementation - should be in . - - - - - - Puts the value from the mapped class into the . - - The to put the values into. - The object that contains the values. - The index of the to write the value to. - - - This method checks to see if value is null, if it is then the value of - is written to the . - - - If the value is not null, then the method - is called and that method is responsible for setting the value. - - - - - - When implemented by a class, gets an instance of the object mapped by - this IType from the . - The that contains the values - The names of the columns in the that contain the - value to populate the IType with. - The object mapped by this IType. - Implementors should handle possibility of null values. - - - This has been sealed because no other class should override it. This - method calls for a single value. - It only takes the first name from the string[] names parameter - that is a - safe thing to do because a Nullable Type only has one field. - - - - - Extracts the values of the fields from the DataReader - - The DataReader positioned on the correct record - An array of field names. - The value off the field from the DataReader - - In this class this just ends up passing the first name to the NullSafeGet method - that takes a string, not a string[]. - - I don't know why this method is in here - it doesn't look like anybody that inherits - from NullableType overrides this... - - TODO: determine if this is needed - - - - - Gets the value of the field from the . - - The positioned on the correct record. - The name of the field to get the value from. - The value of the field. - - - This method checks to see if value is null, if it is then the null is returned - from this method. - - - If the value is not null, then the method - is called and that method is responsible for retrieving the value. - - - - - - When implemented by a class, gets an instance of the object - mapped by this IType from the . - The that contains the valuesThe name of the column in the that contains the - value to populate the IType with.The object mapped by this IType. - Implementations should handle possibility of null values. - This method might be called if the IType is known to be a single-column type. - - - - This implementation forwards the call to . - - - It has been "sealed" because the Types inheriting from - do not need to and should not override this method. All of their implementation - should be in . - - - - - - When implemented by a class, returns the SqlTypes for the columns mapped by this IType. - The that uses this IType.An array of s. - - - This implementation forwards the call to . - - - It has been "sealed" because the Types inheriting from - do not need to and should not override this method because they map to a single - column. All of their implementation should be in . - - - - - - Returns the number of columns spanned by this - - A always returns 1. - - This has the hard coding of 1 in there because, by definition of this class, - a NullableType can only map to one column in a table. - - - - - Determines whether the specified is equal to this - . - - The to compare with this NullableType. - true if the SqlType and Name properties are the same. - - - - Serves as a hash function for the , - suitable for use in hashing algorithms and data structures like a hash table. - - - A hash code that is based on the 's - hash code and the 's hash code. - - - - Gets the underlying for - the column mapped by this . - - The underlying . - - This implementation should be suitable for all subclasses unless they need to - do some special things to get the value. There are no built in s - that override this Property. - - - - - Initialize a new instance of the MutableType class using a - . - - The underlying . - - - - Gets the value indicating if this IType is mutable. - - true - a is mutable. - - This has been "sealed" because any subclasses are expected to be mutable. If - the type is immutable then they should inherit from . - - - - - An that may be used to version data. - - - - - When implemented by a class, increments the version. - - The current version - The current session, if available. - an instance of the that has been incremented. - - - - When implemented by a class, gets an initial version. - - The current session, if available. - An instance of the type. - - - - Are the two version values considered equal? - - One value to check. - The other value to check. - true if the values are equal, false otherwise. - - - - Get a comparator for the version numbers - - - - Convert the byte[] into the expected object type - - - Convert the object into the internal byte[] representation - - - - Common base class for and . - - - - - Superclass of types. - - - - - Superclass of nullable immutable types. - - - - - Initialize a new instance of the ImmutableType class using a - . - - The underlying . - - - - Gets the value indicating if this IType is mutable. - - false - an is not mutable. - - This has been "sealed" because any subclasses are expected to be immutable. If - the type is mutable then they should inherit from . - - - - - An that may appear as an SQL literal - - - - - When implemented by a class, return a representation - of the value, suitable for embedding in an SQL statement - - The object to convert to a string for the SQL statement. - - A string that contains a well formed SQL Statement. - - - - Initialize a new instance of the PrimitiveType class using a . - - The underlying . - - - - When implemented by a class, return a representation - of the value, suitable for embedding in an SQL statement - - The object to convert to a string for the SQL statement. - - A string that containts a well formed SQL Statement. - - - - A representation of the value to be embedded in an XML element - - The object that contains the values. - - An Xml formatted string. - - This just calls so if there is - a possibility of this PrimitiveType having any characters - that need to be encoded then this method should be overridden. - - - - - An IType that may be used for a discriminator column. - - - This interface contains no new methods but does require that an - that will be used in a discriminator column must implement - both the and interfaces. - - - - - An that may be used as an identifier. - - - - - When implemented by a class, converts the xml string from the - mapping file to the .NET object. - - The value of discriminator-value or unsaved-value attribute. - The string converted to the object. - - This method needs to be able to handle any string. It should not just - call System.Type.Parse without verifying that it is a parsable value - for the System.Type. - - - - - Base class for enum types. - - - - - Maps a Property - to a DbType.AnsiStringFixedLength column. - - - - - Maps a Property - to a column. - - - - - - - - Handles "any" mappings and the old deprecated "object" type. - - - The identifierType is any NHibernate IType that can be serailized by default. - For example, you can specify the identifierType as an Int32 or a custom identifier - type that you built. The identifierType matches to one or many columns. - - The metaType maps to a single column. By default it stores the name of the Type - that the Identifier identifies. - - For example, we can store a link to any table. It will have the results - class_name id_col1 - ======================================== - Simple, AssemblyName 5 - DiffClass, AssemblyName 5 - Simple, AssemblyName 4 - - You can also provide you own type that might map the name of the class to a table - with a giant switch statemet or a good naming convention for your class->table. The - data stored might look like - class_name id_col1 - ======================================== - simple_table 5 - diff_table 5 - simple_table 4 - - - - - - Enables other Component-like types to hold collections and have cascades, etc. - - - - - Get the values of the component properties of - a component instance - - - - - Optional Operation - - - - - Optional operation - - - - Get the types of the component properties - - - Get the names of the component properties - - - - Optional operation - - nullability of component properties - - - - An that represents some kind of association between entities. - - - - - Get the "persister" for this association - a class or collection persister - - - - - - Get the entity name of the associated entity - - - - Get the "filtering" SQL fragment that is applied in the - SQL on clause, in addition to the usual join condition. - - - - - When implemented by a class, gets the type of foreign key directionality - of this association. - - The of this association. - - - - Is the primary key of the owning entity table - to be used in the join? - - - - - Get the name of the property in the owning entity - that provides the join key (null if the identifier) - - - - - The name of a unique property of the associated entity - that provides the join key (null if the identifier of - an entity, or key of a collection) - - - - - Do we dirty check this association, even when there are - no columns to be updated. - - - - - - - - - - - - - - - Not really relevant to AnyType, since it cannot be "joined" - - - - - An that maps an collection - to the database. - - - - - The base class for an that maps collections - to the database. - - - - - Initializes a new instance of a class for - a specific role. - - The role the persistent collection is in. - - The name of the property in the - owner object containing the collection ID, or if it is - the primary key. - - - - - - Instantiate an uninitialized collection wrapper or holder. Callers MUST add the holder to the - persistence context! - - The session from which the request is originating. - The underlying collection persister (metadata) - The owner key. - The instantiated collection. - - - - Wrap the naked collection instance in a wrapper, or instantiate a - holder. Callers MUST add the holder to the persistence context! - - The session from which the request is originating. - The bare collection to be wrapped. - - A subclass of that wraps the non NHibernate collection. - - - - - Get the key value from the owning entity instance, usually the identifier, but might be some - other unique key, in the case of property-ref - - - - - Get the id value from the owning entity key, usually the same as the key, but might be some - other property, in the case of property-ref - - The collection owner key - The session from which the request is originating. - - The collection owner's id, if it can be obtained from the key; - otherwise, null is returned - - - - - Instantiate an empty instance of the "underlying" collection (not a wrapper), - but with the given anticipated size (i.e. accounting for initial capacity - and perhaps load factor). - - - The anticipated size of the instantiated collection after we are done populating it. - - A newly instantiated collection to be wrapped. - - - - Get an iterator over the element set of the collection, which may not yet be wrapped - - The collection to be iterated - The session from which the request is originating. - The iterator. - - - - Get an iterator over the element set of the collection in POCO mode - - The collection to be iterated - The iterator. - - - - We always need to dirty check the collection because we sometimes - need to increment version number of owner and also because of - how assemble/disassemble is implemented for uks - - - - - Initializes a new instance of a class for - a specific role. - - The role the persistent collection is in. - The name of the property in the - owner object containing the collection ID, or if it is - the primary key. - The of the element contained in the array. - - - This creates a bag that is non-generic. - - - - - - - - - - - - - - Wraps a in a . - - The for the collection to be a part of. - The unwrapped array. - - An that wraps the non NHibernate . - - - - - The for the element. - - - - - - - - An that maps an collection - using bag semantics to the database. - - - - - Initializes a new instance of a class for - a specific role. - - The role the persistent collection is in. - The name of the property in the - owner object containing the collection ID, or if it is - the primary key. - - - - - Instantiates a new for the bag. - - The current for the bag. - - - A new . - - - - Wraps an in a NHibernate . - - The for the collection to be a part of. - The unwrapped . - - An that wraps the non NHibernate . - - - - - - - - Maps a System.Byte[] Property to an column that can store a BLOB. - - - This is only needed by DataProviders (SqlClient) that need to specify a Size for the - IDbDataParameter. Most DataProvider(Oralce) don't need to set the Size so a BinaryType - would work just fine. - - - - - BinaryType. - - - - - - - - Maps a Property - to a column. - - - - - Initialize a new instance of the BooleanType - - This is used when the Property is mapped to a native boolean type. - - - - Initialize a new instance of the BooleanType class using a - . - - The underlying . - - This is used when the Property is mapped to a string column - that stores true or false as a string. - - - - - Maps a property - to a column. - - - - - Maps a Property - to a column. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Maps a Property - to a DbType.StringFixedLength column. - - - - - ClassMetaType is a NH specific type to support "any" with meta-type="class" - - - It work like a MetaType where the key is the entity-name it self - - - - - - - - - - - - - - - - - - - - - This method does not populate the component parent - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Summary description for CompositeCustomType. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Maps a Property - to a column. - - - CultureInfoType stores the culture name (not the Culture ID) of the - in the DB. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Maps a Property - to a column. - - - - - A custom type for mapping user-written classes that implement - . - - - - - - - Adapts IUserType to the generic IType interface. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Maps a Property to a - - - - - Maps a Property to a column that - stores date & time down to the accuracy of a second. - - - This only stores down to a second, so if you are looking for the most accurate - date and time storage your provider can give you use the . - or the - - - - - - - - - - - - - - Maps a Property to a - - - - - - - - Maps the Year, Month, and Day of a Property to a - column - - - - - - - - - - An extension of which - maps to the database's current timestamp, rather than the vm's - current timestamp. - - - Note: May/may-not cause issues on dialects which do not properly support - a true notion of timestamp - - - - - This is almost the exact same type as the DateTime except it can be used - in the version column, stores it to the accuracy the database supports, - and will default to the value of DateTime.Now if the value is null. - - -

            - The value stored in the database depends on what your data provider is capable - of storing. So there is a possibility that the DateTime you save will not be - the same DateTime you get back when you check DateTime.Equals(DateTime) because - they will have their milliseconds off. -

            -

            - For example - SQL Server 2000 is only accurate to 3.33 milliseconds. So if - NHibernate writes a value of 01/01/98 23:59:59.995 to the Prepared Command, MsSql - will store it as 1998-01-01 23:59:59.997. -

            -

            - Please review the documentation of your Database server. -

            -
            -
            - - - Sets the value of this Type in the IDbCommand. - - The IDbCommand to add the Type's value to. - The value of the Type. - The index of the IDataParameter in the IDbCommand. - - No null values will be written to the IDbCommand for this Type. - - - - - Maps a Property - to a column. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A reference to an entity class - - - - Constructs the requested entity type mapping. - The name of the associated entity. - - The property-ref name, or null if we - reference the PK of the associated entity. - - Is eager fetching enabled. - Should values of this mapping be embedded in XML modes? - - Is unwrapping of proxies allowed for this association; unwrapping - says to return the "implementation target" of lazy prooxies; typically only possible - with lazy="no-proxy". - - - - Two entities are considered the same when their instances are the same. - One entity instance - Another entity instance - The entity mode. - True if x == y; false otherwise. - - - - Get the identifier value of an instance or proxy. -

            - Intended only for loggin purposes!!! -

            - The object from which to extract the identifier. - The entity persister - The entity mode - The extracted identifier. -
            - - - Converts the id contained in the to an object. - - The that contains the query results. - A string array of column names that contain the id. - The this is occurring in. - The object that this Entity will be a part of. - - An instance of the object or if the identifer was null. - - - - Retrieves the {@link Joinable} defining the associated entity. - The session factory. - The associated joinable - - - - Determine the type of either (1) the identifier if we reference the - associated entity's PK or (2) the unique key to which we refer (i.e. - the property-ref). - - The mappings... - The appropriate type. - - - - The name of the property on the associated entity to which our FK refers - - The mappings... - The appropriate property name. - - - Convenience method to locate the identifier type of the associated entity. - The mappings... - The identifier type - - - Convenience method to locate the identifier type of the associated entity. - The originating session - The identifier type - - - - Resolves the identifier to the actual object. - - - - - Resolve an identifier or unique key value - - - - - - - - The name of the associated entity. - The session factory, for resolution. - The associated entity name. - - - The name of the associated entity. - The associated entity name. - - - - Load an instance by a unique key that is not the primary key. - - The name of the entity to load - The name of the property defining the uniqie key. - The unique key property value. - The originating session. - The loaded entity - - - Explicitly, an entity type is an entity type - True. - - - - This returns the wrong class for an entity with a proxy, or for a named - entity. Theoretically it should return the proxy class, but it doesn't. -

            - The problem here is that we do not necessarily have a ref to the associated - entity persister (nor to the session factory, to look it up) which is really - needed to "do the right thing" here... -

            -
            - - - - - - - - - When implemented by a class, gets the type of foreign key directionality - of this association. - - The of this association. - - - - Is the foreign key the primary key of the table? - - - - - Converts the given enum instance into a basic type. - - - - - - - Maps a to a - DbType.String. - - - If your database should store the - using the named values in the enum instead of the underlying values - then subclass this . - - - All that needs to be done is to provide a default constructor that - NHibernate can use to create the specific type. For example, if - you had an enum defined as. - - - - public enum MyEnum - { - On, - Off, - Dimmed - } - - - - all that needs to be written for your enum string type is: - - - - public class MyEnumStringType : NHibernate.Type.EnumStringType - { - public MyEnumStringType() - : base( typeof( MyEnum ) ) - { - } - } - - - - The mapping would look like: - - - - ... - <property name="Status" type="MyEnumStringType, AssemblyContaining" /> - ... - - - - The TestFixture that shows the working code can be seen - in NHibernate.Test.TypesTest.EnumStringTypeFixture.cs - , NHibernate.Test.TypesTest.EnumStringClass.cs - , and NHibernate.Test.TypesTest.EnumStringClass.hbm.xml - - - - - - Hardcoding of 255 for the maximum length - of the Enum name that will be saved to the db. - - - 255 because that matches the default length that hbm2ddl will - use to create the column. - - - - - Initializes a new instance of . - - The of the Enum. - - - - Initializes a new instance of . - - The of the Enum. - The length of the string that can be written to the column. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - This appends enumstring - to the beginning of the underlying - enums name so that could still be stored - using the underlying value through the - also. - - - - - Represents directionality of the foreign key constraint - - - - - A foreign key from parent to child - - - - - A foreign key from child to parent - - - - - Should we cascade at this cascade point? - - - - - An that maps an collection - to the database using bag semantics. - - - - - Initializes a new instance of a class for - a specific role. - - The role the persistent collection is in. - The name of the property in the - owner object containing the collection ID, or if it is - the primary key. - - - - Instantiates a new for the bag. - - The current for the bag. - The current for the bag. - - - - - Wraps an in a . - - The for the collection to be a part of. - The unwrapped . - - An that wraps the non NHibernate . - - - - - An that maps an collection - using bag semantics with an identifier to the database. - - - - - Initializes a new instance of a class for - a specific role. - - The role the persistent collection is in. - The name of the property in the - owner object containing the collection ID, or if it is - the primary key. - - - - - Instantiates a new for the identifier bag. - - The current for the identifier bag. - - - - - - - Wraps an in a . - - The for the collection to be a part of. - The unwrapped . - - An that wraps the non NHibernate . - - - - - - - - An that maps an collection - to the database using list semantics. - - - - - An that maps an collection - using list semantics to the database. - - - - - Initializes a new instance of a class for - a specific role. - - The role the persistent collection is in. - The name of the property in the - owner object containing the collection ID, or if it is - the primary key. - - - - - Instantiates a new for the bag. - - The current for the bag. - - - A new . - - - - Wraps an exist in a NHibernate . - - The for the collection to be a part of. - The unwrapped . - - An that wraps the non NHibernate . - - - - - - - - Initializes a new instance of a class for - a specific role. - - The role the persistent collection is in. - The name of the property in the - owner object containing the collection ID, or if it is - the primary key. - - - - Instantiates a new for the list. - - The current for the list. - The current for the list. - - - - - Wraps an in a . - - The for the collection to be a part of. - The unwrapped . - - An that wraps the non NHibernate . - - - - - An that maps an collection - to the database. - - - - - An that maps an collection - to the database. - - - - - Initializes a new instance of a class for - a specific role. - - The role the persistent collection is in. - The name of the property in the - owner object containing the collection ID, or if it is - the primary key. - - - - - Instantiates a new for the map. - - The current for the map. - - - - - - - Wraps an in a . - - The for the collection to be a part of. - The unwrapped . - - An that wraps the non NHibernate . - - - - - - - - Initializes a new instance of a class for - a specific role. - - The role the persistent collection is in. - The name of the property in the - owner object containing the collection ID, or if it is - the primary key. - - - - Instantiates a new for the map. - - The current for the map. - - Not used. - - - - - Wraps an in a . - - The for the collection to be a part of. - The unwrapped . - - An that wraps the - non NHibernate . - - - - - An that maps a sorted collection - to the database. - - - - - An that maps an collection - to the database. - - - - - An that maps an collection - to the database. - - - - - Initializes a new instance of a class for - a specific role. - - The role the persistent collection is in. - The name of the property in the - owner object containing the collection ID, or if it is - the primary key. - - - - - Instantiates a new for the set. - - The current for the set. - - - - - - - Wraps an in a . - - The for the collection to be a part of. - The unwrapped . - - An that wraps the non NHibernate . - - - - - - - - - - Initializes a new instance of a class for - a specific role. - - The role the persistent collection is in. - The name of the property in the - owner object containing the collection ID, or if it is - the primary key. - - - - Instantiates a new for the set. - - The current for the set. - The current for the set. - - - - - Wraps an in a . - - The for the collection to be a part of. - The unwrapped . - - An that wraps the non NHibernate . - - - - - Initializes a new instance of a class for - a specific role. - - The role the persistent collection is in. - The name of the property in the - owner object containing the collection ID, or if it is - the primary key. - - - - An that maps a sorted collection - to the database. - - - - - Initializes a new instance of a class for - a specific role. - - The role the persistent collection is in. - The name of the property in the - owner object containing the collection ID, or if it is - the primary key. - The to use to compare - set elements. - - - - Maps a Property - to a column. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Maps a Property - to a column. - - - - - - - - - - - Maps a Property - to a column. - - - - - - - - - - - Maps a Property - to a column. - - - - - - - - - - - A many-to-one association to an entity - - - - - Hydrates the Identifier from . - - The that contains the query results. - A string array of column names to read from. - The this is occurring in. - The object that this Entity will be a part of. - - An instantiated object that used as the identifier of the type. - - - - - A one-to-one association to an entity - - - - - We don't need to dirty check one-to-one because of how - assemble/disassemble is implemented and because a one-to-one - association is never dirty - - - - - A implemented using a collection that maintains - the order in which elements are inserted into it. - - - - - Initializes a new instance of a class. - - The role the persistent collection is in. - - - - - - A implemented using a collection that maintains - the order in which elements are inserted into it. - - - - - Initializes a new instance of a class - - The role the persistent collection is in. - - - - - - PersistentEnumType - - - - - Gets an instance of the Enum - - The underlying value of an item in the Enum. - - An instance of the Enum set to the code value. - - - - - Gets the correct value for the Enum. - - The value to convert (an enum instance). - A boxed version of the code, converted to the correct type. - - This handles situations where the DataProvider returns the value of the Enum - from the db in the wrong underlying type. It uses to - convert it to the correct type. - - - - - Maps a Property - to a column. - - - - - - - - - - - Maps an instance of a that has the - to a column. - - - - The SerializableType should be used when you know that Bytes are - not going to be greater than 8,000. - - - The base class is because the data is stored in - a byte[]. The System.Array does not have a nice "equals" method so we must - do a custom implementation. - - - - - - - - - - - - - - - - - - - - - - - Thrown when a property cannot be serialized/deserialized - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The message that describes the error. - - - - Initializes a new instance of the class. - - The message that describes the error. - - The exception that is the cause of the current exception. If the innerException parameter - is not a null reference, the current exception is raised in a catch block that handles - the inner exception. - - - - - Initializes a new instance of the class - with serialized data. - - - The that holds the serialized object - data about the exception being thrown. - - - The that contains contextual information about the source or destination. - - - - - Maps a Property to an - column. - - - Verify through your database's documentation if there is a column type that - matches up with the capabilities of - - - - - - - - - - - Extends the to provide sorting. - - - - - Initializes a new instance of a class for - a specific role using the to do the sorting. - - The role the persistent collection is in. - The name of the property in the - owner object containing the collection ID, or if it is - the primary key. - The to use for the sorting. - - - - - Extends the to provide sorting. - - - - - Initializes a new instance of a class for - a specific role using the to do the sorting. - - The role the persistent collection is in. - The name of the property in the - owner object containing the collection ID, or if it is - the primary key. - The to use for the sorting. - - - - - A one-to-one association that maps to specific formula(s) - instead of the primary key column of the owning entity. - - - - - Maps a Property to an - column that can store a CLOB. - - - This is only needed by DataProviders (SqlClient) that need to specify a Size for the - IDbDataParameter. Most DataProvider(Oralce) don't need to set the Size so a StringType - would work just fine. - - - - - Maps a to a column. - - - - - - - - - - - - - - - - - Maps a Property to an column - that stores the DateTime using the Ticks property. - - - This is the recommended way to "timestamp" a column. - The System.DateTime.Ticks is accurate to 100-nanosecond intervals. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Maps a Property to an column - This is an extra way to map a . You already have - but mapping against a . - - - - - Maps a Property to an column - - - - - - - - - - - - - - - - - - - - - - - - - Maps a Property to an DateTime column that only stores the - Hours, Minutes, and Seconds of the DateTime as significant. - Also you have for handling, the NHibernate Type , - the which maps to a . - - - - This defaults the Date to "1753-01-01" - that should not matter because - using this Type indicates that you don't care about the Date portion of the DateTime. - - - A more appropriate choice to store the duration/time is the . - The underlying tends to be handled differently by different - DataProviders. - - - - - - Maps a to a 1 char column - that stores a 'T'/'F' to indicate true/false. - - - If you are using schema-export to generate your tables then you need - to set the column attributes: length=1 or sql-type="char(1)". - - This needs to be done because in Java's JDBC there is a type for CHAR and - in ADO.NET there is not one specifically for char, so you need to tell schema - export to create a char(1) column. - - - - - - - - - - - - - - - - - Used internally to obtain instances of IType. - - - Applications should use static methods and constants on NHibernate.NHibernateUtil if the default - IType is good enough. For example, the TypeFactory should only be used when the String needs - to have a length of 300 instead of 255. At this point NHibernate.String does not get you the - correct IType. Instead use TypeFactory.GetString(300) and keep a local variable that holds - a reference to the IType. - - - - - - - - Register other Default .NET type - - - These type will be used, as default, even when the "type" attribute was NOT specified in the mapping - - - - - Register other NO Default .NET type - - - These type will be used only when the "type" attribute was is specified in the mapping. - These are in here because needed to NO override default CLR types and be available in mappings - - - - - Gets the classification of the Type based on the string. - - The name of the Type to get the classification for. - The Type of Classification - - This parses through the string and makes the assumption that no class - name and no assembly name will contain the "(". - - If it finds - the "(" and then finds a "," afterwards then it is a - TypeClassification.PrecisionScale. - - - If it finds the "(" - and doesn't find a "," afterwards, then it is a - TypeClassification.Length. - - - If it doesn't find the "(" then it assumes that it is a - TypeClassification.Plain. - - - - - - Given the name of a Hibernate type such as Decimal, Decimal(19,0) - , Int32, or even NHibernate.Type.DecimalType, NHibernate.Type.DecimalType(19,0), - NHibernate.Type.Int32Type, then return an instance of NHibernate.Type.IType - - The name of the type. - The instance of the IType that the string represents. - - This method will return null if the name is not found in the basicNameMap. - - - - - Uses heuristics to deduce a NHibernate type given a string naming the - type. - - - An instance of NHibernate.Type.IType - - When looking for the NHibernate type it will look in the cache of the Basic types first. - If it doesn't find it in the cache then it uses the typeName to get a reference to the - Class (Type in .NET). Once we get the reference to the .NET class we check to see if it - implements IType, ICompositeUserType, IUserType, ILifecycle (Association), or - IPersistentEnum. If none of those are implemented then we will serialize the Type to the - database using NHibernate.Type.SerializableType(typeName) - - - - - Uses heuristics to deduce a NHibernate type given a string naming the - type. - - the type name - parameters for the type - An instance of NHibernate.Type.IType - - - - Gets the BinaryType with the specified length. - - The length of the data to store in the database. - A BinaryType - - In addition to returning the BinaryType it will also ensure that it has - been added to the basicNameMap with the keys Byte[](length) and - NHibernate.Type.BinaryType(length). - - - - - Gets the SerializableType for the specified Type - - The Type that will be Serialized to the database. - A SerializableType - - - In addition to returning the SerializableType it will also ensure that it has - been added to the basicNameMap with the keys Type.FullName (the result - of IType.Name and Type.AssemblyQualifiedName. This is different - from the other items put in the basicNameMap because it is uses the AQN and the - FQN as opposed to the short name used in the maps and the FQN. - - - Since this method calls the method - GetSerializableType(System.Type, Int32) - with the default length, those keys will also be added. - - - - - - A one-to-one association type for the given class and cascade style. - - - - - A many-to-one association type for the given class and cascade style. - - - - - - - A many-to-one association type for the given class and cascade style. - - - - - A many-to-one association type for the given class and cascade style. - - - - Deep copy a series of values from one array to another... - The values to copy (the source) - The value types - an array indicating which values to include in the copy - The array into which to copy the values - The originating session - - - Apply the operation across a series of values. - The values - The value types - The originating session - - - - Determine if any of the given field values are dirty, - returning an array containing indexes of - the dirty fields or null if no fields are dirty. - - - - - Determine if any of the given field values are modified, - returning an array containing indexes of - the dirty fields or null if no fields are modified. - - - - - - - - - - - - - - Apply the {@link Type#disassemble} operation across a series of values. - The values - The value types - An array indicating which values to include in the disassembled state - The originating session - The entity "owning" the values - The disassembled state - - - - Apply the operation across a series of values. - - The source of the state - The target into which to replace the source values. - The value types - The originating session - The entity "owning" the values - Represent a cache of already replaced state - The replaced state - - - - Apply the - operation across a series of values. - - The source of the state - The target into which to replace the source values. - The value types - The originating session - The entity "owning" the values - A map representing a cache of already replaced state - FK directionality to be applied to the replacement - The replaced state - - - - Apply the - operation across a series of values, as - long as the corresponding is an association. - - The source of the state - The target into which to replace the source values. - The value types - The originating session - The entity "owning" the values - A map representing a cache of already replaced state - FK directionality to be applied to the replacement - The replaced state - - If the corresponding type is a component type, then apply - across the component subtypes but do not replace the component value itself. - - - - - Maps the Assembly Qualified Name of a to a - column. - - - - - - - - Initialize a new instance of the TypeType class using a - . - - The underlying . - - - - Gets the in the for the Property. - - The that contains the value. - The index of the field to get the value from. - The from the database. - - Thrown when the value in the database can not be loaded as a - - - - - Gets the in the for the Property. - - The that contains the value. - The name of the field to get the value from. - The from the database. - - This just calls gets the index of the name in the IDataReader - and calls the overloaded version - (IDataReader, Int32). - - - Thrown when the value in the database can not be loaded as a - - - - - Puts the Assembly Qualified Name of the - Property into to the . - - The to put the value into. - The that contains the value. - The index of the to start writing the value to. - - This uses the method of the - object to do the work. - - - - - A representation of the value to be embedded in an XML element - - The that contains the values. - - An Xml formatted string that contains the Assembly Qualified Name. - - - - Gets the that will be returned - by the NullSafeGet() methods. - - - A from the .NET framework. - - - - - - - - Maps a Property - to a column. - - - - - - - - - - - Maps a Property - to a column. - - - - - - - - - - - Maps a Property - to a column. - - - - - - - - Maps a to a 1 char column - that stores a 'Y'/'N' to indicate true/false. - - - If you are using schema-export to generate your tables then you need - to set the column attributes: length=1 or sql-type="char(1)". - - This needs to be done because in Java's JDBC there is a type for CHAR and - in ADO.NET there is not one specifically for char, so you need to tell schema - export to create a char(1) column. - - - - - - - - - - - - - - - - - A UserType that may be dereferenced in a query. - This interface allows a custom type to define "properties". - These need not necessarily correspond to physical .NET style properties. - - A ICompositeUserType may be used in almost every way - that a component may be used. It may even contain many-to-one - associations. - - Implementors must be immutable and must declare a public - default constructor. - - Unlike UserType, cacheability does not depend upon - serializability. Instead, Assemble() and - Disassemble() provide conversion to/from a cacheable - representation. - - - - - Get the value of a property - - an instance of class mapped by this "type" - - the property value - - - - Set the value of a property - - an instance of class mapped by this "type" - - the value to set - - - - Compare two instances of the class mapped by this type for persistence - "equality", ie. equality of persistent state. - - - - - - - - Get a hashcode for the instance, consistent with persistence "equality" - - - - - Retrieve an instance of the mapped class from a IDataReader. Implementors - should handle possibility of null values. - - IDataReader - the column names - - the containing entity - - - - - Write an instance of the mapped class to a prepared statement. - Implementors should handle possibility of null values. - A multi-column type should be written to parameters starting from index. - - - - - - - - - Return a deep copy of the persistent state, stopping at entities and at collections. - - generally a collection element or entity field - - - - - Transform the object into its cacheable representation. - At the very least this method should perform a deep copy. - That may not be enough for some implementations, method should perform a deep copy. That may not be enough for some implementations, however; for example, associations must be cached as identifier values. (optional operation) - - the object to be cached - - - - - - Reconstruct an object from the cacheable representation. - At the very least this method should perform a deep copy. (optional operation) - - the object to be cached - - - - - - - During merge, replace the existing (target) value in the entity we are merging to - with a new (original) value from the detached entity we are merging. For immutable - objects, or null values, it is safe to simply return the first parameter. For - mutable objects, it is safe to return a copy of the first parameter. However, since - composite user types often define component values, it might make sense to recursively - replace component values in the target object. - - - - - Get the "property names" that may be used in a query. - - - - - Get the corresponding "property types" - - - - - The class returned by NullSafeGet(). - - - - - Are objects of this type mutable? - - - - - A custom type that may function as an identifier or discriminator - type, or may be marshalled to and from an XML document. - - - - - The interface to be implemented by user-defined types. - - - - The interface abstracts user code from future changes to the interface, - simplifies the implementation of custom types and hides certain "internal interfaces from - user code. - - - Implementers must be immutable and must declare a public default constructor. - - - The actual class mapped by a IUserType may be just about anything. However, if it is to - be cacheble by a persistent cache, it must be serializable. - - - Alternatively, custom types could implement directly or extend one of the - abstract classes in NHibernate.Type. This approach risks future incompatible changes - to classes or interfaces in the package. - - - - - - Compare two instances of the class mapped by this type for persistent "equality" - ie. equality of persistent state - - - - - - - - Get a hashcode for the instance, consistent with persistence "equality" - - - - - Retrieve an instance of the mapped class from a JDBC resultset. - Implementors should handle possibility of null values. - - a IDataReader - column names - the containing entity - - HibernateException - - - - Write an instance of the mapped class to a prepared statement. - Implementors should handle possibility of null values. - A multi-column type should be written to parameters starting from index. - - a IDbCommand - the object to write - command parameter index - HibernateException - - - - Return a deep copy of the persistent state, stopping at entities and at collections. - - generally a collection element or entity field - a copy - - - - During merge, replace the existing () value in the entity - we are merging to with a new () value from the detached - entity we are merging. For immutable objects, or null values, it is safe to simply - return the first parameter. For mutable objects, it is safe to return a copy of the - first parameter. For objects with component values, it might make sense to - recursively replace component values. - - the value from the detached entity being merged - the value in the managed entity - the managed entity - the value to be merged - - - - Reconstruct an object from the cacheable representation. At the very least this - method should perform a deep copy if the type is mutable. (optional operation) - - the object to be cached - the owner of the cached object - a reconstructed object from the cachable representation - - - - Transform the object into its cacheable representation. At the very least this - method should perform a deep copy if the type is mutable. That may not be enough - for some implementations, however; for example, associations must be cached as - identifier values. (optional operation) - - the object to be cached - a cacheable representation of the object - - - - The SQL types for the columns mapped by this type. - - - - - The type returned by NullSafeGet() - - - - - Are objects of this type mutable? - - - - - Parse a string representation of this value, as it appears - in an XML document. - - - - - Return an SQL literal representation of the value - - - - - Return a string representation of this value, as it - should appear in an XML document - - - - - Marker interface for user types which want to perform custom - logging of their corresponding values - - - - Generate a loggable string representation of the collection (value). - The collection to be logged; guaranteed to be non-null and initialized. - The factory. - The loggable string representation. - - - - Support for parameterizable types. A UserType or CustomUserType may be - made parameterizable by implementing this interface. Parameters for a - type may be set by using a nested type element for the property element - - - - - Gets called by Hibernate to pass the configured type parameters to - the implementation. - - - - - Instantiate an uninitialized instance of the collection wrapper - - - - - Wrap an instance of a collection - - - - - Return an over the elements of this collection - the passed collection - instance may or may not be a wrapper - - - - - Optional operation. Does the collection contain the entity instance? - - - - - Optional operation. Return the index of the entity in the collection. - - - - - Replace the elements of a collection with the elements of another collection - - - - - Instantiate an empty instance of the "underlying" collection (not a wrapper), - but with the given anticipated size (i.e. accounting for initial size - and perhaps load factor). - - - The anticipated size of the instantiated collection - after we are done populating it. Note, may be negative to indicate that - we not yet know anything about the anticipated size (i.e., when initializing - from a result set row by row). - - - - - A user type that may be used for a version property. - - - - - Generate an initial version. - - The session from which this request originates. May be - null; currently this only happens during startup when trying to determine - the "unsaved value" of entities. - an instance of the type - - - - Increment the version. - - The session from which this request originates. - the current version - an instance of the type - - - - Helper class that contains common array functions and - data structures used through out NHibernate. - - - - - Sets item at position to . - Expands the list by adding values, if needed. - - - - - Computes a hash code for . - - The hash code is computed as the sum of hash codes of - individual elements, so that the value is independent of the - collection iteration order. - - - - - Creates a that uses case-insensitive string comparison - associated with invariant culture. - - - This is different from the method in - in that the latter uses the current culture and is thus vulnerable to the "Turkish I" problem. - - - - - Creates a that uses case-insensitive string comparison - associated with invariant culture. - - - This is different from the method in - in that the latter uses the current culture and is thus vulnerable to the "Turkish I" problem. - - - - - Computes a hash code for . - - The hash code is computed as the sum of hash codes of - individual elements, so that the value is independent of the - collection iteration order. - - - - - A read-only dictionary that is always empty and permits lookup by key. - - - - - A read-only dictionary that is always empty and permits lookup by key. - - - - - Utility class implementing ToString for collections. All ToString - overloads call element.ToString(). - - - To print collections of entities or typed values, use - . - - - - - - - - An where keys are compared by object identity, rather than equals. - - All external users of this class need to have no knowledge of the IdentityKey - it is all - hidden by this class. - - - - Do NOT use a System.Value type as the key for this Hashtable - only classes. See - the google thread - about why using System.Value is a bad thing. - - - If I understand it correctly, the first call to get an object defined by a DateTime("2003-01-01") - would box the DateTime and return the identity key for the box. If you were to get that Key and - unbox it into a DateTime struct, then the next time you passed it in as the Key the IdentityMap - would box it again (into a different box) and it would have a different IdentityKey - so you would - not get the same value for the same DateTime value. - - - - - - Create a new instance of the IdentityMap that has no - iteration order. - - A new IdentityMap based on a Hashtable. - - - - Create a new instance of the IdentityMap that has an - iteration order of the order the objects were added - to the Map. - - A new IdentityMap based on ListDictionary. - - - - Return the Dictionary Entries (as instances of DictionaryEntry in a collection - that is safe from concurrent modification). Ie - we may safely add new instances - to the underlying IDictionary during enumeration of the Values. - - The IDictionary to get the enumeration safe list. - A Collection of DictionaryEntries - - - - Create the IdentityMap class with the correct class for the IDictionary. - Unsorted = Hashtable - Sorted = ListDictionary - - A class that implements the IDictionary for storing the objects. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Verifies that we are not using a System.ValueType as the Key in the Dictionary - - The object that will be the key. - An object that is safe to be a key. - Thrown when the obj is a System.ValueType - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Returns the Keys used in this IdentityMap - - - - - - - - - - - - - - - - Provides a snapshot VIEW in the form of a List of the contents of the IdentityMap. - You can safely iterate over this VIEW and modify the actual IdentityMap because the - VIEW is a copy of the contents, not a reference to the existing Map. - - Contains a copy (not that actual instance stored) of the DictionaryEntries in a List. - - - - - Set implementation that use == instead of equals() as its comparison mechanism - that base its implementation of IdentityMap - - - - - Combines multiple objects implementing into one. - - - - - Creates an IEnumerable object from multiple IEnumerables. - - The IEnumerables to join together. - - - - - - - - - - - - - A flag to indicate if Dispose() has been called. - - - - - Finalizer that ensures the object is correctly disposed of. - - - - - Takes care of freeing the managed and unmanaged resources that - this class is responsible for. - - - - - Takes care of freeing the managed and unmanaged resources that - this class is responsible for. - - Indicates if this JoinedEnumerable is being Disposed of or Finalized. - - The command is closed and the reader is disposed. This allows other ADO.NET - related actions to occur without needing to move all the way through the - EnumerableImpl. - - - - - - - - A map of objects whose mapping entries are sequenced based on the order in which they were - added. This data structure has fast O(1) search time, deletion time, and insertion time - - - This class is not thread safe. - This class is not a really replication of JDK LinkedHashMap{K, V}, - this class is an adaptation of SequencedHashMap with generics. - - - - - Initializes a new instance of the class that is empty, - has the default initial capacity, and uses the default equality comparer for the key type. - - - - - Initializes a new instance of the class that is empty, - has the specified initial capacity, and uses the default equality comparer for the key type. - - The initial number of elements that the can contain. - - - - Initializes a new instance of the class that is empty, has the default initial capacity, and uses the specified . - - The implementation to use when comparing keys, or null to use the default EqualityComparer for the type of the key. - - - - Initializes a new instance of the class that is empty, has the specified initial capacity, and uses the specified . - - The initial number of elements that the can contain. - The implementation to use when comparing keys, or null to use the default EqualityComparer for the type of the key. - - - - An implementation of a Map which has a maximum size and uses a Least Recently Used - algorithm to remove items from the Map when the maximum size is reached and new items are added. - - - - - A map of objects whose mapping entries are sequenced based on the order in which they were - added. This data structure has fast O(1) search time, deletion time, and insertion time - - - This class is not thread safe. - - - - - Construct an empty sentinel used to hold the head (sentinel.next) and the tail (sentinal.prev) - of the list. The sentinal has a key and value - - - - - - Sentinel used to hold the head and tail of the list of entries - - - - - Map of keys to entries - - - - - Holds the number of modifications that have occurred to the map, excluding modifications - made through a collection view's iterator. - - - - - Construct a new sequenced hash map with default initial size and load factor - - - - - Construct a new sequenced hash map with the specified initial size and default load factor - - the initial size for the hash table - - - - Construct a new sequenced hash map with the specified initial size and load factor - - the initial size for the hashtable - the load factor for the hash table - - - - Construct a new sequenced hash map with the specified initial size, hash code provider - and comparer - - the initial size for the hashtable - - - - - Creates an empty Hashtable with the default initial capacity and using the default load factor, - the specified hash code provider and the specified comparer - - - - - - Creates an empty Hashtable with the default initial capacity and using the default load factor, - the specified hash code provider and the specified comparer - - the initial size for the hashtable - the load factor for the hash table - - - - - Removes an internal entry from the linked list. THis does not remove it from the underlying - map. - - - - - - Inserts a new internal entry to the tail of the linked list. This does not add the - entry to the underlying map. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Remove the Entry identified by the Key if it exists. - - The Key to remove. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Return only the Key of the DictionaryEntry - - - - - Return only the Value of the DictionaryEntry - - - - - Return the full DictionaryEntry - - - - - Summary description for ObjectUtils. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Helper class for Reflection related code. - - - - - Determine if the specified overrides the - implementation of Equals from - - The to reflect. - if any type in the hierarchy overrides Equals(object). - - - - Determine if the specified overrides the - implementation of GetHashCode from - - The to reflect. - if any type in the hierarchy overrides GetHashCode(). - - - - Finds the for the property in the . - - The to find the property in. - The name of the Property to find. - The name of the property access strategy. - The to get the value of the Property. - - This one takes a propertyAccessor name as we might know the correct strategy by now so we avoid Exceptions which are costly - - - - - Get the NHibernate for the named property of the . - - The to find the Property in. - The name of the property/field to find in the class. - The name of the property accessor for the property. - - The NHibernate for the named property. - - - - - Get the for the named property of a type. - - The to find the property in. - The name of the property/field to find in the class. - The name of the property accessor for the property. - The for the named property. - - - - Get the for the named property of a type. - - The FullName to find the property in. - The name of the property/field to find in the class. - The name of the property accessor for the property. - The for the named property. - - - - Returns a reference to the Type. - - The name of the class or a fully qualified name. - The Type for the Class. - - - - Load a System.Type given is't name. - - The class FullName or AssemblyQualifiedName - The System.Type - - If the don't represent an - the method try to find the System.Type scanning all Assemblies of the . - - If no System.Type was found for . - - - - Returns a from an already loaded Assembly or an - Assembly that is loaded with a partial name. - - An . - if an exception should be thrown - in case of an error, otherwise. - - A object that represents the specified type, - or if the type cannot be loaded. - - - Attempts to get a reference to the type from an already loaded assembly. If the - type cannot be found then the assembly is loaded using - . - - - - - Returns the value of the static field of . - - The . - The name of the field in the . - The value contained in the field, or if the type or the field does not exist. - - - - Gets the default no arg constructor for the . - - The to find the constructor for. - - The for the no argument constructor, or if the - type is an abstract class. - - - Thrown when there is a problem calling the method GetConstructor on . - - - - - Finds the constructor that takes the parameters. - - The to find the constructor in. - The objects to use to find the appropriate constructor. - - An that can be used to create the type with - the specified parameters. - - - Thrown when no constructor with the correct signature can be found. - - - - - Determines if the is a non creatable class. - - The to check. - if the is an Abstract Class or an Interface. - - - - Unwraps the supplied - and returns the inner exception preserving the stack trace. - - - The to unwrap. - - The unwrapped exception. - - - - Try to find a method in a given type. - - The given type. - The method info. - The found method or null. - - The , in general, become from another . - - - - - Try to find a method in a serie of given types. - - The serie of types where find. - The method info. - The found method or null. - - The , in general, become from another . - - - - - Used to ensure a collection filtering a given IEnumerable by a certain type. - - The type used like filter. - - - - Cache following a "Most Recently Used" (MRU) algorithm for maintaining a - bounded in-memory size; the "Least Recently Used" (LRU) entry is the first - available for removal from the cache. - - - This implementation uses a bounded MRU Map to limit the in-memory size of - the cache. Thus the size of this cache never grows beyond the stated size. - - - - - Cache following a "Most Recently Used" (MRY) algorithm for maintaining a - bounded in-memory size; the "Least Recently Used" (LRU) entry is the first - available for removal from the cache. - - - This implementation uses a "soft limit" to the in-memory size of the cache, - meaning that all cache entries are kept within a completely - {@link java.lang.ref.SoftReference}-based map with the most recently utilized - entries additionally kept in a hard-reference manner to prevent those cache - entries soft references from becoming enqueued by the garbage collector. - Thus the actual size of this cache impl can actually grow beyond the stated - max size bound as long as GC is not actively seeking soft references for - enqueuement. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Just a façade for calling string.Split() - We don't use our StringTokenizer because string.Split() is - more efficient (but it only works when we don't want to retrieve the delimiters) - - separators for the tokens of the list - the string that will be broken into tokens - - - - - Splits the String using the StringTokenizer. - - separators for the tokens of the list - the string that will be broken into tokens - true to include the separators in the tokens. - - - This is more powerful than Split because you have the option of including or - not including the separators in the tokens. - - - - - - - - - - - - - - - - - - - - Takes a fully qualified type name and returns the full name of the - Class - includes namespaces. - - - - - - - Takes a fully qualified type name (can include the assembly) and just returns - the name of the Class. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Converts a in the format of "true", "t", "false", or "f" to - a . - - The string to convert. - - The value converted to a . - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Counts the unquoted instances of the character. - - - - - - - - - - - - - - - - Generate a nice alias for the given class name or collection role - name and unique integer. Subclasses do not have to use - aliases of this form. - - an alias of the form foo1_ - - - - Returns the interned string equal to if there is one, or - otherwise. - - A - A - - - - A StringTokenizer java like object - - - - - - - - - - - - - - - - - - - - - - - - - - Returns an unmodifiable view of the specified IDictionary. - This method allows modules to provide users with "read-only" access to internal dictionary. - Query operations on the returned dictionary "read through" to the specified dictionary, - and attempts to modify the returned dictionary, - whether direct or via its collection views, result in an . - - The type of keys in the dictionary. - The type of values in the dictionary. - - - - Initializes a new instance of the UnmodifiableDictionary class that contains elements wrapped - from the specified IDictionary. - - The whose elements are wrapped. - - - - Count of elements in the collection. Unreliable! - - - - - Indicates failure of an assertion: a possible bug in NHibernate - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The message that describes the error. - - - - Initializes a new instance of the class. - - The message that describes the error. - - The exception that is the cause of the current exception. If the innerException parameter - is not a null reference, the current exception is raised in a catch block that handles - the inner exception. - - - - - Initializes a new instance of the class. - - - The that holds the serialized object - data about the exception being thrown. - - - The that contains contextual information about the source or destination. - - - - - Controls how the session interacts with the second-level - cache and query cache. - - - - - The session will never interact with the cache, except to invalidate - cache items when updates occur - - - - - The session will never read items from the cache, but will add items - to the cache as it reads them from the database. - - - - - The session may read items from the cache, but will not add items, - except to invalidate items when updates occur - - - - The session may read items from the cache, and add items to the cache - - - - The session will never read items from the cache, but will add items - to the cache as it reads them from the database. In this mode, the - effect of hibernate.cache.use_minimal_puts is bypassed, in - order to force a cache refresh - - - - - - - - Initializes a new instance of the class. - - - The exception that is the cause of the current exception. If the innerException parameter - is not a null reference, the current exception is raised in a catch block that handles - the inner exception. - - - - - Initializes a new instance of the class. - - The message that describes the error. - - - - Initializes a new instance of the class. - - The message that describes the error. - - The exception that is the cause of the current exception. If the innerException parameter - is not a null reference, the current exception is raised in a catch block that handles - the inner exception. - - - - - Initializes a new instance of the class - with serialized data. - - - The that holds the serialized object - data about the exception being thrown. - - - The that contains contextual information about the source or destination. - - - - - Transforms Criteria queries - - - - - Returns a clone of the original criteria, which will return the count - of rows that are returned by the original criteria query. - - - - - Returns a clone of the original criteria, which will return the count - of rows that are returned by the original criteria query. - - - - - Creates an exact clone of the criteria - - - - - - Creates an exact clone of the criteria - - - - - - Initializes a new instance of the class. - - The message that describes the error. - The name of the duplicate object - The type of the duplicate object - - - - Initializes a new instance of the class. - - The name of the duplicate object - The type of the duplicate object - - - - Initializes a new instance of the class - with serialized data. - - - The that holds the serialized object - data about the exception being thrown. - - - The that contains contextual information about the source or destination. - - - - - The type of the duplicated object - - - - - The name of the duplicated object - - - - - Allows user code to inspect and/or change property values before they are written and after they - are read from the database - - - - There might be a single instance of IInterceptor for a SessionFactory, or a new - instance might be specified for each ISession. Whichever approach is used, the interceptor - must be serializable if the ISession is to be serializable. This means that SessionFactory - -scoped interceptors should implement ReadResolve(). - - - The ISession may not be invoked from a callback (nor may a callback cause a collection or - proxy to be lazily initialized). - - - - - - Called just before an object is initialized - - - - - - - - The interceptor may change the state, which will be propagated to the persistent - object. Note that when this method is called, entity will be an empty - uninitialized instance of the class. - if the user modified the state in any way - - - - Called when an object is detected to be dirty, during a flush. - - - - - - - - - The interceptor may modify the detected currentState, which will be propagated to - both the database and the persistent object. Note that all flushes end in an actual - synchronization with the database, in which as the new currentState will be propagated - to the object, but not necessarily (immediately) to the database. It is strongly recommended - that the interceptor not modify the previousState. - - if the user modified the currentState in any way - - - - Called before an object is saved - - - - - - - - The interceptor may modify the state, which will be used for the SQL INSERT - and propagated to the persistent object - - if the user modified the state in any way - - - - Called before an object is deleted - - - - - - - - It is not recommended that the interceptor modify the state. - - - - Called before a collection is (re)created. - - - Called before a collection is deleted. - - - Called before a collection is updated. - - - - Called before a flush - - The entities - - - - Called after a flush that actually ends in execution of the SQL statements required to - synchronize in-memory state with the database. - - The entitites - - - - Called when a transient entity is passed to SaveOrUpdate. - - - The return value determines if the object is saved - - - the entity is passed to Save(), resulting in an INSERT - - the entity is passed to Update(), resulting in an UPDATE - - Hibernate uses the unsaved-value mapping to determine if the object is unsaved - - - A transient entity - Boolean or to choose default behaviour - - - - Called from Flush(). The return value determines whether the entity is updated - - - - an array of property indicies - the entity is dirty - an empty array - the entity is not dirty - - use Hibernate's default dirty-checking algorithm - - - A persistent entity - - - - - - An array of dirty property indicies or to choose default behavior - - - - Instantiate the entity class. Return to indicate that Hibernate should use the default - constructor of the class - - the name of the entity - The type of entity instance to be returned. - the identifier of the new instance - An instance of the class, or to choose default behaviour - - The identifier property of the returned instance - should be initialized with the given identifier. - - - - Get the entity name for a persistent or transient instance - an entity instance - the name of the entity - - - Get a fully loaded entity instance that is cached externally - the name of the entity - the instance identifier - a fully initialized entity - - - - Called when a NHibernate transaction is begun via the NHibernate - API. Will not be called if transactions are being controlled via some other mechanism. - - - - - Called before a transaction is committed (but not before rollback). - - - - - Called after a transaction is committed or rolled back. - - - - Called when sql string is being prepared. - sql to be prepared - original or modified sql - - - - Called when a session-scoped (and only session scoped) interceptor is attached - to a session - - - session-scoped-interceptor is an instance of the interceptor used only for one session. - The use of singleton-interceptor may cause problems in multi-thread scenario. - - - - - - Defines the representation modes available for entities. - - - - Represents a fetching strategy. - - - This is used together with the API to specify - runtime fetching strategies. - - For Hql queries, use the FETCH keyword instead. - - - - - - Default to the setting configured in the mapping file. - - - - - Fetch eagerly, using a separate select. Equivalent to - fetch="select" (and outer-join="false") - - - - - Fetch using an outer join. Equivalent to - fetch="join" (and outer-join="true") - - - - - Indicates that an expected getter or setter method could not be found on a class - - - - - Initializes a new instance of the class. - - The message that describes the error. - - - - Initializes a new instance of the class. - - The message that describes the error. - - The exception that is the cause of the current exception. If the innerException parameter - is not a null reference, the current exception is raised in a catch block that handles - the inner exception. - - - - - Initializes a new instance of the class - with serialized data. - - - The that holds the serialized object - data about the exception being thrown. - - - The that contains contextual information about the source or destination. - - - - - Represents a flushing strategy. - - - The flush process synchronizes database state with session state by detecting state - changes and executing SQL statements - - - - - Special value for unspecified flush mode (like in Java). - - - - - The ISession is never flushed unless Flush() is explicitly - called by the application. This mode is very efficient for read only - transactions - - - - - The ISession is flushed when Transaction.Commit() is called - - - - - The ISession is sometimes flushed before query execution in order to - ensure that queries never return stale state. This is the default flush mode. - - - - - The is flushed before every query. This is - almost always unnecessary and inefficient. - - - - - Provides XML marshalling for classes registered with a SessionFactory - - - - Hibernate defines a generic XML format that may be used to represent any class - (hibernate-generic.dtd). The user configures an XSLT stylesheet for marshalling - data from this generic format to an application and/or user readable format. By default, - Hibernate will use hibernate-default.xslt which maps data to a useful human- - readable format. - - - The property xml.output_stylesheet specifies a user-written stylesheet. - Hibernate will attempt to load the stylesheet from the classpath first and if not found, - will attempt to load it as a file - - - It is not intended that implementors be threadsafe - - - - - - Add an object to the output document. - - A transient or persistent instance - Databinder - - - - Add a collection of objects to the output document - - A collection of transient or persistent instance - Databinder - - - - Output the generic XML representation of the bound objects - - Generic Xml representation - - - - Output the generic XML Representation of the bound objects - to a XmlDocument - - A generic Xml tree - - - - Output the custom XML representation of the bound objects - - Custom Xml representation - - - - Output the custom XML representation of the bound objects as - an XmlDocument - - A custom Xml Tree - - - - Controls whether bound objects (and their associated objects) that are lazily instanciated - are explicityl initialized or left as they are - - True to explicitly initilize lazy objects, false to leave them in the state they are in - - - - Performs a null safe comparison using "==" instead of Object.Equals() - - First object to compare. - Second object to compare. - - true if x is the same instance as y or if both are null references; otherwise, false. - - - This is Lazy collection safe since it uses , - unlike Object.Equals() which currently causes NHibernate to load up the collection. - This behaivior of Collections is likely to change because Java's collections override Equals() and - .net's collections don't. So in .net there is no need to override Equals() and - GetHashCode() on the NHibernate Collection implementations. - - - - - Thrown if Hibernate can't instantiate an entity or component class at runtime. - - - - - Initializes a new instance of the class. - - The message that describes the error. - - The exception that is the cause of the current exception. If the innerException parameter - is not a null reference, the current exception is raised in a catch block that handles - the inner exception. - - The that NHibernate was trying to instantiate. - - - - Initializes a new instance of the class - with serialized data. - - - The that holds the serialized object - data about the exception being thrown. - - - The that contains contextual information about the source or destination. - - - - - Sets the serialization info for after - getting the info from the base Exception. - - - The that holds the serialized object - data about the exception being thrown. - - - The that contains contextual information about the source or destination. - - - - - Gets the that NHibernate was trying to instantiate. - - - - - Gets a message that describes the current . - - - The error message that explains the reason for this exception and the Type that - was trying to be instantiated. - - - - - Thrown when an invalid type is specified as a proxy for a class. - The exception is also thrown when a class is specified as lazy, - but cannot be used as a proxy for itself. - - - - - A problem occurred trying to lazily initialize a collection or proxy (for example the session - was closed) or iterate query results. - - - - - Initializes a new instance of the class. - - The name of the entity where the exception was thrown - The id of the entity where the exception was thrown - The message that describes the error. - - - - Initializes a new instance of the class. - - The message that describes the error. - - - - Initializes a new instance of the class. - - - The exception that is the cause of the current exception. If the innerException parameter - is not a null reference, the current exception is raised in a catch block that handles - the inner exception. - - - - - Initializes a new instance of the class. - - The message that describes the error. - - The exception that is the cause of the current exception. If the innerException parameter - is not a null reference, the current exception is raised in a catch block that handles - the inner exception. - - - - - Initializes a new instance of the class - with serialized data. - - - The that holds the serialized object - data about the exception being thrown. - - - The that contains contextual information about the source or destination. - - - - - Instances represent a lock mode for a row of a relational database table. - - - It is not intended that users spend much time worrying about locking since Hibernate - usually obtains exactly the right lock level automatically. Some "advanced" users may - wish to explicitly specify lock levels. - - - - - - - - - - - - - - - Is this lock mode more restrictive than the given lock mode? - - - - - - Is this lock mode less restrictive than the given lock mode? - - - - - - No lock required. - - - If an object is requested with this lock mode, a Read lock - might be obtained if necessary. - - - - - A shared lock. - - - Objects are loaded in Read mode by default - - - - - An upgrade lock. - - - Objects loaded in this lock mode are materialized using an - SQL SELECT ... FOR UPDATE - - - - - Attempt to obtain an upgrade lock, using an Oracle-style - SELECT ... FOR UPGRADE NOWAIT. - - - The semantics of this lock mode, once obtained, are the same as Upgrade - - - - - A Write lock is obtained when an object is updated or inserted. - - - This is not a valid mode for Load() or Lock(). - - - - - Similar to except that, for versioned entities, - it results in a forced version increment. - - - - - Provides access to the full range of NHibernate built-in types. - IType instances may be used to bind values to query parameters. - Also a factory for new Blobs and Clobs. - - - - - Guesses the IType of this object - - The obj. - - - - - Guesses the IType by the type - - The type. - - - - - NHibernate Ansi String type - - - - - NHibernate binary type - - - - - NHibernate binary blob type - - - - - NHibernate boolean type - - - - - NHibernate byte type - - - - - NHibernate character type - - - - - NHibernate Culture Info type - - - - - NHibernate date type - - - - - NHibernate date type - - - - - NHibernate date type - - - - - NHibernate date type - - - - - NHibernate decimal type - - - - - NHibernate double type - - - - - NHibernate Currency type (System.Decimal - DbType.Currency) - - - - - NHibernate Guid type. - - - - - NHibernate System.Int16 (short in C#) type - - - - - NHibernate System.Int32 (int in C#) type - - - - - NHibernate System.Int64 (long in C#) type - - - - - NHibernate System.SByte type - - - - - NHibernate System.UInt16 (ushort in C#) type - - - - - NHibernate System.UInt32 (uint in C#) type - - - - - NHibernate System.UInt64 (ulong in C#) type - - - - - NHibernate System.Single (float in C#) Type - - - - - NHibernate String type - - - - - NHibernate string clob type - - - - - NHibernate Time type - - - - - NHibernate Ticks type - - - - - NHibernate Ticks type - - - - - NHibernate Ticks type - - - - - NHibernate Timestamp type - - - - - NHibernate TrueFalse type - - - - - NHibernate YesNo type - - - - - NHibernate class type - - - - - NHibernate class meta type for association of kind any. - - - - - - NHibernate serializable type - - - - - NHibernate System.Object type - - - - - A NHibernate persistent enum type - - - - - - - A NHibernate serializable type - - - - - - - A NHibernate serializable type - - a type mapping to a single column - the entity identifier type - - - - - A NHibernate persistent object (entity) type - - a mapped entity class - - - - - A NHibernate persistent object (entity) type - - a mapped entity class - - - - A Hibernate persistent object (entity) type. - a mapped entity class - - - - A NHibernate custom type - - a class that implements UserType - - - - - Force initialization of a proxy or persistent collection. - - a persistable object, proxy, persistent collection or null - if we can't initialize the proxy at this time, eg. the Session was closed - - - - Is the proxy or persistent collection initialized? - - a persistable object, proxy, persistent collection or null - true if the argument is already initialized, or is not a proxy or collection - - - - Get the true, underlying class of a proxied persistent class. This operation - will initialize a proxy by side-effect. - - a persistable object or proxy - the true class of the instance - - - - Close an obtained from an - returned by NHibernate immediately, instead of waiting until the session is - closed or disconnected. - - - - - Close an returned by NHibernate immediately, - instead of waiting until the session is closed or disconnected. - - - - - Check if the property is initialized. If the named property does not exist - or is not persistent, this method always returns true. - - The potential proxy - the name of a persistent attribute of the object - - true if the named property of the object is not listed as uninitialized; - false if the object is an uninitialized proxy, or the named property is uninitialized - - - - - This exception is thrown when an operation would - break session-scoped identity. This occurs if the - user tries to associate two different instances of - the same class with a particular identifier, - in the scope of a single . - - - - - Initializes a new instance of the class. - - The message that describes the error. - The identifier of the object that caused the exception. - The EntityName of the object attempted to be loaded. - - - - Initializes a new instance of the class. - - The identifier of the object that caused the exception. - The EntityName of the object attempted to be loaded. - - - - Initializes a new instance of the class. - - - - - Sets the serialization info for after - getting the info from the base Exception. - - - The that holds the serialized object - data about the exception being thrown. - - - The that contains contextual information about the source or destination. - - - - - Thrown when the application calls IQuery.UniqueResult() - and the query returned more than one result. Unlike all other NHibernate - exceptions, this one is recoverable! - - - - - Initializes a new instance of the class. - - The number of items in the result. - - - - Initializes a new instance of the class - with serialized data. - - - The that holds the serialized object - data about the exception being thrown. - - - The that contains contextual information about the source or destination. - - - - - Thrown when the user tries to pass a deleted object to the ISession. - - - - - Thrown when Hibernate could not resolve an object by id, especially when - loading an association. - - - - - Initializes a new instance of the class. - - The identifier of the object that caused the exception. - The of the object attempted to be loaded. - - - - Initializes a new instance of the class. - - The message that describes the error. - The identifier of the object that caused the exception. - The of the object attempted to be loaded. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with serialized data. - - - The that holds the serialized object - data about the exception being thrown. - - - The that contains contextual information about the source or destination. - - - - - Thrown when ISession.Load() fails to select a row with - the given primary key (identifier value). This exception might not - be thrown when Load() is called, even if there was no - row on the database, because Load() returns a proxy if - possible. Applications should use ISession.Get() to test if - a row exists in the database. - - - - - Initializes a new instance of the class. - - The identifier of the object that was attempting to be loaded. - The that NHibernate was trying to find a row for in the database. - - - - Initializes a new instance of the class - with serialized data. - - - The that holds the serialized object - data about the exception being thrown. - - - The that contains contextual information about the source or destination. - - - - - Thrown when the user passes a persistent instance to a ISession method that expects a - transient instance - - - - - Initializes a new instance of the class. - - The message that describes the error. - - - - Initializes a new instance of the class - with serialized data. - - - The that holds the serialized object - data about the exception being thrown. - - - The that contains contextual information about the source or destination. - - - - - A problem occurred accessing a property of an instance of a persistent class by reflection - - - - - Initializes a new instance of the class. - - The message that describes the error. - - The exception that is the cause of the current exception. If the innerException parameter - is not a null reference, the current exception is raised in a catch block that handles - the inner exception. - - A indicating if this was a "setter" operation. - The that NHibernate was trying find the Property or Field in. - The mapped property name that was trying to be accessed. - - - - Initializes a new instance of the class - with serialized data. - - - The that holds the serialized object - data about the exception being thrown. - - - The that contains contextual information about the source or destination. - - - - - Sets the serialization info for after - getting the info from the base Exception. - - - The that holds the serialized object - data about the exception being thrown. - - - The that contains contextual information about the source or destination. - - - - - Gets the that NHibernate was trying find the Property or Field in. - - - - - Gets a message that describes the current . - - - The error message that explains the reason for this exception and - information about the mapped property and its usage. - - - - - Indicates that an expected getter or setter method could not be found on a class - - - - - Initializes a new instance of the class, - used when a property get/set accessor is missing. - - The that is missing the property - The name of the missing property - The type of the missing accessor - ("getter" or "setter") - - - - Initializes a new instance of the class, - used when a field is missing. - - The that is missing the field - The name of the missing property - - - - Initializes a new instance of the class - with serialized data. - - - The that holds the serialized object - data about the exception being thrown. - - - The that contains contextual information about the source or destination. - - - - - Initializes a new instance of the class. - - The message that describes the error. - The that NHibernate was trying to access. - The name of the Property that was being get/set. - - - - Initializes a new instance of the class - with serialized data. - - - The that holds the serialized object - data about the exception being thrown. - - - The that contains contextual information about the source or destination. - - - - - Sets the serialization info for after - getting the info from the base Exception. - - - The that holds the serialized object - data about the exception being thrown. - - - The that contains contextual information about the source or destination. - - - - - Represents a replication strategy. - - - - - - Throw an exception when a row already exists - - - - - Ignore replicated entities when a row already exists - - - - - When a row already exists, choose the latest version - - - - - Overwrite existing rows when a row already exists - - - - - Thrown when a version number check failed, indicating that the - contained stale data (when using long transactions with - versioning). - - - - - Initializes a new instance of the class. - - The EntityName that NHibernate was trying to update in the database. - The identifier of the object that is stale. - - - - Initializes a new instance of the class - with serialized data. - - - The that holds the serialized object - data about the exception being thrown. - - - The that contains contextual information about the source or destination. - - - - - Sets the serialization info for after - getting the info from the base Exception. - - - The that holds the serialized object - data about the exception being thrown. - - - The that contains contextual information about the source or destination. - - - - - Gets the EntityName that NHibernate was trying to update in the database. - - - - - Gets the identifier of the object that is stale. - - - - - Gets a message that describes the current . - - The error message that explains the reason for this exception. - - - - Indicated that a transaction could not be begun, committed, or rolled back - - - - - Initializes a new instance of the class. - - The message that describes the error. - - - - Initializes a new instance of the class. - - The message that describes the error. - - The exception that is the cause of the current exception. If the innerException parameter - is not a null reference, the current exception is raised in a catch block that handles - the inner exception. - - - - - Initializes a new instance of the class - with serialized data. - - - The that holds the serialized object - data about the exception being thrown. - - - The that contains contextual information about the source or destination. - - - - - Throw when the user passes a transient instance to a ISession method that expects - a persistent instance - - - - - Initializes a new instance of the class. - - The message that describes the error. - - - - Initializes a new instance of the class - with serialized data. - - - The that holds the serialized object - data about the exception being thrown. - - - The that contains contextual information about the source or destination. - - - - - Used when a user provided type does not match the expected one - - - - - Thrown when ISession.Load() selects a row with the given primary key (identifier value) - but the row's discriminator value specifies a different subclass from the one requested - - - - - Initializes a new instance of the class. - - The message that describes the error. - The identifier of the object that was being loaded. - The name of entity that NHibernate was told to load. - - - - Initializes a new instance of the class - with serialized data. - - - The that holds the serialized object - data about the exception being thrown. - - - The that contains contextual information about the source or destination. - - - - - Sets the serialization info for after - getting the info from the base Exception. - - - The that holds the serialized object - data about the exception being thrown. - - - The that contains contextual information about the source or destination. - - - - - Gets the identifier of the object that was being loaded. - - - - - Gets the name of entity that NHibernate was told to load. - - - - - Gets a message that describes the current . - - The error message that explains the reason for this exception. - -
            -
            diff --git a/bin/Nant/NAnt.CompressionTasks.dll b/bin/Nant/NAnt.CompressionTasks.dll deleted file mode 100644 index 30f8af8db..000000000 Binary files a/bin/Nant/NAnt.CompressionTasks.dll and /dev/null differ diff --git a/bin/Nant/NAnt.CompressionTasks.xml b/bin/Nant/NAnt.CompressionTasks.xml deleted file mode 100644 index e92688399..000000000 --- a/bin/Nant/NAnt.CompressionTasks.xml +++ /dev/null @@ -1,615 +0,0 @@ - - - - NAnt.CompressionTasks - - - - - Expands a file packed using GZip compression. - - - Expands "test.tar.gz" to "test2.tar". - - - ]]> - - - - - - Extracts the file from the gzip archive. - - - - - The file to expand. - - - - - The destination file. - - - - - Creates a tar file from the specified filesets. - - - Uses #ziplib (SharpZipLib), an open source Tar/Zip/GZip library written entirely in C#. - - - - Tar all files in ${build.dir} and ${doc.dir} into a file - called "backup.tar.gz", and apply gzip compression to it. - - - - - - - - - - - ]]> - - - - - - Creates the tar file. - - - - - The tar file to create. - - - - - Include empty directories in the generated tar file. The default is - . - - - - - The set of files to be included in the archive. - - - - - The compression method. The default is . - - - - - Specifies the compression methods supported by . - - - - - No compression. - - - - - GZIP compression. - - - - - BZIP2 compression. - - - - - Extracts files from a zip file. - - - - Uses #ziplib - (SharpZipLib), an open source Zip/GZip library written entirely in C#. - - - - Extracts all the file from the zip, preserving the directory structure. - - - ]]> - - - - - - Extracts the files from the zip file. - - - - - Extracts a file entry from the specified stream. - - The containing the compressed entry. - The name of the entry including directory information. - The date of the entry. - The uncompressed size of the entry. - - The destination directory for the entry could not be created. - -or- - The entry could not be extracted. - - - We cannot rely on the fact that the directory entry of a given file - is created before the file is extracted, so we should create the - directory if it doesn't yet exist. - - - - - Extracts a directory entry from the specified stream. - - The containing the directory entry. - The name of the directory entry. - The date of the entry. - - The destination directory for the entry could not be created. - - - - - The archive file to expand. - - - - - The directory where the expanded files should be stored. The - default is the project base directory. - - - - - Overwrite files, even if they are newer than the corresponding - entries in the archive. The default is . - - - - - The character encoding that has been used for filenames inside the - zip file. The default is the system's OEM code page. - - - - - Creates a zip file from the specified filesets. - - - - Uses #ziplib - (SharpZipLib), an open source Tar/Zip/GZip library written entirely in C#. - - - - - Zip all files in ${build.dir} and ${doc.dir} into a file - called "backup.zip". - - - - - - - - - - - ]]> - - - - - - Creates the zip file. - - - - - The zip file to create. - - - - - The comment for the file. - - - - - Date/time stamp for the files in the format MM/DD/YYYY HH:MM:SS. - - - - - Desired level of compression. Possible values are 0 (STORE only) - to 9 (highest). The default is 6. - - - - - Include empty directories in the generated zip file. The default is - . - - - - - The set of files to be included in the archive. - - - - - Specifies the behaviour when a duplicate file is found. The default - is . - - - - - The character encoding to use for filenames and comment inside the - zip file. The default is the system's OEM code page. - - - - - Specifies how entries with the same name should be processed. - - - - - Overwrite existing entry with same name. - - - - - Preserve existing entry with the same name. - - - - - Report failure when two entries have the same name. - - - - - A is a with extra - attributes useful in the context of the . - - - - - A 3 digit octal string, specify the user, group and other modes - in the standard Unix fashion. Only applies to plain files. The - default is 644. - - - - - A 3 digit octal string, specify the user, group and other modes - in the standard Unix fashion. Only applies to directories. The - default is 755. - - - - - The username for the tar entry. - - - - - The user identifier (UID) for the tar entry. - - - - - The groupname for the tar entry. - - - - - The group identifier (GID) for the tar entry. - - - - - The top level directory prefix. If set, all file and directory paths - in the fileset will have this value prepended. Can either be a single - directory name or a "/" separated path. - - - - - Contains a collection of elements. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - 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. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Get the total number of files that are represented by the - filesets in this collection. - - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - A is a with extra - attributes useful in the context of the . - - - - - The top level directory prefix. If set, all file and directory paths - in the fileset will have this value prepended. Can either be a single - directory name or a "/" separated path. - - - - - Contains a collection of elements. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - 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. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Get the total number of files that are represented by the - filesets in this collection. - - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - diff --git a/bin/Nant/NAnt.Core.dll b/bin/Nant/NAnt.Core.dll deleted file mode 100644 index aa48486f3..000000000 Binary files a/bin/Nant/NAnt.Core.dll and /dev/null differ diff --git a/bin/Nant/NAnt.Core.xml b/bin/Nant/NAnt.Core.xml deleted file mode 100644 index ef37c9948..000000000 --- a/bin/Nant/NAnt.Core.xml +++ /dev/null @@ -1,15577 +0,0 @@ - - - - NAnt.Core - - - - - Used to indicate that a property should be able to be converted into a - . - - - - - Base class for all validator attributes. - - - - - Validates the specified value. - - The value to be validated. - The validation fails. - - - - Initializes a new instance of the - class. - - - - - Checks if the specified value can be converted to a . - - The value to be checked. - cannot be converted to a . - - - - Indicates that property should be treated as a XML attribute for the - task. - - - Examples of how to specify task attributes - - #region Public Instance Properties - - [BuildAttribute("out", Required=true)] - public string Output { - get { return _out; } - set { _out = value; } - } - - [BuildAttribute("optimize")] - [BooleanValidator()] - public bool Optimize { - get { return _optimize; } - set { _optimize = value; } - } - - [BuildAttribute("warnlevel")] - [Int32Validator(0,4)] // limit values to 0-4 - public int WarnLevel { - get { return _warnLevel; } - set { _warnLevel = value; } - } - - [BuildElement("sources")] - public FileSet Sources { - get { return _sources; } - set { _sources = value; } - } - - #endregion Public Instance Properties - - #region Private Instance Fields - - private string _out = null; - private bool _optimize = false; - private int _warnLevel = 4; - private FileSet _sources = new FileSet(); - - #endregion Private Instance Fields - - - - - - Initializes a new instance of the with the - specified name. - - The name of the attribute. - is . - is a zero-length . - - - - Gets or sets the name of the XML attribute. - - - The name of the XML attribute. - - - - - Gets or sets a value indicating whether the attribute is required. - - - if the attribute is required; otherwise, - . The default is . - - - - - Gets or sets a value indicating whether property references should - be expanded. - - - if properties should be expanded; otherwise - . The default is . - - - - - Used to specify how this attribute will be handled as the XML is - parsed and given to the element. - - - if XML should be processed; otherwise - . The default is . - - - - - Indicates that property should be treated as a XML arrayList - - - - Should only be applied to properties exposing strongly typed arrays or - strongly typed collections. - - - The XML format is like this: - - - - - - - - ]]> - - - - - - - Indicates that the property should be treated as an XML element and - further processing should be done. - - - - The XML format is like this: - - - - - - - ]]> - - - - - - - Initializes a new instance of the with the - specified name. - - The name of the attribute. - is . - is a zero-length . - - - - Gets or sets the name of the attribute. - - - The name of the attribute. - - - - - Gets or sets a value indicating whether the attribute is required. - - - if the attribute is required; otherwise, - . The default is . - - - - - Used to specify how this element will be handled as the XML is parsed - and given to the element. - - - if XML should be processed; otherwise - . The default is . - - - - - Initializes a new instance of the - with the specified name. - - The name of the attribute. - is . - is a zero-length . - - - - Gets or sets the type of objects that this container holds. - - - The type of the elements that this container holds. - - - - This can be used for validation and schema generation. - - - If not specified, the type of the elements will be determined using - reflection. - - - is . - - - - Indicates that the property should be treated as a container for a - collection of build elements. - - - - Should only be applied to properties exposing strongly typed arrays or - strongly typed collections. - - - The XML format is like this: - - - - - - - - - - ]]> - - - - - - - Initializes a new instance of the with the - specified name and child element name. - - The name of the collection. - The name of the child elements in the collection - is . - is a zero-length . - - - - The name of the child element within the collection. - - - The name to check for in the XML of the elements in the collection. - - - This can be used for validation and schema generation. - - - - - Used to indicate that a property should be able to be converted into a - . - - - - - Initializes a new instance of the - class. - - - - - Checks if the specified value can be converted to a . - - The value to be checked. - cannot be converted to a . - - - - Indicates that class should be treated as a NAnt element. - - - Attach this attribute to a subclass of Element to have NAnt be able - to recognize it. The name should be short but must not confict - with any other element already in use. - - - - - Initializes a new instance of the - with the specified name. - - The name of the element. - is . - is a zero-length . - - - - Gets or sets the name of the element. - - - The name of the element. - - - - - Indicates that a property should be treated as a XML file set for the - task. - - - - - Initializes a new instance of the with the - specified name. - - The name of the attribute. - is . - is a zero-length . - - - - Indicates that the value of the property to which the attribute is - assigned, can be configured on the framework-level in the NAnt application - configuration file. - - - - The following example shows a property of which the value can be - configured for a specific framework in the NAnt configuration file. - - - [FrameworkConfigurable("exename", Required=true)] - public virtual string ExeName { - get { return _exeName; } - set { _exeName = value; } - } - - - - - - Initializes a new instance of the - with the specified attribute name. - - The name of the framework configuration attribute. - is a . - is a zero-length . - - - - Gets or sets the name of the framework configuration attribute. - - The name of the framework configuration attribute. - - - - Gets or sets a value indicating whether the configuration attribute - is required. - - - if the configuration attribute is required; - otherwise, . The default is . - - - - - Gets or sets a value indicating whether property references should - be expanded. - - - if properties should be expanded; otherwise - . The default is . - - - - - Indicates that the method should be exposed as a function in NAnt build - files. - - - Attach this attribute to a method of a class that derives from - to have NAnt be able to recognize it. - - - - - Initializes a new instance of the - class with the specified name. - - The name of the function. - is . - is a zero-length . - - - - Gets or sets the name of the function. - - - The name of the function. - - - - - Indicates that class should be treated as a set of functions. - - - Attach this attribute to a class that derives from - to have NAnt be able to recognize it as containing custom functions. - - - - - Initializes a new instance of the - class with the specified name. - - The prefix used to distinguish the functions. - The category of the functions. - - is . - -or- - is . - - - is a zero-length . - -or- - is a zero-length . - - - - - Gets or sets the category of the function set. - - - The name of the category of the function set. - - - This will be displayed in the user docs. - - - - - Gets or sets the prefix of all functions in this function set. - - - The prefix of the functions in this function set. - - - - - Indicates that property should be able to be converted into a - within the given range. - - - - - Initializes a new instance of the - class. - - - - - Initializes a new instance of the - class with the specied minimum and maximum values. - - The minimum value. - The maximum value. - - - - Checks whether the specified value can be converted to an - and whether the value lies within the range defined by the - and properties. - - The value to be checked. - - - cannot be converted to an . - - -or- - - is not in the range defined by - and . - - - - - - Gets or sets the minimum value. - - - The minimum value. The default is . - - - - - Gets or sets the maximum value. - - - The maximum value. The default is . - - - - - The base of the number to validate, which must be 2, 8, 10, or 16. - - - The base of the number to validate. - - - The default is 10. - - - - - Defines possible locations in which a task executable can be located. - - - - - Locates the task executable in the current Framework directory. - - - - - Locates the task executable in the current Framework SDK directory. - - - - - Indicates the location that a task executable can be located in. - - - - When applied to a task deriving from , - the program to execute will first be searched for in the designated - location. - - - If the program does not exist in that location, and the file name is - not an absolute path then the list of tool paths of the current - target framework will be searched (in the order in which they are - defined in the NAnt configuration file). - - - - - - Initializes a new instance of the - with the specified location. - - The of the attribute. - - - - Gets or sets the of the task. - - - The location type of the task to which the attribute is assigned. - - - - - Used to indicate whether a property should allow - an empty string value or not. - - - - - Initializes a new instance of the - class. - - - - - Checks if the specified value adheres to the rules defined by the - properties of the . - - The value to be checked. - is an empty string value and is set to . - - - - Gets or sets a value indicating whether an empty string or - should be a considered a valid value. - - - if an empty string or - should be considered a valid value; otherwise, . - The default is . - - - - - Gets or sets a regular expression. The string will be validated to - determine if it matches the expression. - - - - - - - - An optional error message that can be used to better describe the - regular expression error. - - - - - Indicates that property should be treated as a XML attribute for the - task. - - - Examples of how to specify task attributes - - // task XmlType default is string - [TaskAttribute("out", Required=true)] - string _out = null; // assign default value here - - [TaskAttribute("optimize")] - [BooleanValidator()] - // during ExecuteTask you can safely use Convert.ToBoolean(_optimize) - string _optimize = Boolean.FalseString; - - [TaskAttribute("warnlevel")] - [Int32Validator(0,4)] // limit values to 0-4 - // during ExecuteTask you can safely use Convert.ToInt32(_optimize) - string _warnlevel = "0"; - - [BuildElement("sources")] - FileSet _sources = new FileSet(); - - NOTE: Attribute values must be of type of string if you want - to be able to have macros. The field stores the exact value during - Initialize. Just before ExecuteTask is called NAnt will expand - all the macros with the current values. - - - - - Initializes a new instance of the - with the specified attribute name. - - The name of the task attribute. - is a . - is a zero-length . - - - - Indicates that class should be treated as a task. - - - Attach this attribute to a subclass of Task to have NAnt be able - to recognize it. The name should be short but must not confict - with any other task already in use. - - - - - Initializes a new instance of the - with the specified name. - - The name of the task. - is . - is a zero-length . - - - - Represents an explicitly named list of directories. - - - A is useful when you want to capture a list of - directories regardless whether they currently exist. - - - - - Models a NAnt XML element in the build file. - - - - Automatically validates attributes in the element based on attributes - applied to members in derived classes. - - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - from the specified element. - - The element that should be used to create a new instance of the class. - - - - Performs default initialization. - - - Derived classes that wish to add custom initialization should override - the method. - - - - - Logs a message with the given priority. - - The message priority at which the specified message is to be logged. - The message to be logged. - - The actual logging is delegated to the project. - - - - - Logs a message with the given priority. - - The message priority at which the specified message is to be logged. - The message to log, containing zero or more format items. - An array containing zero or more objects to format. - - The actual logging is delegated to the project. - - - - - Derived classes should override to this method to provide extra - initialization and validation not covered by the base class. - - The XML node of the element to use for initialization. - - - - Derived classes should override to this method to provide extra - initialization and validation not covered by the base class. - - - Access to the that was used to initialize - this is available through . - - - - - Copies all instance data of the to a given - . - - - - - Performs initialization using the given set of properties. - - - - - Initializes all build attributes and child elements. - - - - - Locates the XML node for the specified attribute in the project - configuration node. - - The name of attribute for which the XML configuration node should be located. - The framework to use to obtain framework specific information, or if no framework specific information should be used. - - The XML configuration node for the specified attribute, or - if no corresponding XML node could be - located. - - - If there's a valid current framework, the configuration section for - that framework will first be searched. If no corresponding - configuration node can be located in that section, the framework-neutral - section of the project configuration node will be searched. - - - - - Returns the of the - assigned to the specified - . - - The of which the assigned should be retrieved. - - The assigned to the specified - or a null reference is no - is assigned to the . - - - - - Gets or sets the parent of the element. - - - The parent of the element. - - - This will be the parent , , or - depending on where the element is defined. - - - - - Gets the name of the XML element used to initialize this element. - - - The name of the XML element used to initialize this element. - - - - - Gets or sets the to which this element belongs. - - - The to which this element belongs. - - - - - Gets the properties local to this and the - . - - - The properties local to this and the . - - - - - Gets or sets the . - - - The . - - - The defines the current namespace - scope and provides methods for looking up namespace information. - - - - - Gets or sets the XML node of the element. - - - The XML node of the element. - - - - - Gets or sets the location in the build file where the element is - defined. - - - The location in the build file where the element is defined. - - - - - Gets a value indicating whether the element is performing additional - processing using the that was used to - initialize the element. - - - . - - - - Elements that need to perform additional processing of the - that was used to initialize the element, should - override this property and return . - - - When , no build errors will be reported for - unknown nested build elements. - - - - - - Configures an using meta-data provided by - assigned attributes. - - - - - Initializes a new instance of the - class for the given . - - The for which an should be created. - The to initialize the with. - The to use for property expansion. - The framework that the should target. - - is . - -or- - is . - -or- - is . - - - - - Creates a child using property set/get methods. - - The instance that represents the property of the current class. - The used to initialize the new instance. - The collection of property values to use for macro expansion. - The from which to obtain framework-specific information. - The child. - - - - Creates an for the given - . - - The for which an should be created. - - An for the given . - - - - - Holds the that should be initialized. - - - - - Holds the that should be used to initialize - the . - - - - - Holds the dictionary that should be used for property - expansion. - - - - - Holds the framework that should be targeted by the - that we're configuring, or - if there's no current target - framework. - - - - - Holds the names of the attributes that still need to be - processed. - - - - - Holds the names of the child nodes that still need to be - processed. - - - - - Holds the logger for the current class. - - - - - Holds the cache of instances. - - - - - Gets the . - - - The . - - - The defines the current namespace - scope and provides methods for looking up namespace information. - - - - - Internal interface used for setting element attributes. - - - - - The base of the directory of this dirlist. The default is the project - base directory. - - - - - Gets the collection of environment variables that should be passed - to external programs that are launched. - - - - The collection of environment variables that should be passed - to external programs that are launched. - - - - - - The command-line arguments for the runtime engine. - - - - - Represents an in which one or more extensions - are found. - - - - - Initializes a new instance of the - class for a given . - - The for which to construct an . - - - - Gets the containing extensions. - - - - - Initializes a instance of the - class for an extension in a given . - - The in which the extension is found. - is . - - - - Gets the in which the extension - was found. - - - - - Gets the from which the extension will - be created. - - - The containing the extension. - - - - - Initializes a new instance of the - with the specified type. - - The type of the to consume. - is . - - - - Responsible for scanning types for plugins, and maintaining a cache of - instances. - - - - - Scans a given for plugins. - - The containing the to scan. - The to scan. - The which will be used to output messages to the build log. - - if represents a - ; otherwise, . - - - - - Registers matching plugins for the specified . - - The which plugins must be registered for. - is . - - - - Functions as a chainable TextReader - - - Implements a abstraction over a TextReader that allows the class to represent - either a TextReader or another ChainableReader to which it is chained. - - By passing a ChainableReader as a constructor paramater it is possiable to - chain many ChainableReaders together. The last ChainableReader in the chain must - be based on a TextReader. - - - - - Makes it so all calls to Read and Peek are passed the ChainableReader - passed as a parameter. - - ChainableReader to forward calls to - - - - Makes it so all calls to Read and Peek are passed the TextReader - passed as a parameter. - - TextReader to forward calls to - - - - Forwards Peek calls to the TextReader or ChainableReader passed in the corresponding constructor. - - Character or -1 if end of stream - - - - Forwards Read calls to the TextReader or ChainableReader passed in the corresponding constructor. - - - Character or -1 if end of stream. - - - - - Closes the reader. - - - - - Calls close and supresses the finalizer for the object. - - - - - Gets a value indicating if the reader is backed by a stream in the - chain. - - - if the reader is backed by a stream; - otherwise, . - - - - - Allows a file's content to be modified while performing an operation. - - - - - Called after construction and after properties are set. Allows - for filter initialization. - - - - - If then the filter will be used; otherwise, - skipped. The default is . - - - - - Opposite of . If - then the filter will be executed; otherwise, skipped. The default - is . - - - - - Creates a new instance of the class - for the specified class in the specified - . - - The containing the . - The class representing the . - - - - Gets the name of the class that can be created - using this . - - - The name of the class that can be created using - this . - - - - - Gets the name of the filter which the - can create. - - - The name of the task which the can - create. - - - - - Contains a strongly typed collection of objects. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Determines whether a for the specified - task is in the collection. - - The name of task for which the should be located in the collection. - - if a for - the specified task is found in the collection; otherwise, - . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - 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. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Gets the for the specified task. - - The name of the filter for which the should be located in the collection. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Represent a chain of NAnt filters that can be applied to a . - - - - A FilterChain represents a collection of one or more filters that can - be appled to a such as the . - In the case of the , the contents of the copied - files are filtered through each filter specified in the filter chain. - Filtering occurs in the order the filters are specified with filtered - output of one filter feeding into another. - - - :--------:--->:----------:--->:----------: ... :----------:--->:--------:
            - :.Source.:--->:.Filter 1.:--->:.Filter 2.: ... :.Filter n.:--->:.target.:
            - :--------:--->:----------:--->:----------: ... :----------:--->:--------:
            -
            - - A list of all filters that come with NAnt is available here. - - - The following tasks support filtering with a FilterChain: - - - - - - - - - -
            - - - Replace all occurrences of @NOW@ with the current date/time and - replace tabs with spaces in all copied files. - - - - - - - - - - - - - - - ]]> - - -
            - - - Provides the abstract base class for types. - - - - - Should be overridden by derived classes. clones the referenced types - data into the current instance. - - - - - Copies all instance data of the to a given - . - - - - - The ID used to be referenced later. - - - - - The ID to use as the reference. - - - - - Gets a value indicating whether a reference to the type can be - defined. - - - Only types with an assigned - to it, can be referenced. - - - - - Gets the name of the datatype. - - - The name of the datatype. - - - - - Initializes all build attributes and child elements. - - - needs to maintain the order in which the - filters are specified in the build file. - - - - - Used to to instantiate and return the chain of stream based filters. - - The that is the source of input to the filter chain. - - The is the first - in the chain, which is based on a physical stream that feeds the chain. - - - The last in the chain. - - - - - The filters to apply. - - - - - The encoding to assume when filter-copying files. The default is - system's current ANSI code page. - - - - - Configurator that initializes filters in the order in which they've - been specified in the build file. - - - - - Contains a collection of elements. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - 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. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Represents a physical . That is a reader based - on a stream. - - - Used by to represent a - based on a in the chain. - - - - - Parses NAnt properties and expressions - - - - This filter parses any NAnt properties or expressions found in its input, - inlining their values in its output. - - - Note: Due to limitations on buffering, expressions longer than 2048 - characters are not guaranteed to be expanded. - - Filters are intended to be used as a element of a . - - - Replace all properties with their corresponding values. - - - ]]> - - - - - - Holds data for expression expansion between input and output. - - - - - Called after construction and after properties are set. Allows - for filter initialization. - - - - - Reads the next character applying the filter logic. - - Char as an int or -1 if at the end of the stream - - - - Reads the next character applying the filter logic without advancing the current position in the stream. - - Char as an int or -1 if at the end of the stream - - - - Moves to the next character. - - - - - Refills the buffer, running our input through - .) - - - - - Determines whether we've passed the end of our data. - - - - - Replaces all occurrences of a given string in the original input with - user-supplied replacement string. - - - - This filter replaces all occurrences of a given string in the original - input stream with a user-supplied replacement string. By default string - comparisons are case sensitive but this can be changed by setting the - optional attribute to . - - - To use this filter specify the string to be replaced with the - attribute and the string to replace it with using the - attribute. - - - Filters are intended to be used as a element of a . - - - - - Replace all occurrences of "3.14" with "PI". - - - - ]]> - - - - - Replace all occurrences of "string", "String", etc. with "System.String". - - - - ]]> - - - - - - Construct that allows this filter to be chained to the one - in the parameter chainedReader. - - Filter that the filter will be chained to - - - - Reads the next character applying the filter logic. - - Char as an int or -1 if at the end of the stream - - - - Reads the next character applying the filter logic without - advancing the current position in the stream. - - Peek currently is not supported. - - - Char as an int or -1 if at the end of the stream. - - - - - - Helper function used to search for the filter's traget string. If the string - is found the result is true. If the string was not found false is returned and - nonMatchingChars contains the characters that were read to determine if the - string is present. - - - - It is assumed the stream is positioned at the character after the first character - in the target string. - - - First character in target string - Ture if the stream ended while search for the string. - Characters that were read while searching for the string. - - - - - Returns the next character in the stream replacing the specified character. Using the - allows for the same implementation for Read and Peek - - Delegate to acquire the next character. (Read/Peek) - Char as an int or -1 if at the end of the stream - - - - Compares to characters taking into account the _ignoreCase flag. - - - - - - - - The string to be replaced. - - - - - The new value for the replaced string. - Am empty string is permissible. - - - - - Determines if case will be ignored. - The default is . - - - - - Delegate for Read and Peek. Allows the same implementation - to be used for both methods. - - - - - Replaces tokens in the original input with user-supplied values. - - - - This filter replaces all token surrounded by a beginning and ending - token. The default beginning and ending tokens both default to '@'. The - optional and attributes - can be specified to change either token. By default string - comparisons are case sensitive but this can be changed by setting the - optional attribute to . - - - Tokens are specified by using the element. It is - possible to specify from 1 to n tokens and replacement values. Values can - be any valid NAnt expression. - - - Filters are intended to be used as a element of a . - - - - - Replace all occurrences of the string @DATE@ with the value of property - "TODAY". - - - - - - ]]> - - - - - Replace all occurrences of the string <DATE> with the value of - property "TODAY". - - - - - - ]]> - - - - - - Construct that allows this filter to be chained to the one - in the parameter chainedReader. - - Filter that the filter will be chained to - - - - Reads the next character applying the filter logic. - - Char as an int or -1 if at the end of the stream - - - - Reads the next character applying the filter logic without - advancing the current position in the stream. - - Peek currently is not supported. - - - Char as an int or -1 if at the end of the stream. - - - - - Initialize the filter by setting its parameters. - - - - - Finds a token give that we are positioned at a beginning token character. Either a - token replacement is returned or the characters that were read looking for the token. - - A token was not found - A token was found by there is no replacement - The stream ended while looking for the token - Either the replacement token or the characters that were read looking for the token - - - - Returns the next character in the stream replacing the specified character. Using the - allows for the same implementation for Read and Peek - - Delegate to acquire the next character. (Read/Peek) - Char as an int or -1 if at the end of the stream - - - - Compares to characters taking into account. - - - - - - - - - Marks the beginning of a token. The default is "@". - - - - - Marks the end of a token. The default is "@". - - - - - Tokens and replacement values. - - - - - Determines if case will be ignored. - The default is . - - - - - Delegate for Read and Peek. Allows the same implementation - to be used for both methods. - - - - - Converts tabs to spaces. - - - - The filter replaces tabs in a text file - with spaces. - - - Filters are intended to be used as a element of a . - - - - Replace all tabs with four spaces. - - - ]]> - - - - - - Construct that allows this filter to be chained to the one - in the parameter chainedReader. - - Filter that the filter will be chained to - - - - Retrieves the next character with moving the position in the stream. - This method is not implemented - - -1 if end of stream otherwise a character - - - - Retrieves the next character in the stream. - - -1 if end of stream otherwise a character - - - - Returns the next character in the stream replacing the specified character. Using the - allows for the same implementation for Read and Peek - - Delegate to acquire the next character. (Read/Peek) - Char as an int or -1 if at the end of the stream - - - - The number of spaces used when converting a tab. The default is - "8". - - - - - Delegate for Read and Peek. Allows the same implementation - to be used for both methods. - - - - - Functions to return information for a given assembly. - - - - - Gets or sets the that this functionset will - reference. - - - The that this functionset will reference. - - - - - Loads an assembly given its file name or path. - - The name or path of the file that contains the manifest of the assembly. - - The loaded assembly. - - is an empty . - is not found, or the module you are trying to load does not specify a filename extension. - is not a valid assembly. - An assembly or module was loaded twice with two different evidences, or the assembly name is longer than MAX_PATH characters. - - - - Loads an assembly given the long form of its name. - - The long form of the assembly name. - - The loaded assembly. - - is a . - is not found. - - - Determine the location of the Microsoft Access 11 Primary Interop - Assembly by loading it using its fully qualified name, and copy it - to the build directory. - - - - - ]]> - - - - - - Gets the full name of the assembly, also known as the display name. - - The assembly to get the full name for. - - The full name of the assembly, also known as the display name. - - - - - Gets an for the specified assembly. - - The assembly to get an for. - - An for the specified assembly. - - - - - - Gets the physical location, in codebase format, of the loaded file - that contains the manifest. - - The assembly to get the location for. - - The location of the specified assembly. - - - - - Functions that return information about an assembly's identity. - - - - - Gets the location of the assembly as a URL. - - The of the assembly. - - The location of the assembly as a URL. - - - - - - Gets the URI, including escape characters, that represents the codebase. - - The of the assembly. - - The URI, including escape characters, that represents the codebase. - - - - - - Gets the full name of the assembly, also known as the display name. - - The of the assembly. - - The full name of the assembly, also known as the display name. - - - - Output the full name of the nunit.framework assembly to the - build log. - - - - ]]> - - - - - - - Gets the simple, unencrypted name of the assembly. - - The of the assembly. - - The simple, unencrypted name of the assembly. - - - - Output the simple name of the nunit.framework assembly to - the build log. - - - - ]]> - - - - - - - Gets the version of the assembly. - - The of the assembly. - - The version of the assembly. - - - - Output the major version of the nunit.framework assembly - to the build log. - - - - ]]> - - - - - - - - Gets the for a given file. - - The assembly file for which to get the . - - An object representing the given file. - - is an empty . - does not exist. - is not a valid assembly. - - The assembly is not added to this domain. - - - - Output the full name of the nunit.framework assembly to the - build log. - - - - ]]> - - - - - - Converts the specified string representation of a logical value to - its equivalent. - - A string containing the value to convert. - - if is equivalent to - "True"; otherwise, . - - is not equivalent to or . - - - - Converts the specified to its equivalent string - representation. - - A to convert. - - "True" if is , or - "False" if is . - - - - - Converts the argument to an integer. - - value to be converted - converted to integer. The function fails with an exception when the conversion is not possible. - - - - Converts the argument to double - - The value to be converted. - converted to double. The function fails with an exception when the conversion is not possible. - - - - Converts the argument to a string. - - The value to be converted. - - converted to string. The function fails - with an exception when the conversion is not possible. - - - Named method ConvertToString as a static ToString method would break - CLS compliance. - - - - - Converts the argument to a datetime. - - value to be converted - converted to datetime. The function fails with an exception when the conversion is not possible. - - - - Converts the argument to a boolean - - The string value to be converted to boolean. Must be 'true' or 'false'. - - converted to boolean. The function fails - with an exception when the conversion is not possible. - - - - - Gets a that is the current local date and - time on this computer. - - - A whose value is the current date and time. - - - - - Gets the year component of the specified date. - - The date of which to get the year component. - - The year, between 1 and 9999. - - - - - Gets the month component of the specified date. - - The date of which to get the month component. - - The month, between 1 and 12. - - - - - Gets the day of the month represented by the specified date. - - The date of which to get the day of the month. - - The day value, between 1 and 31. - - - - - Gets the hour component of the specified date. - - The date of which to get the hour component. - - The hour, between 0 and 23. - - - - - Gets the minute component of the specified date. - - The date of which to get the minute component. - - The minute, between 0 and 59. - - - - - Gets the seconds component of the specified date. - - The date of which to get the seconds component. - - The seconds, between 0 and 59. - - - - - Gets the milliseconds component of the specified date. - - The date of which to get the milliseconds component. - - The millisecond, between 0 and 999. - - - - - Gets the number of ticks that represent the specified date. - - The date of which to get the number of ticks. - - The number of ticks that represent the date and time of the - specified date. - - - - - Gets the day of the week represented by the specified date. - - The date of which to get the day of the week. - - The day of the week, ranging from zero, indicating Sunday, to six, - indicating Saturday. - - - - - Gets the day of the year represented by the specified date. - - The date of which to get the day of the year. - - The day of the year, between 1 and 366. - - - - - Returns the number of days in the specified month of the specified - year. - - The year. - The month (a number ranging from 1 to 12). - - The number of days in for the specified - . - - is less than 1 or greater than 12. - - - - Returns an indication whether the specified year is a leap year. - - A 4-digit year. - - if is a leap year; - otherwise, . - - - - - Converts the specified string representation of a date and time to - its equivalent. - - A string containing a date and time to convert. - - A equivalent to the date and time contained - in . - - does not contain a valid string representation of a date and time. - - The for the invariant culture is - used to supply formatting information about . - - - - - Converts the specified to its equivalent - string representation. - - A to convert. - - A string representation of formatted using - the general format specifier ("G"). - - - is formatted with the - for the invariant culture. - - - - - Groups a set of functions for dealing with directories. - - - - - Returns the creation date and time of the specified directory. - - The directory for which to obtain creation date and time information. - - The creation date and time of the specified directory. - - The specified directory does not exist. - is a zero-length string, contains only white space, or contains one or more invalid characters. - The specified path, file name, or both exceed the system-defined maximum length. - - - - Returns the date and time the specified directory was last written to. - - The directory for which to obtain write date and time information. - - The date and time the specified directory was last written to. - - The specified directory does not exist. - is a zero-length string, contains only white space, or contains one or more invalid characters. - The specified path, file name, or both exceed the system-defined maximum length. - - - - Returns the date and time the specified directory was last accessed. - - The directory for which to obtain access date and time information. - - The date and time the specified directory was last accessed. - - The specified directory does not exist. - is a zero-length string, contains only white space, or contains one or more invalid characters. - The specified path, file name, or both exceed the system-defined maximum length. - The parameter is in an invalid format. - - - - Gets the current working directory. - - - A containing the path of the current working - directory. - - - - - Retrieves the parent directory of the specified path. - - The path for which to retrieve the parent directory. - - The parent directory, or an empty if - is the root directory, including the root - of a UNC server or share name. - - The directory specified by is read-only. - is a zero-length string, contains only white space, or contains one or more invalid characters. - The specified path, file name, or both exceed the system-defined maximum length. - The specified path was not found. - - - Copy "readme.txt" from the current working directory to - its parent directory. - - - - - - ]]> - - - - - - Returns the volume information, root information, or both for the - specified path. - - The path for which to retrieve the parent directory. - - A string containing the volume information, root information, or - both for the specified path. - - is a zero-length string, contains only white space, or contains one or more invalid characters. - The specified path, file name, or both exceed the system-defined maximum length. - - - - Determines whether the given path refers to an existing directory - on disk. - - The path to test. - - if refers to an - existing directory; otherwise, . - - - Remove directory "test", if it exists. - - - ]]> - - - - - - Functions for requesting information from DNS. - - - - - Gets the host name of the local computer. - - - A string that contains the DNS host name of the local computer. - - An error is encountered when resolving the local host name. - - - - Converts the specified string representation of a number to its - double-precision floating point number equivalent. - - A string containing a number to convert. - - A double-precision floating point number equivalent to the numeric - value or symbol specified in . - - is not a number in a valid format. - represents a number less than or greater than . - - The for the invariant culture is - used to supply formatting information about . - - - - - Converts the specified to its equivalent - string representation. - - A to convert. - - The string representation of formatted - using the general format specifier ("G"). - - - is formatted with the - for the invariant culture. - - - - - Provide information about the current environment and platform. - - - - - Gets the path to the system special folder identified by the - specified enumeration. - - An enumerated constant that identifies a system special folder. - - The path to the specified system special folder, if that folder - physically exists on your computer; otherwise, the empty string (""). - - is not a member of . - - - Copy "out.log" from the project base directory to the - program files directory. - - - - ]]> - - - - - - Gets the NetBIOS name of this local computer. - - - The NetBIOS name of this local computer. - - The name of this computer cannot be obtained. - - - - Gets an object that represents the - current operating system. - - - An object that contains the current - platform identifier and version number. - - - - Output string representation of the current operating system. - - - - ]]> - - If the operating system is Windows 2000, the output is: - - Microsoft Windows NT 5.0.2195.0 - - - - - - - Gets the user name of the person who started the current thread. - - - The name of the person logged on to the system who started the - current thread. - - - - Modify the home directory of the current user on unix-based systems. - - - - - - - - ]]> - - - - - - Returns the value of the specified environment variable. - - The environment variable of which the value should be returned. - - The value of the specified environment variable. - - Environment variable does not exist. - - - - Gets a value indicating whether the specified environment variable - exists. - - The environment variable that should be checked. - - if the environment variable exists; otherwise, - . - - - - Execute a set of tasks only if the "BUILD_DEBUG" environment - variable is set. - - - - ... - - ]]> - - - - - - Gets a object that describes the major, - minor, build, and revision numbers of the Common Language Runtime. - - - A Version object. - - - Output the major version of the CLR. - - - ]]> - - - - - - Groups a set of functions for dealing with files. - - - - - Returns the creation date and time of the specified file. - - The file for which to obtain creation date and time information. - - The creation date and time of the specified file. - - The specified file does not exist. - is a zero-length string, contains only white space, or contains one or more invalid characters. - The specified path, file name, or both exceed the system-defined maximum length. - The parameter is in an invalid format. - - - - Returns the date and time the specified file was last written to. - - The file for which to obtain write date and time information. - - The date and time the specified file was last written to. - - The specified file does not exist. - is a zero-length string, contains only white space, or contains one or more invalid characters. - The specified path, file name, or both exceed the system-defined maximum length. - - - - Returns the date and time the specified file was last accessed. - - The file for which to obtain access date and time information. - - The date and time the specified file was last accessed. - - The specified file does not exist. - is a zero-length string, contains only white space, or contains one or more invalid characters. - The specified path, file name, or both exceed the system-defined maximum length. - The parameter is in an invalid format. - - - - Determines whether the specified file exists. - - The file to check. - - if refers to an - existing file; otherwise, . - - - Execute a set of tasks, if file "output.xml" does not exist. - - - ... - - ]]> - - - - - - Determines whether is more or equal - up-to-date than . - - The file to check against the target file. - The file for which we want to determine the status. - - if is more - or equal up-to-date than ; otherwise, - . - - or is a zero-length string, contains only white space, or contains one or more invalid characters. - The specified path, file name, or both of either or exceed the system-defined maximum length. - - - - Gets the length of the file. - - filename - - Length in bytes, of the file named . - - The file specified cannot be found. - - - - Checks if a given file is an assembly. - - The name or path of the file to be checked. - True if the file is a valid assembly, false if it's not or if the assembly seems corrupted (invalid headers or metadata). - is a null . - is an empty . - is not found, or the file you are trying to check does not specify a filename extension. - The caller does not have path discovery permission. - - - - Functions that provide version information for a physical file on disk. - - - - - Returns a representing the version - information associated with the specified file. - - The file to retrieve the version information for. - - A containing information about the file. - - The file specified cannot be found. - - - - Gets the name of the company that produced the file. - - A instance containing version information about a file. - - The name of the company that produced the file. - - - - - Gets the file version of a file. - - A instance containing version information about a file. - - The file version of a file. - - - - - - Gets the name of the product the file is distributed with. - - A instance containing version information about a file. - - The name of the product the file is distributed with. - - - - - Gets the product version of a file. - - A instance containing version information about a file. - - The product version of a file. - - - - - - Converts the specified string representation of a number to its - 32-bit signed integer equivalent. - - A string containing a number to convert. - - A 32-bit signed integer equivalent to the number contained in - . - - is not of the correct format. - represents a number less than or greater than . - - The for the invariant culture is - used to supply formatting information about . - - - - - Converts the specified to its equivalent string - representation. - - A to convert. - - The string representation of , consisting - of a negative sign if the value is negative, and a sequence of - digits ranging from 0 to 9 with no leading zeroes. - - - is formatted with the - for the invariant culture. - - - - - Converts the specified string representation of a number to its - 64-bit signed integer equivalent. - - A string containing a number to convert. - - A 64-bit signed integer equivalent to the number contained in - . - - is not of the correct format. - represents a number less than or greater than . - - The for the invariant culture is - used to supply formatting information about . - - - - - Converts the specified to its equivalent string - representation. - - A to convert. - - The string representation of , consisting - of a negative sign if the value is negative, and a sequence of - digits ranging from 0 to 9 with no leading zeroes. - - - is formatted with the - for the invariant culture. - - - - - Rounds the value to the nearest whole number - - Number to be rounded, can be anything convertible to a double. - - Rounded value. - - - - - Returns the largest whole number less than or equal to the specified - number. - - value to be , can be anything convertible to a double - - The largest whole number less than or equal to the specified number. - - - - - Returns the smallest whole number greater than or equal to the specified number - - value - - The smallest whole number greater than or equal to the specified number. - - - - - Returns the absolute value of the specified number - - value to take the absolute value from - - when is greater - than or equal to zero; otherwise, -. - - - - - Gets the base directory of the appdomain in which NAnt is running. - - - The base directory of the appdomain in which NAnt is running. - - - - - Gets the NAnt assembly. - - - The NAnt assembly. - - - - - Gets the name of the current project. - - - The name of the current project, or an empty - if no name is specified in the build file. - - - - - Gets the form of the build file. - - - The form of the build file, or - an empty if the project is not file backed. - - - - - Gets the local path to the build file. - - - The local path of the build file, or an empty - if the project is not file backed. - - - - - Gets the name of the target that will be executed when no other - build targets are specified. - - - The name of the target that will be executed when no other build - targets are specified, or an empty if no - default target is defined for the project. - - - - - Gets the base directory of the current project. - - - The base directory of the current project. - - - - - Checks whether the specified target exists. - - The target to test. - - if the specified target exists; otherwise, - . - - - - Execute target "clean", if it exists. - - - - - - ]]> - - - - - - Gets the name of the target being executed. - - - A that contains the name of the target - being executed. - - No target is being executed. - - - - Checks whether the specified target has already been executed. - - The target to test. - - if the specified target has already been - executed; otherwise, . - - Target does not exist. - - - - Checks whether the specified task exists. - - The task to test. - - if the specified task exists; otherwise, - . - - - - - Returns the from which the specified task - was loaded. - - The name of the task to get the of. - - The from which the specified task was loaded. - - Task is not available. - - - - Checks whether the specified property exists. - - The property to test. - - if the specified property exists; otherwise, - . - - - - Execute a set of tasks if the "build.debug" property - exists. - - - - - - - - ]]> - - - - - - Checks whether the specified property is read-only. - - The property to test. - - if the specified property is read-only; - otherwise, . - - - Check whether the "debug" property is read-only. - property::is-readonly('debug') - - Property has not been set. - - - - Checks whether the specified property is a dynamic property. - - The property to test. - - if the specified property is a dynamic - property; otherwise, . - - Property has not been set. - - - Check whether the "debug" property is a dynamic property. - - property::is-dynamic('debug') - - - - - Checks whether the specified framework exists, and is valid. - - The framework to test. - - if the specified framework exists ; otherwise, - . - - - - - Checks whether the SDK for the specified framework is installed. - - The framework to test. - - if the SDK for specified framework is installed; - otherwise, . - - - - - - - Gets the identifier of the current target framework. - - - The identifier of the current target framework. - - - - - Gets the identifier of the runtime framework. - - - The identifier of the runtime framework. - - - - - Gets the family of the specified framework. - - The framework of which the family should be returned. - - The family of the specified framework. - - is not a valid framework identifier. - - - - - - Gets the version of the specified framework. - - The framework of which the version should be returned. - - The version of the specified framework. - - is not a valid framework identifier. - - - - - - Gets the description of the specified framework. - - The framework of which the description should be returned. - - The description of the specified framework. - - is not a valid framework identifier. - - - - - - Gets the Common Language Runtime version of the specified framework. - - The framework of which the Common Language Runtime version should be returned. - - The Common Language Runtime version of the specified framework. - - is not a valid framework identifier. - - - - - - Gets the framework directory of the specified framework. - - The framework of which the framework directory should be returned. - - The framework directory of the specified framework. - - is not a valid framework identifier. - - - - - - Gets the assembly directory of the specified framework. - - The framework of which the assembly directory should be returned. - - The assembly directory of the specified framework. - - is not a valid framework identifier. - - - - - - Gets the SDK directory of the specified framework. - - The framework of which the SDK directory should be returned. - - The SDK directory of the specified framework, or an empty - if the SDK of the specified framework is not - installed. - - is not a valid framework identifier. - - - - - - Gets the absolute path of the specified tool for the current - target framework. - - The file name of the tool to search for. - - The absolute path to if found in one of the - configured tool paths; otherwise, an error is reported. - - could not be found in the configured tool paths. - - - The configured tool paths are scanned in the order in which they - are defined in the framework configuration. - - - The file name of the tool to search should include the extension. - - - - Use gacutil to install an assembly in the GAC. - - - - - - ]]> - - - - - - Gets the runtime engine of the specified framework. - - The framework of which the runtime engine should be returned. - - The full path to the runtime engine of the specified framework, or - an empty if no runtime engine is defined - for the specified framework. - - is not a valid framework identifier. - - - - - - Checks whether the specified framework is valid. - - The framework to check. - is not a valid framework identifier. - - - - Gets the name of the platform on which NAnt is running. - - - The name of the platform on which NAnt is running. - - - - - Checks whether NAnt is running on the win32 platform. - - - if NAnt is running on the win32 platform; - otherwise, . - - - - - Checks whether NAnt is running on unix. - - - if NAnt is running on unix; - otherwise, . - - - - - Functions that return information about an operating system. - - - - - Gets a value that identifies the operating - system platform. - - The operating system. - - value that identifies the operating system - platform. - - - - - - Gets a object that identifies this operating - system. - - The operating system. - - A object that describes the major version, - minor version, build, and revision of the operating system. - - - - - - Converts the value of the specified operating system to its equivalent - representation. - - The operating system. - - The representation of - . - - - - Output string representation of the current operating system. - - - - ]]> - - If the operating system is Windows 2000, the output is: - - Microsoft Windows NT 5.0.2195.0 - - - - - - - Returns the fully qualified path. - - The file or directory for which to obtain absolute path information. - - A string containing the fully qualified location of , - such as "C:\MyFile.txt". - - is a zero-length string, contains only white space, or contains one or more invalid characters. - contains a colon (":"). - The specified path, file name, or both exceed the system-defined maximum length. - - - - Combines two paths. - - first path - second path - - A string containing the combined paths. If one of the specified paths - is a zero-length string, this method returns the other path. If - contains an absolute path, this method - returns . - - or contain one or more invalid characters. - - - - Changes the extension of the path string. - - The path information to modify. The path cannot contain any of the characters - defined in InvalidPathChars. - The new extension (with a leading period). Specify a null reference - to remove an existing extension from . - - - A string containing the modified path information. - - - On Windows-based desktop platforms, if is - an empty , the path information is returned - unmodified. If has no extension, the returned - path contains - appended to the end of . - - - - For more information see the documentation. - - contains one or more invalid characters. - - - - Returns the directory information for the specified path string. - - The path of a file or directory. - - A containing directory information for - , or an empty if - denotes a root directory, or does not - contain directory information. - - contains invalid characters, is empty, or contains only white spaces. - - - - Returns the extension for the specified path string. - - The path string from which to get the extension. - - A containing the extension of the specified - (including the "."), or an empty - if does not have - extension information. - - contains one or more invalid characters. - - - - Returns the filename for the specified path string. - - The path string from which to obtain the file name and extension. - - - A consisting of the characters after the last - directory character in path. - - - If the last character of is a directory or - volume separator character, an empty is returned. - - - contains one or more invalid characters. - - - - Returns the filename without extension for the specified path string. - - The path of the file. - - A containing the returned - by , minus the last period (.) and all - characters following it. - - contains one or more invalid characters. - - - - Gets the root directory of the specified path. - - The path from which to obtain root directory information. - - A containing the root directory of - , such as "C:\", or an empty - if does not contain root directory information. - - contains invalid characters, or is empty. - - - - Returns a uniquely named zero-byte temporary file on disk and returns the full path to that file. - - - A containing the name of the temporary file. - - - - - Gets the path to the temporary directory. - - - A containing the path information of a - temporary directory. - - - - - Determines whether a path string includes an extension. - - The path to search for an extension. - - . if the characters that follow the last - directory separator or volume separator in the - include a period (.) followed by one or more characters; - otherwise, . - - contains one or more invalid characters. - - - - Determines whether a path string is absolute. - - The path to test. - - if path contains an absolute ; - otherwise, . - - contains one or more invalid characters. - - - - Gets the value of a variable for the specified package. - - The package for which the variable should be retrieved. - The name of the variable. - - The value of variable for the specified - package. - - pkg-config could not be started. - does not exist. - - - - Gets the link flags required to compile the package, including all - its dependencies. - - The package for which the link flags should be retrieved. - - The link flags required to compile the package. - - pkg-config could not be started. - does not exist. - - - - Gets the compile flags required to compile the package, including all - its dependencies. - - The package for which the compile flags should be retrieved. - - The pre-processor and compile flags required to compile the package. - - pkg-config could not be started. - does not exist. - - - - Determines the version of the given package. - - The package to get the version of. - - The version of the given package. - - pkg-config could not be started. - does not exist. - - - - Determines whether the given package is at least version - . - - The package to check. - The version the package should at least have. - - if the given package is at least version - ; otherwise, . - - pkg-config could not be started. - - - - Determines whether the given package is exactly version - . - - The package to check. - The version the package should have. - - if the given package is exactly version - ; otherwise, . - - pkg-config could not be started. - - - - Determines whether the given package is at no newer than version - . - - The package to check. - The version the package should maximum have. - - if the given package is at no newer than - version ; otherwise, . - - pkg-config could not be started. - - - - Determines whether the given package is between two versions. - - The package to check. - The version the package should at least have. - The version the package should maximum have. - - if the given package is between - and ; otherwise, . - - pkg-config could not be started. - - - - Determines whether the given package exists. - - The package to check. - - if the package exists; otherwise, - . - - pkg-config could not be started. - - - - Runs pkg-config with the specified arguments and returns a - based on the exit code. - - The arguments to pass to pkg-config. - - if pkg-config exited with exit code 0; - otherwise, - - - - - Runs pkg-config with the specified arguments and returns the result - as a . - - The arguments to pass to pkg-config. - - The result of running pkg-config with the specified arguments. - - - - - Factory method to return a new instance of ExecTask - - - - - - - Returns the length of the specified string. - - input string - - The string's length. - - - string::get-length('foo') ==> 3 - - - string::get-length('') ==> 0 - - - - - Returns a substring of the specified string. - - input string - position of the start of the substring - the length of the substring - - - If the is greater than zero, the - function returns a substring starting at character position - with a length of - characters. - - - If the is equal to zero, the function - returns an empty string. - - - or is less than zero. - is greater than the length of . - plus indicates a position not within . - - string::substring('testing string', 0, 4) ==> 'test' - - - string::substring('testing string', 8, 3) ==> 'str' - - - string::substring('testing string', 8, 0) ==> '' - - - string::substring('testing string', -1, 5) ==> ERROR - - - string::substring('testing string', 8, -1) ==> ERROR - - - string::substring('testing string', 5, 17) ==> ERROR - - - - - Tests whether the specified string starts with the specified prefix - string. - - test string - prefix string - - when is a prefix for - the string . Meaning, the characters at the - beginning of are identical to - ; otherwise, . - - - This function performs a case-sensitive word search using the - invariant culture. - - - string::starts-with('testing string', 'test') ==> true - - - string::starts-with('testing string', 'testing') ==> true - - - string::starts-with('testing string', 'string') ==> false - - - string::starts-with('test', 'testing string') ==> false - - - - - Tests whether the specified string ends with the specified suffix - string. - - test string - suffix string - - when is a suffix for - the string . Meaning, the characters at the - end of are identical to - ; otherwise, . - - - This function performs a case-sensitive word search using the - invariant culture. - - - string::ends-with('testing string', 'string') ==> true - - - string::ends-with('testing string', '') ==> true - - - string::ends-with('testing string', 'bring') ==> false - - - string::ends-with('string', 'testing string') ==> false - - - - - Returns the specified string converted to lowercase. - - input string - - The string in lowercase. - - - The casing rules of the invariant culture are used to convert the - to lowercase. - - - string::to-lower('testing string') ==> 'testing string' - - - string::to-lower('Testing String') ==> 'testing string' - - - string::to-lower('Test 123') ==> 'test 123' - - - - - Returns the specified string converted to uppercase. - - input string - - The string in uppercase. - - - The casing rules of the invariant culture are used to convert the - to uppercase. - - - string::to-upper('testing string') ==> 'TESTING STRING' - - - string::to-upper('Testing String') ==> 'TESTING STRING' - - - string::to-upper('Test 123') ==> 'TEST 123' - - - - - Returns a string corresponding to the replacement of a given string - with another in the specified string. - - input string - A to be replaced. - A to replace all occurrences of . - - A equivalent to but - with all instances of replaced with - . - - is an empty string. - - This function performs a word (case-sensitive and culture-sensitive) - search to find . - - - string::replace('testing string', 'test', 'winn') ==> 'winning string' - - - string::replace('testing string', 'foo', 'winn') ==> 'testing string' - - - string::replace('testing string', 'ing', '') ==> 'test str' - - - string::replace('banana', 'ana', 'ana') ==> 'banana' - - - - - Tests whether the specified string contains the given search string. - - The string to search. - The string to locate within . - - if is found in - ; otherwise, . - - - This function performs a case-sensitive word search using the - invariant culture. - - - string::contains('testing string', 'test') ==> true - - - string::contains('testing string', '') ==> true - - - string::contains('testing string', 'Test') ==> false - - - string::contains('testing string', 'foo') ==> false - - - - - Returns the position of the first occurrence in the specified string - of the given search string. - - The string to search. - The string to locate within . - - - The lowest-index position of in - if it is found, or -1 if - does not contain . - - - If is an empty string, the return value - will always be 0. - - - - This function performs a case-sensitive word search using the - invariant culture. - - - string::index-of('testing string', 'test') ==> 0 - - - string::index-of('testing string', '') ==> 0 - - - string::index-of('testing string', 'Test') ==> -1 - - - string::index-of('testing string', 'ing') ==> 4 - - - - - Returns the position of the last occurrence in the specified string - of the given search string. - - The string to search. - The string to locate within . - - - The highest-index position of in - if it is found, or -1 if - does not contain . - - - If is an empty string, the return value - is the last index position in . - - - - This function performs a case-sensitive word search using the - invariant culture. - - - string::last-index-of('testing string', 'test') ==> 0 - - - string::last-index-of('testing string', '') ==> 13 - - - string::last-index-of('testing string', 'Test') ==> -1 - - - string::last-index-of('testing string', 'ing') ==> 11 - - - - - Returns the given string left-padded to the given length. - - The that needs to be left-padded. - The number of characters in the resulting string, equal to the number of original characters plus any additional padding characters. - A Unicode padding character. - - If the length of is at least - , then a new identical - to is returned. Otherwise, - will be padded on the left with as many - characters as needed to create a length of . - - is less than zero. - - Note that only the first character of - will be used when padding the result. - - - string::pad-left('test', 10, ' ') ==> ' test' - - - string::pad-left('test', 10, 'test') ==> 'tttttttest' - - - string::pad-left('test', 3, ' ') ==> 'test' - - - string::pad-left('test', -4, ' ') ==> ERROR - - - - - Returns the given string right-padded to the given length. - - The that needs to be right-padded. - The number of characters in the resulting string, equal to the number of original characters plus any additional padding characters. - A Unicode padding character. - - If the length of is at least - , then a new identical - to is returned. Otherwise, - will be padded on the right with as many - characters as needed to create a length of . - - is less than zero. - - Note that only the first character of - will be used when padding the result. - - - string::pad-right('test', 10, ' ') ==> 'test ' - - - string::pad-right('test', 10, 'abcd') ==> 'testaaaaaa' - - - string::pad-right('test', 3, ' ') ==> 'test' - - - string::pad-right('test', -3, ' ') ==> ERROR - - - - - Returns the given string trimmed of whitespace. - - input string - - The string with any leading or trailing - white space characters removed. - - - string::trim(' test ') ==> 'test' - - - string::trim('\t\tfoo \r\n') ==> 'foo' - - - - - Returns the given string trimmed of leading whitespace. - - input string - - The string with any leading - whites pace characters removed. - - - string::trim-start(' test ') ==> 'test ' - - - string::trim-start('\t\tfoo \r\n') ==> 'foo \r\n' - - - - - Returns the given string trimmed of trailing whitespace. - - input string - - The string with any trailing - white space characters removed. - - - string::trim-end(' test ') ==> ' test' - - - string::trim-end('\t\tfoo \r\n') ==> '\t\tfoo' - - - - - Returns the total number of days represented by the specified - , expressed in whole and fractional days. - - A . - - The total number of days represented by the given . - - - - - Returns the total number of hours represented by the specified - , expressed in whole and fractional hours. - - A . - - The total number of hours represented by the given . - - - - - Returns the total number of minutes represented by the specified - , expressed in whole and fractional minutes. - - A . - - The total number of minutes represented by the given . - - - - - Returns the total number of seconds represented by the specified - , expressed in whole and fractional seconds. - - A . - - The total number of seconds represented by the given . - - - - - Returns the total number of milliseconds represented by the specified - , expressed in whole and fractional milliseconds. - - A . - - The total number of milliseconds represented by the given - . - - - - - Returns the number of whole days represented by the specified - . - - A . - - The number of whole days represented by the given - . - - - - Remove all files that have not been modified in the last 7 days from directory "binaries". - - - - - - - ]]> - - - - - - Returns the number of whole hours represented by the specified - . - - A . - - The number of whole hours represented by the given - . - - - - - Returns the number of whole minutes represented by the specified - . - - A . - - The number of whole minutes represented by the given - . - - - - - Returns the number of whole seconds represented by the specified - . - - A . - - The number of whole seconds represented by the given - . - - - - - Returns the number of whole milliseconds represented by the specified - . - - A . - - The number of whole milliseconds represented by the given - . - - - - - Returns the number of ticks contained in the specified - . - - A . - - The number of ticks contained in the given . - - - - - Returns a that represents a specified number - of days, where the specification is accurate to the nearest millisecond. - - A number of days, accurate to the nearest millisecond. - - A that represents . - - - - - Returns a that represents a specified number - of hours, where the specification is accurate to the nearest - millisecond. - - A number of hours, accurate to the nearest millisecond. - - A that represents . - - - - - Returns a that represents a specified number - of minutes, where the specification is accurate to the nearest - millisecond. - - A number of minutes, accurate to the nearest millisecond. - - A that represents . - - - - - Returns a that represents a specified number - of seconds, where the specification is accurate to the nearest - millisecond. - - A number of seconds, accurate to the nearest millisecond. - - A that represents . - - - - - Returns a that represents a specified number - of milliseconds. - - A number of milliseconds. - - A that represents . - - - - - Returns a that represents a specified time, - where the specification is in units of ticks. - - A number of ticks that represent a time. - - A that represents . - - - - - Constructs a from a time indicated by a - specified string. - - A string. - - A that corresponds to . - - has an invalid format. - At least one of the hours, minutes, or seconds components is outside its valid range. - - - - Converts the specified to its equivalent - string representation. - - A to convert. - - The string representation of . The format - of the return value is of the form: [-][d.]hh:mm:ss[.ff]. - - - - - Gets the value of the major component of a given version. - - A version. - - The major version number. - - - - - - - - Gets the value of the minor component of a given version. - - A version. - - The minor version number. - - - - - - - - Gets the value of the build component of a given version. - - A version. - - The build number, or -1 if the build number is undefined. - - - - - - - - Gets the value of the revision component of a given version. - - A version. - - The revision number, or -1 if the revision number is undefined. - - - - - - - - Converts the specified string representation of a version to - its equivalent. - - A string containing the major, minor, build, and revision numbers, where each number is delimited with a period character ('.'). - - A instance representing the specified - . - - has fewer than two components or more than four components. - A major, minor, build, or revision component is less than zero. - At least one component of does not parse to a decimal integer. - - - - Converts the specified to its equivalent - string representation. - - A to convert. - - The string representation of the values of the major, minor, build, - and revision components of the specified . - - - - - - - - Changes the file attributes of a file or set of files and directories. - - - - does not have the concept of turning - attributes off. Instead you specify all the attributes that you want - turned on and the rest are turned off by default. - - - Refer to the enumeration in the .NET SDK - for more information about file attributes. - - - - - Set the read-only file attribute for the specified file in - the project directory. - - - - ]]> - - - - - Set the normal file attribute for the specified file. - - - - ]]> - - - - - Set the normal file attribute for all executable files in - the current project directory and sub-directories. - - - - - - - - - ]]> - - - - - - Provides the abstract base class for tasks. - - - A task is a piece of code that can be executed. - - - - - Executes the task unless it is skipped. - - - - - Logs a message with the given priority. - - The message priority at which the specified message is to be logged. - The message to be logged. - - - The actual logging is delegated to the project. - - - If the attribute is set on the task and a - message is logged with level , the - priority of the message will be increased to - when the threshold of the build log is . - - - This will allow individual tasks to run in verbose mode while - the build log itself is still configured with threshold - . - - - The threshold of the project is not taken into account to determine - whether a message should be passed to the logging infrastructure, - as build listeners might be interested in receiving all messages. - - - - - - Logs a formatted message with the given priority. - - The message priority at which the specified message is to be logged. - The message to log, containing zero or more format items. - An array containing zero or more objects to format. - - - The actual logging is delegated to the project. - - - If the attribute is set on the task and a - message is logged with level , the - priority of the message will be increased to . - when the threshold of the build log is . - - - This will allow individual tasks to run in verbose mode while - the build log itself is still configured with threshold - . - - - - - - Determines whether build output is enabled for the given - . - - The to check. - - if messages with the given - should be passed on to the logging infrastructure; otherwise, - . - - - The threshold of the project is not taken into account to determine - whether a message should be passed to the logging infrastructure, - as build listeners might be interested in receiving all messages. - - - - - Initializes the configuration of the task using configuration - settings retrieved from the NAnt configuration file. - - - TO-DO : Remove this temporary hack when a permanent solution is - available for loading the default values from the configuration - file if a build element is constructed from code. - - - - Initializes the task. - - - Initializes the task. - - - Executes the task. - - - - Locates the XML node for the specified attribute in either the - configuration section of the extension assembly or the.project. - - The name of attribute for which the XML configuration node should be located. - The framework to use to obtain framework specific information, or if no framework specific information should be used. - - The XML configuration node for the specified attribute, or - if no corresponding XML node could be - located. - - - If there's a valid current framework, the configuration section for - that framework will first be searched. If no corresponding - configuration node can be located in that section, the framework-neutral - section of the project configuration node will be searched. - - - - - Determines if task failure stops the build, or is just reported. - The default is . - - - - - Determines whether the task should report detailed build log messages. - The default is . - - - - - If then the task will be executed; otherwise, - skipped. The default is . - - - - - Opposite of . If - then the task will be executed; otherwise, skipped. The default is - . - - - - - The name of the task. - - - - - The prefix used when sending messages to the log. - - - - - Gets or sets the log threshold for this . By - default the threshold of a task is , - causing no messages to be filtered in the task itself. - - - The log threshold level for this . - - - When the threshold of a is higher than the - threshold of the , then all messages will - still be delivered to the build listeners. - - - - - Returns the TaskBuilder used to construct an instance of this - . - - - - - The name of the file which will have its attributes set. This is - provided as an alternate to using the task's fileset. - - - - - All the matching files and directories in this fileset will have - their attributes set. - - - - - Set the archive attribute. The default is . - - - - - Set the hidden attribute. The default is . - - - - - Set the normal file attributes. This attribute is only valid if used - alone. The default is . - - - - - Set the read-only attribute. The default is . - - - - - Set the system attribute. The default is . - - - - - Checks if a resource is available at runtime. - - - - The specified property is set to if the - requested resource is available at runtime, and - if the resource is not available. - - - we advise you to use the following functions instead: - - - - Function - Description - - - - Determines whether the specified file exists. - - - - Determines whether the given path refers to an existing directory on disk. - - - - Checks whether the specified framework exists.. - - - - Checks whether the SDK for the specified framework is installed. - - - - - - Sets the myfile.present property to if the - file is available on the filesystem and if the - file is not available. - - - - ]]> - - - - - Sets the build.dir.present property to - if the directory is available on the filesystem and - if the directory is not available. - - - - ]]> - - - - - Sets the mono-0.21.framework.present property to - if the Mono 0.21 framework is available on the current system and - if the framework is not available. - - - - ]]> - - - - - Sets the net-1.1.frameworksdk.present property to - if the .NET 1.1 Framework SDK is available on the current system and - if the SDK is not available. - - - - ]]> - - - - - - Executes the task. - - - - Sets the property identified by to - when the resource exists and to - when the resource doesn't exist. - - - The availability of the resource could not be evaluated. - - - - Evaluates the availability of a resource. - - - if the resource is available; otherwise, - . - - The availability of the resource could not be evaluated. - - - - Checks if the file specified in the property is - available on the filesystem. - - - when the file exists; otherwise, . - - - - - Checks if the directory specified in the - property is available on the filesystem. - - - when the directory exists; otherwise, . - - - - - Checks if the framework specified in the - property is available on the current system. - - - when the framework is available; otherwise, - . - - - - - Checks if the SDK for the framework specified in the - property is available on the current system. - - - when the SDK for the specified framework is - available; otherwise, . - - - - - The resource which must be available. - - - - - The type of resource which must be present. - - - - - The property that must be set if the resource is available. - - - - - Defines the possible resource checks. - - - - - Determines whether a given file exists. - - - - - Determines whether a given directory exists. - - - - - Determines whether a given framework is available. - - - - - Determines whether a given SDK is available. - - - - - Calls a NAnt target in the current project. - - - - When the is used to execute a target, both that - target and all its dependent targets will be re-executed. - - - To avoid dependent targets from being executed more than once, two - options are available: - - - - - Add an "unless" attribute with value "${target::has-executed('<target name>')}" - to the dependent targets. - - - - - Set the attribute on the - to (recommended). - - - - - - - Call the target "build". - - - - ]]> - - - - - This shows how a project could 'compile' a debug and release build - using a common compile target. - - - - - - - - - - - - - - - - - - ]]> - - - The parameter of the - defaults to , - causing the "init" target to be executed for both - the "debug" and "release" build. - - - This results in the following build log: - - - build: - - init: - - [echo] initializing - - compile: - - [echo] compiling with debug = false - - init: - - [echo] initializing - - compile: - - [echo] compiling with debug = true - - BUILD SUCCEEDED - - - If the "init" should only be executed once, set the - attribute of the - to . - - - The build log would then look like this: - - - build: - - init: - - [echo] initializing - - compile: - - [echo] compiling with debug = false - - compile: - - [echo] compiling with debug = true - - BUILD SUCCEEDED - - - - - - Executes the specified target. - - - - - Makes sure the is not calling its own - parent. - - - - - NAnt target to call. - - - - - Force an execute even if the target has already been executed. The - default is . - - - - - Execute the specified targets dependencies -- even if they have been - previously executed. The default is . - - - - - Copies a file or set of files to a new file or directory. - - - - Files are only copied if the source file is newer than the destination - file, or if the destination file does not exist. However, you can - explicitly overwrite files with the attribute. - - - When a is used to select files to copy, the - attribute must be set. Files that are - located under the base directory of the will - be copied to a directory under the destination directory matching the - path relative to the base directory of the , - unless the attribute is set to - . - - - Files that are not located under the the base directory of the - will be copied directly under to the destination - directory, regardless of the value of the - attribute. - -

            Encoding

            - - Unless an encoding is specified, the encoding associated with the - system's current ANSI code page is used. - - - An UTF-8, little-endian Unicode, and big-endian Unicode encoded text - file is automatically recognized, if the file starts with the - appropriate byte order marks. - - - If you employ filters in your copy operation, you should limit the copy - to text files. Binary files will be corrupted by the copy operation. - -
            - - - Copy a single file while changing its encoding from "latin1" to - "utf-8". - - - - ]]> - - - - Copy a set of files to a new directory. - - - - - - - ]]> - - - - - Copy a set of files to a directory, replacing @TITLE@ with - "Foo Bar" in all files. - - - - - - - - - - - - - ]]> - - -
            - - - Initialize new instance of the . - - - - - Checks whether the task is initialized with valid attributes. - - - - - Executes the Copy task. - - A file that has to be copied does not exist or could not be copied. - - - - Actually does the file copies. - - - - - The file to copy. - - - - - The file to copy to. - - - - - The directory to copy to. - - - - - Overwrite existing files even if the destination files are newer. - The default is . - - - - - Ignore directory structure of source directory, copy all files into - a single directory, specified by the - attribute. The default is . - - - - - Copy any empty directories included in the . - The default is . - - - - - Used to select the files to copy. To use a , - the attribute must be set. - - - - - Chain of filters used to alter the file's content as it is copied. - - - - - The encoding to use when reading files. The default is the system's - current ANSI code page. - - - - - The encoding to use when writing the files. The default is - the encoding of the input file. - - - - - The set of files to perform a file operation on. - - - - The key of the is the absolute path of - the destination file and the value is a - holding the path and last write time of the most recently updated - source file that is selected to be copied or moved to the - destination file. - - - On Windows, the is case-insensitive. - - - - - - Holds the absolute paths and last write time of a given file. - - - - - Initializes a new instance of the - class for the specified file and last write time. - - The absolute path of the file. - The last write time of the file. - - - - Gets the absolute path of the current file. - - - The absolute path of the current file. - - - - - Gets the time when the current file was last written to. - - - The time when the current file was last written to. - - - - - Deletes a file, fileset or directory. - - - - Deletes either a single file, all files in a specified directory and - its sub-directories, or a set of files specified by one or more filesets. - - - If the or attribute is - set then the fileset contents will be ignored. To delete the files - in the fileset ommit the and - attributes in the <delete> element. - - - If the specified file or directory does not exist, no error is - reported. - - - Read-only files cannot be deleted. Use the - first to remove the read-only attribute. - - - - Delete a single file. - - - ]]> - - - - - Delete a directory and the contents within. If the directory does not - exist, no error is reported. - - - - ]]> - - - - - Delete a set of files. - - - - - - - - - ]]> - - - - - - Ensures the supplied attributes are valid. - - - - - The file to delete. - - - - - The directory to delete. - - - - - Remove any empty directories included in the . - The default is . - - - - - All the files in the file set will be deleted. - - - - - Controls whether to show the name of each deleted file or directory. - The default is . - - - - - An empty task that allows a build file to contain a description. - - - Set a description. - - This is a description. - ]]> - - - - - - Writes a message to the build log or a specified file. - - - - The message can be specified using the attribute - or as inline content. - - - Macros in the message will be expanded. - - - When writing to a file, the attribute is - ignored. - - - - - Writes a message with level to the build log. - - - - ]]> - - - - - Writes a message with expanded macro to the build log. - - - - ]]> - - - - - Functionally equivalent to the previous example. - - - Base build directory = ${nant.project.basedir} - ]]> - - - - - Writes the previous message to a file in the project directory, - overwriting the file if it exists. - - - Base build directory = ${nant.project.basedir} - ]]> - - - - - - Outputs the message to the build log or the specified file. - - - - - The message to output. - - - - - Gets or sets the inline content that should be output. - - - The inline content that should be output. - - - - - The file to write the message to. - - - - - Determines whether the should append to the - file, or overwrite it. By default, the file will be overwritten. - - - if output should be appended to the file; - otherwise, . The default is - . - - - - - The logging level with which the message should be output. The default - is . - - - - - Executes a system command. - - - - Use of nested element(s) - is advised over the parameter, as - it supports automatic quoting and can resolve relative to absolute - paths. - - - - Ping "nant.sourceforge.net". - - - - - ]]> - - - - - Execute a java application using IKVM.NET that requires the - Apache FOP jars, and a set of custom jars. - - - - - - - - - - - - - - - - - - - - - ]]> - - - Assuming the base directory of the build file is "c:\ikvm-test" and - the value of the "fop.dist.dir" property is "c:\fop", then the value - of the -cp argument that is passed toikvm.exe is - "c:\ikvm-test\conf;c:\fop\build\fop.jar;conf;c:\fop\lib\xercesImpl-2.2.1.jar;c:\fop\lib\avalon-framework-cvs-20020806.jar;c:\fop\lib\batik.jar;c:\ikvm-test\lib\mylib.jar;c:\ikvm-test\lib\otherlib.zip" - on a DOS-based system. - - - - - - Provides the abstract base class for tasks that execute external applications. - - - - When a is applied to the - deriving class and does not return an - absolute path, then the program to execute will first be searched for - in the location specified by . - - - If the program does not exist in that location, then the list of tool - paths of the current target framework will be scanned in the order in - which they are defined in the NAnt configuration file. - - - - - - Defines the exit code that will be returned by - if the process could not be started, or did not exit (in time). - - - - - Will be used to ensure thread-safe operations. - - - - - Starts the external process and captures its output. - - - The external process did not finish within the configured timeout. - -or- - The exit code of the external process indicates a failure. - - - - - Updates the of the specified - . - - The of which the should be updated. - - - - Starts the process and handles errors. - - The that was started. - - - - Reads from the stream until the external program is ended. - - - - - Reads from the stream until the external program is ended. - - - - - Determines the path of the external program that should be executed. - - - A fully qualifies pathname including the program name. - - The task is not available or not configured for the current framework. - - - - The name of the executable that should be used to launch the - external program. - - - The name of the executable that should be used to launch the external - program, or if no name is specified. - - - If available, the configured value in the NAnt configuration - file will be used if no name is specified. - - - - - Gets the filename of the external program to start. - - - The filename of the external program. - - - Override in derived classes to explicitly set the location of the - external tool. - - - - - Gets the command-line arguments for the external program. - - - The command-line arguments for the external program. - - - - - Gets the file to which the standard output should be redirected. - - - The file to which the standard output should be redirected, or - if the standard output should not be - redirected. - - - The default implementation will never allow the standard output - to be redirected to a file. Deriving classes should override this - property to change this behaviour. - - - - - Gets a value indicating whether output will be appended to the - . - - - if output should be appended to the ; - otherwise, . - - - - - Gets the working directory for the application. - - - The working directory for the application. - - - - - The maximum amount of time the application is allowed to execute, - expressed in milliseconds. Defaults to no time-out. - - - - - The command-line arguments for the external program. - - - - - Specifies whether the external program is a managed application - which should be executed using a runtime engine, if configured. - The default is . - - - if the external program should be executed - using a runtime engine; otherwise, . - - - - - Specifies whether the external program is a managed application - which should be executed using a runtime engine, if configured. - The default is . - - - if the external program should be executed - using a runtime engine; otherwise, . - - - - - Gets or sets the to which standard output - messages of the external program will be written. - - - The to which standard output messages of - the external program will be written. - - - By default, standard output messages wil be written to the build log - with level . - - - - - Gets or sets the to which error output - of the external program will be written. - - - The to which error output of the external - program will be written. - - - By default, error output wil be written to the build log with level - . - - - - - Gets the value that the process specified when it terminated. - - - The code that the associated process specified when it terminated, - or -1000 if the process could not be started or did not - exit (in time). - - - - - Gets the unique identifier for the spawned application. - - - - - Gets or sets a value indicating whether the application should be - spawned. If you spawn an application, its output will not be logged - by NAnt. The default is . - - - - - Gets the command-line arguments, separated by spaces. - - - - - Performs additional checks after the task has been initialized. - - does not hold a valid file name. - - - - Executes the external program. - - - - - The program to execute without command arguments. - - - The path will not be evaluated to a full path using the project - base directory. - - - - - The command-line arguments for the program. These will be - passed as is to the external program. When quoting is necessary, - these must be explictly set as part of the value. Consider using - nested elements instead. - - - - - Environment variables to pass to the program. - - - - - The directory in which the command will be executed. - - - The directory in which the command will be executed. The default - is the project's base directory. - - - - The working directory will be evaluated relative to the project's - base directory if it is relative. - - - - - - - The name of a property in which the exit code of the program should - be stored. Only of interest if is - . - - - If the exit code of the program is "-1000" then the program could - not be started, or did not exit (in time). - - - - - - Specifies whether the external program should be executed using a - runtime engine, if configured. The default is . - - - if the external program should be executed - using a runtime engine; otherwise, . - - - - - Specifies whether the external program is a managed application - which should be executed using a runtime engine, if configured. - The default is . - - - if the external program should be executed - using a runtime engine; otherwise, . - - - - - Gets the filename of the external program to start. - - - The filename of the external program. - - - - - Gets the command-line arguments for the external program. - - - The command-line arguments for the external program. - - - - - The directory the program is in. - - - - The directory the program is in. The default is the project's base - directory. - - - The basedir will be evaluated relative to the project's base - directory if it is relative. - - - - - - The file to which the standard output will be redirected. - - - By default, the standard output is redirected to the console. - - - - - Gets or sets a value indicating whether output should be appended - to the output file. The default is . - - - if output should be appended to the ; - otherwise, . - - - - - Gets or sets a value indicating whether the application should be - spawned. If you spawn an application, its output will not be logged - by NAnt. The default is . - - - - - The name of a property in which the unique identifier of the spawned - application should be stored. Only of interest if - is . - - - - - Exits the current build by throwing a , - optionally printing additional information. - - - - The cause of the build failure can be specified using the - attribute or as inline content. - - - Macros in the message will be expanded. - - - - Exits the current build without giving further information. - - - ]]> - - - - Exits the current build and writes a message to the build log. - - - ]]> - - - - Functionally equivalent to the previous example. - - Something wrong here. - ]]> - - - - - - A message giving further information on why the build exited. - - - Inline content and are mutually exclusive. - - - - - Gets or sets the inline content that should be output in the build - log, giving further information on why the build exited. - - - The inline content that should be output in the build log. - - - Inline content and are mutually exclusive. - - - - - Gets a particular file from a URL source. - - - - Options include verbose reporting and timestamp based fetches. - - - Currently, only HTTP and UNC protocols are supported. FTP support may - be added when more pluggable protocols are added to the System.Net - assembly. - - - The option enables you to control downloads - so that the remote file is only fetched if newer than the local copy. - If there is no local copy, the download always takes place. When a file - is downloaded, the timestamp of the downloaded file is set to the remote - timestamp. - - - This timestamp facility only works on downloads using the HTTP protocol. - - - - - Gets the index page of the NAnt home page, and stores it in the file - help/index.html relative to the project base directory. - - - - ]]> - - - - - Gets the index page of a secured web site using the given credentials, - while connecting using the specified password-protected proxy server. - - - - - - - - - ]]> - - - - - - Initializes task and ensures the supplied attributes are valid. - - - - - This is where the work is done - - - - - Sets the timestamp of a given file to a specified time. - - - - - The URL from which to retrieve a file. - - - - - The file where to store the retrieved file. - - - - - If inside a firewall, proxy server/port information - Format: {proxy server name}:{port number} - Example: proxy.mycompany.com:8080 - - - - - The network proxy to use to access the Internet resource. - - - - - The network credentials used for authenticating the request with - the Internet resource. - - - - - Log errors but don't treat as fatal. The default is . - - - - - Conditionally download a file based on the timestamp of the local - copy. HTTP only. The default is . - - - - - The length of time, in milliseconds, until the request times out. - The default is 100000 milliseconds. - - - - - The security certificates to associate with the request. - - - - - Checks the conditional attributes and executes the children if - . - - - - If no conditions are checked, all child tasks are executed. - - - If more than one attribute is used, they are &&'d. The first - to fail stops the check. - - - The order of condition evaluation is, , - , , - . - - - instead of using the deprecated attributes, we advise you to use the - following functions in combination with the - attribute: - - - - Function - Description - - - - Checks whether the specified property exists. - - - - Checks whether the specified target exists. - - - - - Tests the value of a property using expressions. - - - Build release configuration - - ]]> - - - - Tests the the output of a function. - - - - - ]]> - - - - (Deprecated) Check that a target exists. - - - - - - ]]> - - - - (Deprecated) Check existence of a property. - - - - - ]]> - - - - (Deprecated) Check that a property value is true. - - - - - ]]> - - - - - (Deprecated) Check that a property exists and is - (uses multiple conditions). - - - - - - ]]> - - which is the same as - - - - - - - ]]> - - - - - (Deprecated) Check file dates. If myfile.dll is uptodate, - then do stuff. - - - - - - ]]> - - or - - - - - - - - ]]> - - or - - - - - - - - - - - ]]> - - - - - - Executes embedded tasks in the order in which they are defined. - - - - - Automatically exclude build elements that are defined on the task - from things that get executed, as they are evaluated normally during - XML task initialization. - - - - - Creates and executes the embedded (child XML nodes) elements. - - - Skips any element defined by the host that has - a defined. - - - - - Gets a value indicating whether the element is performing additional - processing using the that was use to - initialize the element. - - - , as a is - responsable for creating tasks from the nested build elements. - - - - - The file to compare if uptodate. - - - - - The file to check against for the uptodate file. - - - - - The that contains the comparison files for - the (s) check. - - - - - The that contains the uptodate files for - the (s) check. - - - - - Used to test whether a property is true. - - - - - Used to test whether a property exists. - - - - - Used to test whether a target exists. - - - - - Used to test arbitrary boolean expression. - - - - - The opposite of the if task. - - - Check that a property does not exist. - - - - - ]]> - - Check that a property value is not true. - - - - - ]]> - - - - Check that a target does not exist. - - - - - ]]> - - - - - - Includes an external build file. - - - - This task is used to break your build file into smaller chunks. You - can load a partial build file and have it included into the build file. - - - Any global (project level) tasks in the included build file are executed - when this task is executed. Tasks in target elements are only executed - if that target is executed. - - - The project element attributes are ignored. - - - This task can only be in the global (project level) section of the - build file. - - - This task can only include files from the file system. - - - - - Include a task that fetches the project version from the - GetProjectVersion.include build file. - - - - ]]> - - - - - - Used to check for recursived includes. - - - - - Verifies parameters. - - - - - Build file to include. - - - - - Load a text file into a single property. - - - - Unless an encoding is specified, the encoding associated with the - system's current ANSI code page is used. - - - An UTF-8, little-endian Unicode, and big-endian Unicode encoded text - file is automatically recognized, if the file starts with the appropriate - byte order marks. - - - - - Load file message.txt into property "message". - - - - ]]> - - - - - Load a file using the "latin-1" encoding. - - - - ]]> - - - - - Load a file, replacing all @NOW@ tokens with the current - date/time. - - - - - - - - - - ]]> - - - - - - The file to load. - - - - - The name of the property to save the content to. - - - - - The encoding to use when loading the file. The default is the encoding - associated with the system's current ANSI code page. - - - - - The filterchain definition to use. - - - - - Loads tasks form a given assembly or all assemblies in a given directory - or . - - - - Load tasks from a single assembly. - - - - ]]> - - - - - Scan a single directory for task assemblies. - - - - ]]> - - - - - Use a containing both a directory and an - assembly. - - - - - - - - - ]]> - - - - - - Executes the Load Tasks task. - - Specified assembly or path does not exist. - - - - Validates the attributes. - - Both and are set. - - - - An assembly to load tasks from. - - - - - A directory to scan for task assemblies. - - - - - Used to select which directories or individual assemblies to scan. - - - - - Loops over a set of items. - - - - Can loop over files in directory, lines in a file, etc. - - - The property value is stored before the loop is done, and restored - when the loop is finished. - - - The property is returned to its normal value once it is used. Read-only - parameters cannot be overridden in this loop. - - - - Loops over the files in c:\. - - - - - ]]> - - - - Loops over all files in the project directory. - - - - - - - - - - - - ]]> - - - - Loops over the folders in c:\. - - - - - ]]> - - - - Loops over all folders in the project directory. - - - - - - - - - - - - ]]> - - - - Loops over a list. - - - - - ]]> - - - - - Loops over lines in the file properties.csv, where each line - is of the format name,value. - - - - - - ]]> - - - - - - The NAnt property name(s) that should be used for the current - iterated item. - - - If specifying multiple properties, separate them with a comma. - - - - - The type of iteration that should be done. - - - - - The type of whitespace trimming that should be done. The default - is . - - - - - The source of the iteration. - - - - - The deliminator char. - - - - - Stuff to operate in. Just like the - attribute, but supports more complicated things like a - and such. - - Please remove the attribute if you - are using this element. - - - - - - Tasks to execute for each matching item. - - - - - Do not remove any white space characters. - - - - - Remove all white space characters from the end of the current - item. - - - - - Remove all white space characters from the beginning of the - current item. - - - - - Remove all white space characters from the beginning and end of - the current item. - - - - - Sends an SMTP message. - - - - Text and text files to include in the message body may be specified as - well as binary attachments. - - - - - Sends an email from nant@sourceforge.net to three recipients - with a subject about the attachments. The body of the message will be - the combined contents of all .txt files in the base directory. - All zip files in the base directory will be included as attachments. - The message will be sent using the smtpserver.anywhere.com SMTP - server. - - - - - - - - - - - ]]> - - - - - - Initializes task and ensures the supplied attributes are valid. - - - - - This is where the work is done. - - - - - Reads a text file and returns the content - in a string. - - The file to read content of. - - The content of the specified file. - - - - - Email address of sender. - - - - - Semicolon-separated list of recipient email addresses. - - - - - Semicolon-separated list of CC: recipient email addresses. - - - - - Semicolon-separated list of BCC: recipient email addresses. - - - - - Host name of mail server. The default is localhost. - - - - - Text to send in body of email message. - - - - - Text to send in subject line of email message. - - - - - Format of the message. The default is . - - - - - Files that are transmitted as part of the body of the email message. - - - - - Attachments that are transmitted with the message. - - - - - Creates a directory and any non-existent parent directory if necessary. - - - Create the directory build. - - - ]]> - - - - Create the directory tree one/two/three. - - - ]]> - - - - - - Creates the directory specified by the property. - - The directory could not be created. - - - - The directory to create. - - - - - Moves a file or set of files to a new file or directory. - - - - Files are only moved if the source file is newer than the destination - file, or if the destination file does not exist. However, you can - explicitly overwrite files with the - attribute. - - - A can be used to select files to move. To use - a , the - attribute must be set. - -

            Encoding

            - - Unless an encoding is specified, the encoding associated with the - system's current ANSI code page is used. - - - An UTF-8, little-endian Unicode, and big-endian Unicode encoded text - file is automatically recognized, if the file starts with the - appropriate byte order marks. - - - If you employ filters in your move operation, you should limit the - move to text files. Binary files will be corrupted by the move - operation. - -
            - - - Move a single file while changing its encoding from "latin1" to - "utf-8". - - - - ]]> - - - - Move a set of files. - - - - - - - ]]> - - - - - Move a set of files to a directory, replacing @TITLE@ with - "Foo Bar" in all files. - - - - - - - - - - - - - ]]> - - -
            - - - Actually does the file moves. - - - - - The file to move. - - - - - The file to move to. - - - - - The directory to move to. - - - - - Used to select the files to move. To use a , - the attribute must be set. - - - - - Ignore directory structure of source directory, move all files into - a single directory, specified by the - attribute. The default is . - - - - - Chain of filters used to alter the file's content as it is moved. - - - - - Creates an XSD File for all available tasks. - - - - This can be used in conjuntion with the command-line option to do XSD - Schema validation on the build file. - - - - Creates a NAnt.xsd file in the current project directory. - - - ]]> - - - - - - Creates a NAnt Schema for given types - - The output stream to save the schema to. If , writing is ignored, no exception generated. - The list of tasks to generate XML Schema for. - The list of datatypes to generate XML Schema for. - The target namespace to output. - The new NAnt Schema. - - - - Creates a new instance. - - The name of the attribute. - Value indicating whether the attribute should be required. - The new instance. - - - - Creates a new instance. - - The minimum value to allow for this choice - The maximum value to allow, Decimal.MaxValue sets it to 'unbound' - The new instance. - - - - The name of the output file to which the XSD should be written. - - - - - The target namespace for the output. Defaults to "http://tempuri.org/nant-donotuse.xsd" - - - - - The for which an XSD should be created. If not - specified, an XSD will be created for all available tasks. - - - - - Creates a new instance of the - class. - - Tasks for which a schema should be generated. - Data Types for which a schema should be generated. - The namespace to use. - http://tempuri.org/nant.xsd - - - - - Runs NAnt on a supplied build file, or a set of build files. - - - - By default, all the properties of the current project will be available - in the new project. Alternatively, you can set - to to not copy any properties to the new - project. - - - You can also set properties in the new project from the old project by - using nested property tags. These properties are always passed to the - new project regardless of the setting of . - This allows you to parameterize your subprojects. - - - References to data types can also be passed to the new project, but by - default they are not. If you set the to - , all references will be copied. - - - - - Build a project located in a different directory if the debug - property is not . - - - - ]]> - - - - - Build a project while adding a set of properties to that project. - - - - - - - - - - ]]> - - - - - Build all projects named default.build located anywhere under - the project base directory. - - - - - - - - - - ]]> - - - - - - Validates the element. - - - - - The build file to build. - - - - - The target to execute. To specify more than one target seperate - targets with a space. Targets are executed in order if possible. - The default is to use target specified in the project's default - attribute. - - - - - Used to specify a set of build files to process. - - - - - Specifies whether current property values should be inherited by - the executed project. The default is . - - - - - Specifies whether all references will be copied to the new project. - The default is . - - - - - Specifies a collection of properties that should be created in the - executed project. Note, existing properties with identical names - that are not read-only will be overwritten. - - - - - Sets a property in the current project. - - - NAnt uses a number of predefined properties. - - - - Define a debug property with value . - - - - ]]> - - - - - Use the user-defined debug property. - - - - ]]> - - - - - Define a read-only property. This is just like passing in the param - on the command line. - - - - ]]> - - - - - Define a property, but do not overwrite the value if the property already exists (eg. it was specified on the command line). - - - - - - - ]]> - - - Executing this build file with the command line option -D:debug=false, - would cause the value specified on the command line to remain unaltered. - - - - - - - - - The name of the NAnt property to set. - - - - - The value to assign to the NAnt property. - - - - - Specifies whether the property is read-only or not. - The default is . - - - - - Specifies whether references to other properties should not be - expanded when the value of the property is set, but expanded when - the property is actually used. By default, properties will be - expanded when set. - - - - - Specifies whether the value of a property should be overwritten if - the property already exists (unless the property is read-only). - The default is . - - - - - Sets project properties based on the evaluatuion of a regular expression. - - - - The attribute must contain one or more - - named grouping constructs, which represents the names of the - properties to be set. These named grouping constructs can be enclosed - by angle brackets (?<name>) or single quotes (?'name'). - - - In the build file, use the XML element to specify <, - and to specify >. - - - The named grouping construct must not contain any punctuation and it - cannot begin with a number. - - - - - Find the last word in the given string and stores it in the property - lastword. - - - - - ]]> - - - - - Split the full filename and extension of a filename. - - - - ]]> - - - - - Split the path and the filename. (This checks for / or \ - as the path separator). - - - - ]]> - - - Results in path=d:\Temp\SomeDir\SomeDir\ and file=bla.xml. - - - - - - Executes the task. - - - - - Represents the regular expression to be evalued. - - - The regular expression to be evalued. - - - The pattern must contain one or more named constructs, which may - not contain any punctuation and cannot begin with a number. - - - - - A comma separated list of options to pass to the regex engine. The - default is . - - - - - Represents the input for the regular expression. - - - The input for the regular expression. - - - - - Sets an environment variable or a whole collection of them. Use an empty - attribute to clear a variable. - - - - Variables will be set for the current NAnt process and all child - processes that NAnt spawns (compilers, shell tools, etc). If the - intention is to only set a variable for a single child process, then - using the and its nested - element might be a better option. - - - Expansion of inline environment variables is performed using the syntax - of the current platform. So on Windows platforms using the string %PATH% - in the attribute will result in the value of - the PATH variable being expanded in place before the variable is set. - - - - Set the MONO_PATH environment variable on a *nix platform. - - - ]]> - - - - Set a collection of environment variables. Note the nested variable used to set var3. - - - - - - - ]]> - - - - Set environment variables using nested path elements. - - - - - - - - - - - - - - - - - ]]> - - - - - - Win32 DllImport for the SetEnvironmentVariable function. - - - - - - - - *nix dllimport for the setenv function. - - - - - - - - - Checks whether the task is initialized with valid attributes. - - - - - Set the environment variables - - - - - Do the actual work here. - - The name of the environment variable. - The value of the environment variable. - - - - The name of a single Environment variable to set - - - - - The literal value for the environment variable. - - - - - The value for a file-based environment variable. NAnt will convert - it to an absolute filename. - - - - - The value for a directory-based environment variable. NAnt will - convert it to an absolute path. - - - - - The value for a PATH like environment variable. You can use - : or ; as path separators and NAnt will convert it to - the platform's local conventions. - - - - - A task for sleeping a specified period of time, useful when a build or deployment process - requires an interval between tasks. - - - Sleep 1 hour, 2 minutes, 3 seconds and 4 milliseconds. - - - ]]> - - - - Sleep 123 milliseconds. - - - ]]> - - - - - - Verify parameters. - - - - - Return time to sleep. - - - - - Sleeps for the specified number of milliseconds. - - Number of milliseconds to sleep. - - - - Hours to add to the sleep time. - - - - - Minutes to add to the sleep time. - - - - - Seconds to add to the sleep time. - - - - - Milliseconds to add to the sleep time. - - - - - Processes a document via XSLT. - - - Create a report in HTML. - - - ]]> - - - - Create a report in HTML, with a param. - - - - - - - ]]> - - - - Create a report in HTML, with a expanded param. - - - - - - - ]]> - - - - Create some code based on a directory of templates. - - - - - - - - - - ]]> - - - - - - Directory in which to store the results. The default is the project - base directory. - - - - - Desired file extension to be used for the targets. The default is - html. - - - - - URI or path that points to the stylesheet to use. If given as path, it can - be relative to the project's basedir or absolute. - - - - - Specifies a single XML document to be styled. Should be used with - the attribute. - - - - - Specifies the output name for the styled result from the - attribute. - - - - - Specifies a group of input files to which to apply the stylesheet. - - - - - XSLT parameters to be passed to the XSLT transformation. - - - - - XSLT extension objects to be passed to the XSLT transformation. - - - - - The network proxy to use to access the Internet resource. - - - - - Sets properties with system information. - - - Sets a number of properties with information about the system environment. The intent of this task is for nightly build logs to have a record of system information so that the build was performed on. - - - Property - Value - - - <>.clr.version - Common Language Runtime version number. - - - <>.env.* - Environment variables (e.g., <>.env.PATH). - - - <>.os.platform - Operating system platform ID. - - - <>.os.version - Operating system version. - - - <>.os - Operating system version string. - - - <>.os.folder.applicationdata - The directory that serves as a common repository for application-specific data for the current roaming user. - - - <>.os.folder.commonapplicationdata - The directory that serves as a common repository for application-specific data that is used by all users. - - - <>.os.folder.commonprogramfiles - The directory for components that are shared across applications. - - - <>.os.folder.desktopdirectory - The directory used to physically store file objects on the desktop. Do not confuse this directory with the desktop folder itself, which is a virtual folder. - - - <>.os.folder.programfiles - The Program Files directory. - - - <>.os.folder.system - The System directory. - - - <>.os.folder.temp - The temporary directory. - - - - When the name of an environment variable is not a valid property name, - the task will fail. In that case, set to - to allow that environment variable to be - skipped. - - - we advise you to use the following functions instead: - - - - Function - Description - - - - Gets a object that identifies this operating system. - - - - Gets the path to a system special folder. - - - - Returns the value of a environment variable. - - - - Gets the path to the temporary directory. - - - - Gets the Common Language Runtime version. - - - - - Register the properties with the default property prefix. - - - ]]> - - - - Register the properties without a prefix. - - - ]]> - - - - Register properties and display a summary. - - - ]]> - - - - - - The string to prefix the property names with. The default is "sys.". - - - - - Sets properties with the current date and time. - - - - By default the displays the current date - and time and sets the following properties: - - - tstamp.date to yyyyMMdd - tstamp.time to HHmm - tstamp.now using the default DateTime.ToString() method - - - To set an additional property with a custom date/time use the - and attributes. - To set a number of additional properties with the exact same date and - time use the nested element (see example). - - - The date and time string displayed by the - uses the computer's default long date and time string format. You - might consider setting these to the - ISO 8601 standard - for date and time notation. - - - - Set the build.date property. - - - ]]> - - - - Set a number of properties for Ant like compatibility. - - - - - - - ]]> - - - - - - The property to receive the date/time string in the given pattern. - - - - The date/time pattern to be used. - - The following table lists the standard format characters for each standard pattern. The format characters are case-sensitive; for example, 'g' and 'G' represent slightly different patterns. - - - Format Character - Description Example Format Pattern (en-US) - - dMM/dd/yyyy - Ddddd, dd MMMM yyyy - fdddd, dd MMMM yyyy HH:mm - Fdddd, dd MMMM yyyy HH:mm:ss - gMM/dd/yyyy HH:mm - GMM/dd/yyyy HH:mm:ss - m, MMMMM dd - r, Rddd, dd MMM yyyy HH':'mm':'ss 'GMT' - syyyy'-'MM'-'dd'T'HH':'mm':'ss - tHH:mm - THH:mm:ss - uyyyy'-'MM'-'dd HH':'mm':'ss'Z' - Udddd, dd MMMM yyyy HH:mm:ss - y, Yyyyy MMMM - - The following table lists the patterns that can be combined to construct custom patterns. The patterns are case-sensitive; for example, "MM" is recognized, but "mm" is not. If the custom pattern contains white-space characters or characters enclosed in single quotation marks, the output string will also contain those characters. Characters not defined as part of a format pattern or as format characters are reproduced literally. - - - Format - Pattern Description - - dThe day of the month. Single-digit days will not have a leading zero. - ddThe day of the month. Single-digit days will have a leading zero. - dddThe abbreviated name of the day of the week. - ddddThe full name of the day of the week. - MThe numeric month. Single-digit months will not have a leading zero. - MMThe numeric month. Single-digit months will have a leading zero. - MMMThe abbreviated name of the month. - MMMMThe full name of the month. - yThe year without the century. If the year without the century is less than 10, the year is displayed with no leading zero. - yyThe year without the century. If the year without the century is less than 10, the year is displayed with a leading zero. - yyyyThe year in four digits, including the century. - ggThe period or era. This pattern is ignored if the date to be formatted does not have an associated period or era string. - hThe hour in a 12-hour clock. Single-digit hours will not have a leading zero. - hhThe hour in a 12-hour clock. Single-digit hours will have a leading zero. - HThe hour in a 24-hour clock. Single-digit hours will not have a leading zero. - HHThe hour in a 24-hour clock. Single-digit hours will have a leading zero. - mThe minute. Single-digit minutes will not have a leading zero. - mmThe minute. Single-digit minutes will have a leading zero. - sThe second. Single-digit seconds will not have a leading zero. - ssThe second. Single-digit seconds will have a leading zero. - fThe fraction of a second in single-digit precision. The remaining digits are truncated. - ffThe fraction of a second in double-digit precision. The remaining digits are truncated. - fffThe fraction of a second in three-digit precision. The remaining digits are truncated. - ffffThe fraction of a second in four-digit precision. The remaining digits are truncated. - fffffThe fraction of a second in five-digit precision. The remaining digits are truncated. - ffffffThe fraction of a second in six-digit precision. The remaining digits are truncated. - fffffffThe fraction of a second in seven-digit precision. The remaining digits are truncated. - tThe first character in the AM/PM designator. - ttThe AM/PM designator. - zThe time zone offset ("+" or "-" followed by the hour only). Single-digit hours will not have a leading zero. For example, Pacific Standard Time is "-8". - zzThe time zone offset ("+" or "-" followed by the hour only). Single-digit hours will have a leading zero. For example, Pacific Standard Time is "-08". - zzzThe full time zone offset ("+" or "-" followed by the hour and minutes). Single-digit hours and minutes will have leading zeros. For example, Pacific Standard Time is "-08:00". - :The default time separator. - /The default date separator. - \ cPattern Where c is any character. Displays the character literally. To display the backslash character, use "\\". - - - - - - Touches a file or set of files -- corresponds to the Unix touch command. - - - - If the file specified does not exist, the task will create it. - - - - Touch the Main.cs file. The current time is used. - - - ]]> - - - - - Touch all executable files in the project base directory and its - subdirectories. - - - - - - - - - ]]> - - - - - - Ensures the supplied attributes are valid. - - - - - The file to touch. - - - - - Specifies the new modification time of the file(s) in milliseconds - since midnight Jan 1 1970. - - - - - Specifies the new modification time of the file in the format - MM/DD/YYYY HH:MM:SS. - - - - - Used to select files that should be touched. - - - - - Check modification dates on groups of files. - - - If all are same or newer than all , the specified property is set to , otherwise it - is set to . - - - - Check file dates. If myfile.dll is same or newer than myfile.cs, then set myfile.dll.uptodate property - to either or . - - - - - - - - - - - ]]> - - - - - - Property that will be set to or depending on the - result of the date check. - - - - - The that contains list of source files. - - - - - The that contains list of target files. - - - - - Extracts text from an XML file at the location specified by an XPath - expression. - - - - If the XPath expression specifies multiple nodes the node index is used - to determine which of the nodes' text is returned. - - - - - The example provided assumes that the following XML file (App.config) - exists in the current build directory. - - - - - - - - - ]]> - - - - - The example will read the server value from the above - configuration file. - - - - - - - - ]]> - - - - - - Executes the XML peek task. - - - - - Loads an XML document from a file on disk. - - The file name of the file to load the XML document from. - - A document containing - the document object representing the file. - - - - - Gets the contents of the node specified by the XPath expression. - - The XPath expression used to determine which nodes to choose from. - The XML document to select the nodes from. - The node index in the case where multiple nodes satisfy the expression. - - The contents of the node specified by the XPath expression. - - - - - The name of the file that contains the XML document - that is going to be peeked at. - - - - - The index of the node that gets its text returned when the query - returns multiple nodes. - - - - - The property that receives the text representation of the XML inside - the node returned from the XPath expression. - - - - - The XPath expression used to select which node to read. - - - - - Namespace definitions to resolve prefixes in the XPath expression. - - - - - Replaces text in an XML file at the location specified by an XPath - expression. - - - - The location specified by the XPath expression must exist, it will - not create the parent elements for you. However, provided you have - a root element you could use a series of the tasks to build the - XML file up if necessary. - - - - - Change the server setting in the configuration from testhost.somecompany.com - to productionhost.somecompany.com. - - XML file: - - - - - - - - ]]> - - Build fragment: - - - ]]> - - - - - Modify the noNamespaceSchemaLocation in an XML file. - - XML file: - - - - - ]]> - - Build fragment: - - - - - - - ]]> - - - - - - Executes the XML poke task. - - - - - Loads an XML document from a file on disk. - - - The file name of the file to load the XML document from. - - - An containing - the document object model representing the file. - - - - - Given an XML document and an expression, returns a list of nodes - which match the expression criteria. - - - The XPath expression used to select the nodes. - - - The XML document that is searched. - - - An to use for resolving namespaces - for prefixes in the XPath expression. - - - An containing references to the nodes - that matched the XPath expression. - - - - - Given a node list, replaces the XML within those nodes. - - - The list of nodes to replace the contents of. - - - The text to replace the contents with. - - - - - Saves the XML document to a file. - - The XML document to be saved. - The file name to save the XML document under. - - - - The name of the file that contains the XML document that is going - to be poked. - - - - - The XPath expression used to select which nodes are to be modified. - - - - - The value that replaces the contents of the selected nodes. - - - - - Namespace definitions to resolve prefixes in the XPath expression. - - - - - Represents a command-line argument. - - - - When passed to an external application, the argument will be quoted - when appropriate. This does not apply to the - parameter, which is always passed as is. - - - - - A single command-line argument containing a space character. - - - - ]]> - - - - - Two separate command-line arguments. - - - - ]]> - - - - - A single command-line argument with the value \dir;\dir2;\dir3 - on DOS-based systems and /dir:/dir2:/dir3 on Unix-like systems. - - - - ]]> - - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified command-line argument. - - - - - Initializes a new instance of the class - with the given file. - - - - - Initializes a new instance of the class - with the given path. - - - - - Returns the argument as a . - - - The argument as a . - - - File and individual path elements will be quoted if necessary. - - - - - Quotes a command line argument if it contains a single quote or a - space. - - The command line argument. - - A quoted command line argument if - contains a single quote or a space; otherwise, - . - - - - - A single command-line argument; can contain space characters. - - - - - The name of a file as a single command-line argument; will be - replaced with the absolute filename of the file. - - - - - The value for a directory-based command-line argument; will be - replaced with the absolute path of the directory. - - - - - The value for a PATH-like command-line argument; you can use - : or ; as path separators and NAnt will convert it - to the platform's local conventions, while resolving references to - environment variables. - - - Individual parts will be replaced with the absolute path, resolved - relative to the project base directory. - - - - - Sets a single command-line argument and treats it like a PATH - ensures - the right separator for the local platform is used. - - - - - List of command-line arguments; will be passed to the executable - as is. - - - - - Indicates if the argument should be passed to the external program. - If then the argument will be passed; - otherwise, skipped. The default is . - - - - - Indicates if the argument should not be passed to the external - program. If then the argument will be - passed; otherwise, skipped. The default is . - - - - - Gets string value corresponding with the argument. - - - - - Contains a collection of elements. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Determines whether a with the specified - value is in the collection. - - The argument value to locate in the collection. - - if a with value - is found in the collection; otherwise, - . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - 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. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Gets the with the specified value. - - The value of the to get. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Provides credentials for password-based authentication schemes. - - - - - Initializes a new instance of the class. - - - - - Returns a instance representing - the current . - - - A instance representing the current - , or if the - credentials should not be used to provide authentication information - to the external resource. - - - - - The domain or computer name that verifies the credentials. - - - - - The password for the user name associated with the credentials. - - - - - The user name associated with the credentials. - - - - - Indicates if the credentials should be used to provide authentication - information to the external resource. If then - the credentials will be passed; otherwise, not. The default is - . - - - - - Indicates if the credentials should not be used to provide authentication - information to the external resource. If then the - credentials will be passed; otherwise, not. The default is - . - - - - - A specialized used for specifying a set of - directories. - - - Hint for supporting tasks that the included directories instead of - files should be used. - - - - - Filesets are groups of files. These files can be found in a directory - tree starting in a base directory and are matched by patterns taken - from a number of patterns. Filesets can appear inside tasks that support - this feature or at the project level, i.e., as children of <project>. - - -

            Patterns

            - - As described earlier, patterns are used for the inclusion and exclusion. - These patterns look very much like the patterns used in DOS and UNIX: - - - - - '*' matches zero or more characters - For example: - - *.cs matches .cs, x.cs and FooBar.cs, - but not FooBar.xml (does not end with .cs). - - - - - - '?' matches one character - For example: - - ?.cs matches x.cs, A.cs, but not - .cs or xyz.cs (both don't have one character - before .cs). - - - - - - Combinations of *'s and ?'s are allowed. - - - Matching is done per-directory. This means that first the first directory - in the pattern is matched against the first directory in the path to match. - Then the second directory is matched, and so on. For example, when we have - the pattern /?abc/*/*.cs and the path /xabc/foobar/test.cs, - the first ?abc is matched with xabc, then * is matched - with foobar, and finally *.cs is matched with test.cs. - They all match, so the path matches the pattern. - - - To make things a bit more flexible, we added one extra feature, which makes - it possible to match multiple directory levels. This can be used to match a - complete directory tree, or a file anywhere in the directory tree. To do this, - ** must be used as the name of a directory. When ** is used as - the name of a directory in the pattern, it matches zero or more directories. - For example: /test/** matches all files/directories under /test/, - such as /test/x.cs, or /test/foo/bar/xyz.html, but not /xyz.xml. - - - There is one "shorthand" - if a pattern ends with / or \, then - ** is appended. For example, mypackage/test/ is interpreted as - if it were mypackage/test/**. - -

            Case-Sensitivity

            - - By default, pattern matching is case-sensitive on Unix and case-insensitive - on other platforms. The parameter can be used - to override this. - -

            Default Excludes

            - - There are a set of definitions that are excluded by default from all - tasks that use filesets. They are: - - - - - **/*~ - - - - - **/#*# - - - - - **/.#* - - - - - **/%*% - - - - - **/CVS - - - - - **/CVS/** - - - - - **/.cvsignore - - - - - **/.svn - - - - - **/.svn/** - - - - - **/_svn - - - - - **/_svn/** - - - - - **/SCCS - - - - - **/SCCS/** - - - - - **/vssver.scc - - - - - **/_vti_cnf/** - - - - - If you do not want these default excludes applied, you may disable them - by setting to . - -
            - - - - Pattern - Match - - - **/CVS/* - - - Matches all files in CVS directories that can be - located anywhere in the directory tree. - - Matches: - - - CVS/Repository - - - org/apache/CVS/Entries - - - org/apache/jakarta/tools/ant/CVS/Entries - - - But not: - - - org/apache/CVS/foo/bar/Entries (foo/bar/ part does not match) - - - - - - org/apache/jakarta/** - - - Matches all files in the org/apache/jakarta directory - tree. - - Matches: - - - org/apache/jakarta/tools/ant/docs/index.html - - - org/apache/jakarta/test.xml - - - But not: - - - org/apache/xyz.java (jakarta/ part is missing) - - - - - - org/apache/**/CVS/* - - - Matches all files in CVS directories that are located - anywhere in the directory tree under org/apache. - - Matches: - - - org/apache/CVS/Entries - - - org/apache/jakarta/tools/ant/CVS/Entries - - - But not: - - - org/apache/CVS/foo/bar/Entries (foo/bar/ part does not match) - - - - - - **/test/** - - - Matches all files that have a test element in their - path, including test as a filename. - - - - - - -
            - - - Initializes a new instance of the class. - - - - - copy constructor - - - - - - Creates a shallow copy of the . - - - A shallow copy of the . - - - - - Adds a nested set of patterns, or references a standalone patternset. - - - - - Copies all instance data of the to a given - . - - - - - Determines if a file has a more recent last write time than the - given time, or no longer exists. - - A file to check the last write time against. - The datetime to compare against. - - The name of the file that has a last write time greater than - or that no longer exists; - otherwise, . - - - - - Determines if one of the given files has a more recent last write - time than the given time. If one of the given files no longer exists, - the target will be considered out-of-date. - - A collection of filenames to check the last write time against. - The datetime to compare against. - - The name of the first file that has a last write time greater than - ; otherwise, null. - - - - - Indicates whether include and exclude patterns must be treated in a - case-sensitive way. The default is on Unix; - otherwise, . - - - - - When set to , causes the fileset element to - throw a when no files match the - includes and excludes criteria. The default is . - - - - - Indicates whether default excludes should be used or not. - The default is . - - - - - The base of the directory of this fileset. The default is the project - base directory. - - - - - Gets the collection of include patterns. - - - - - Gets the collection of exclude patterns. - - - - - Gets the collection of files that will be added to the - without pattern matching or checking if the - file exists. - - - - - Gets the collection of file names that match the fileset. - - - A collection that contains the file names that match the - . - - - - - Gets the collection of directory names that match the fileset. - - - A collection that contains the directory names that match the - . - - - - - Gets the collection of directory names that were scanned for files. - - - A collection that contains the directory names that were scanned for - files. - - - - - The items to include in the fileset. - - - - - The items to include in the fileset. - - - - - The items to exclude from the fileset. - - - - - The items to exclude from the fileset. - - - - - The files from which a list of patterns or files to include should - be obtained. - - - - - The files from which a list of patterns or files to include should - be obtained. - - - - - The files from which a list of patterns or files to exclude should - be obtained. - - - - - Determines the most recently modified file in the fileset (by LastWriteTime of the ). - - - The of the file that has the newest (closest to present) last write time. - - - - - The pattern or file name to exclude. - - - - - If then the pattern will be excluded; - otherwise, skipped. The default is . - - - - - Opposite of . If - then the pattern will be excluded; otherwise, skipped. The default - is . - - - - - If then the file name will be added to - the without pattern matching or checking - if the file exists. The default is . - - - - - If then the file will be searched for - on the path. The default is . - - - - - The pattern or file name to include. - - - - - If then the pattern will be included; - otherwise, skipped. The default is . - - - - - Opposite of . If - then the pattern will be included; otherwise, skipped. The default - is . - - - - - Gets the list of patterns in . - - - - - If then the patterns will be excluded; - otherwise, skipped. The default is . - - - - - Opposite of . If - then the patterns will be excluded; otherwise, skipped. The default - is . - - - - - The name of a file; each line of this file is taken to be a - pattern. - - - - - If then the patterns in the include file - will be added to the without pattern - matching or checking if the file exists. The default is - . - - - - - If then the patterns in the include file - will be searched for on the path. The default is . - - - - - If then the patterns will be included; - otherwise, skipped. The default is . - - - - - Opposite of . If - then the patterns will be included; otherwise, skipped. The default - is . - - - - - Initializes a new instance of the class. - - - - - Copy constructor for . Required in order to - assign references of type where - is used. - - A instance to create a from. - - - - Represents an environment variable. - - - - - Initializes a instance with the - specified name and value. - - The name of the environment variable. - The value of the environment variable. - - - - Initializes a instance. - - - - - The name of the environment variable. - - - - - The literal value for the environment variable. - - - - - The value for a file-based environment variable. NAnt will convert - it to an absolute filename. - - - - - The value for a directory-based environment variable. NAnt will - convert it to an absolute path. - - - - - The value for a PATH like environment variable. You can use - : or ; as path separators and NAnt will convert it to - the platform's local conventions. - - - - - Sets a single environment variable and treats it like a PATH - - ensures the right separator for the local platform is used. - - - - - Gets the value of the environment variable. - - - - - Indicates if the environment variable should be passed to the - external program. If then the environment - variable will be passed; otherwise, skipped. The default is - . - - - - - Indicates if the environment variable should not be passed to the - external program. If then the environment - variable will be passed; otherwise, skipped. The default is - . - - - - - A set of environment variables. - - - - - Environment variable to pass to a program. - - - - - Environment variable to pass to a program. - - - - - Contains a collection of elements. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Determines whether a with the specified - value is in the collection. - - The argument value to locate in the collection. - - if a with value - is found in the collection; otherwise, - . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - 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. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Gets the with the specified name. - - The name of the to get. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - The name of the NAnt property to set. - - - - - The string pattern to use to format the property. - - - - - Indicates if the formatter should be used to format the timestamp. - If then the formatter will be used; - otherwise, skipped. The default is . - - - - - Indicates if the formatter should be not used to format the - timestamp. If then the formatter will be - used; otherwise, skipped. The default is . - - - - - Contains a collection of elements. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - 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. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Specifies the execution mode for managed applications. - - - - For backward compatibility, the following string values can also be - used in build files: - - - - Value - Corresponding field - - - "true" - - - - "false" - - - - - Even if set to , the operating system can still - run the program as a managed application. - - On Linux this can be done through binfmt_misc, while on - Windows installing the .NET Framework redistributable caused managed - applications to run on the MS CLR by default. - - - - - - Do not threat the program as a managed application. - - - - - Leave it up to the CLR to determine which specific version of - the CLR will be used to run the application. - - - - - Forces an application to run against the currently targeted - version of a given CLR. - - - - - Specialized that also supports - case-insensitive conversion of "true" to - and "false" to - . - - - - - Initializes a new instance of the - class. - - - - - Converts the given object to the type of this converter, using the - specified context and culture information. - - An that provides a format context. - A object. If a is passed, the current culture is assumed. - The to convert. - - An that represents the converted value. - - - - - Represents an option. - - - - - name, value constructor - - - - - - - Default constructor - - - - - Name of the option. - - - - - Value of the option. The default is . - - - - - Indicates if the option should be passed to the task. - If then the option will be passed; - otherwise, skipped. The default is . - - - - - Indicates if the option should not be passed to the task. - If then the option will be passed; - otherwise, skipped. The default is . - - - - - Contains a collection of elements. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Determines whether a for the specified - task is in the collection. - - The name of task for which the should be located in the collection. - - if a for the specified - task is found in the collection; otherwise, . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - 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. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Gets the with the specified name. - - The name of the option that should be located in the collection. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Represents a nested path element. - - - - - The name of a file to add to the path. Will be replaced with - the absolute path of the file. - - - - - The name of a directory to add to the path. Will be replaced with - the absolute path of the directory. - - - - - A string that will be treated as a path-like string. You can use - : or ; as path separators and NAnt will convert it - to the platform's local conventions, while resolving references - to environment variables. - - - - - If then the entry will be added to the - path; otherwise, skipped. The default is . - - - - - Opposite of . If - then the entry will be added to the path; otherwise, skipped. - The default is . - - - - - Gets the parts of a path represented by this element. - - - A containing the parts of a path - represented by this element. - - - - - - Paths are groups of files and/or directories that need to be passed as a single - unit. The order in which parts of the path are specified in the build file is - retained, and duplicate parts are automatically suppressed. - - - - - Define a global <path> that can be referenced by other - tasks or types. - - - - - - - ]]> - - - - - - Initializes a new instance of the class. - - - - - Invoked by for build - attributes with an underlying type. - - The to be used to resolve relative paths. - The string representing a path. - - - - Returns a textual representation of the path, which can be used as - PATH environment variable definition. - - - A textual representation of the path. - - - - - Defines a set of path elements to add to the current path. - - The to add. - - - - Defines a path element to add to the current path. - - The to add. - - - - Returns all path elements defined by this path object. - - - A list of path elements. - - - - - Splits a PATH (with ; or : as separators) into its parts, while - resolving references to environment variables. - - The to be used to resolve relative paths. - The path to translate. - - A PATH split up its parts, with references to environment variables - resolved and duplicate entries removed. - - - - - Initializes a new instance of the class. - - - - - The name pattern to include/exclude. - - - - - If then the pattern will be used; - otherwise, skipped. The default is . - - - - - If then the pattern will be used; - otherwise, skipped. The default is . - - - - - Contains a collection of elements. - - - - - Initializes a new instance of the class. - - - - - Removes all items from the . - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Copies the entire collection to a compatible one-dimensional array, - starting at the specified index of the target array. - - 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. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - A set of patterns, mostly used to include or exclude certain files. - - - - The individual patterns support if and unless attributes - to specify that the element should only be used if or unless a given - condition is met. - - - The and - elements load patterns from a file. When the file is a relative path, - it will be resolved relative to the project base directory in which - the patternset is defined. Each line of this file is taken to be a - pattern. - - - Patterns can be grouped to sets, and later be referenced by their - . - - - When used as a standalone element (global type), any properties that - are referenced will be resolved when the definition is processed, not - when it actually used. Passing a reference to a nested build file - will not cause the properties to be re-evaluated. - - - To improve reuse of globally defined patternsets, avoid referencing - any properties altogether. - - - - - Define a set of patterns that matches all .cs files that do not contain - the text Test in their name. - - - - - - - ]]> - - - - - Define two sets. One holding C# sources, and one holding VB sources. - Both sets only include test sources when the test property is - set. A third set combines both C# and VB sources. - - - - - - - - - - - - - - - - - ]]> - - - - - Define a set from patterns in a file. - - - - - - - ]]> - - - - - Defines a patternset with patterns that are loaded from an external - file, and shows the behavior when that patternset is passed as a - reference to a nested build script. - - - External file "c:\foo\build\service.lst" holding patterns - of source files to include for the Foo.Service assembly: - - - - - Main build script located in "c:\foo\default.build": - - - - - - - - - - - - - - - - ]]> - - Nested build script located in "c:\foo\services\default.build" - which uses the patternset to feed sources files to the C# compiler: - - - - - - - - - - - ]]> - - At the time when the patternset is used in the "service" - build script, the following source files in "c:\foo\services\src" - match the defined patterns: - - - - - You should have observed that: - - - - - although the patternset is used from the "service" - build script, the path to the external file is resolved relative - to the base directory of the "main" build script in - which the patternset is defined. - - - - - the "TraceListener.cs" file is included, even though - the "build.debug" property was changed to false - after the patternset was defined (but before it was passed to - the nested build, and used). - - - - - - - - - Initializes a new instance of the class. - - - - - Adds a nested set of patterns, or references other standalone - patternset. - - The to add. - - - - Defines a single pattern for files to include. - - - - - Loads multiple patterns of files to include from a given file, set - using the parameter. - - - - - Defines a single pattern for files to exclude. - - - - - Loads multiple patterns of files to exclude from a given file, set - using the parameter. - - - - - Contains HTTP proxy settings used to process requests to Internet - resources. - - - - - Initializes a new instance of the class. - - - - - Gets a instance representing the current - . - - - A instance representing the current - , or - if this proxy should not be used to connect to the external resource. - - - - - The name of the proxy host. - - - - - The port number on to use. - - - - - Specifies whether to bypass the proxy server for local addresses. - The default is . - - - - - The credentials to submit to the proxy server for authentication. - - - - - Indicates if the proxy should be used to connect to the external - resource. If then the proxy will be used; - otherwise, not. The default is . - - - - - Indicates if the proxy should not be used to connect to the external - resource. If then the proxy will be used; - otherwise, not. The default is . - - - - - Represents an element of which the XML is processed by its parent task - or type. - - - - - Gets the XML that this element represents. - - - - - Gets a value indicating whether the element is performing additional - processing using the that was use to - initialize the element. - - - , as the XML that represents this build - element is processed by the containing task or type. - - - - - ReplaceTokens filter token. - - - - - Token to be replaced. - - - - - New value of token. - - - - - Indicates if the token should be used to replace values. - If then the token will be used; - otherwise, not. The default is . - - - - - Indicates if the token should not be used to replace values. - If then the token will be used; - otherwise, not. The default is . - - - - - Represents an XML namespace. - - - - - The prefix to associate with the namespace. - - - - - The associated XML namespace URI. - - - - - Indicates if the namespace should be added to the . - If then the namespace will be added; - otherwise, skipped. The default is . - - - - - Indicates if the namespace should not be added to the . - list. If then the parameter will be - added; otherwise, skipped. The default is . - - - - - Contains a collection of elements. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Determines whether a with the specified - value is in the collection. - - The argument value to locate in the collection. - - if a with - value is found in the collection; otherwise, - . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - 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. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Gets the with the specified prefix. - - The prefix of the to get. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Represents an XSLT extension object. The object should have a default - parameterless constructor and the return value should be one of the - four basic XPath data types of number, string, Boolean or node set. - - - - - Initializes a new instance of the - class. - - - - - The namespace URI to associate with the extension object. - - - The namespace URI to associate with the extension object, or - if not set. - - - - - The full type name of the XSLT extension object. - - - - - The assembly which contains the XSLT extension object. - - - - - Indicates if the extension object should be added to the XSLT argument - list. If then the extension object will be - added; otherwise, skipped. The default is . - - - - - Indicates if the extension object should not be added to the XSLT argument - list. If then the extension object will be - added; otherwise, skipped. The default is . - - - - - Contains a collection of elements. - - - - - Initializes a new instance of the - class. - - - - - Initializes a new instance of the - class with the - specified instance. - - - - - Initializes a new instance of the - class with the - specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added - to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the - end of the collection. - - The array of - elements to be added to the end of the collection. - - - - Adds the elements of a - to the end of the collection. - - The - to be added to the end of the collection. - - - - Determines whether a is in the - collection. - - The to locate - in the collection. - - if is found in the - collection; otherwise, . - - - - - Determines whether a with the - specified value is in the collection. - - The argument value to locate in the - collection. - - if a - with value is found in the collection; - otherwise, . - - - - - Copies the entire collection to a compatible one-dimensional array, - starting at the specified index of the target array. - - 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. - - - - Retrieves the index of a specified - object in the collection. - - The object for - which the index is returned. - - The index of the specified . If the - is not currently a member of the - collection, it returns -1. - - - - - Inserts a into the collection at - the specified index. - - The zero-based index at which - should be inserted. - The to - insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire - collection. - - - - - Removes a member from the collection. - - The to remove - from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get - or set. - - - - Gets the with the specified name. - - The name of the - to get. - - - - Enumerates the elements of a - . - - - - - Initializes a new instance of the - class - with the specified . - - The collection that should be - enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Represents an XSLT parameter. - - - - - Initializes a new instance of the - class. - - - - - The name of the XSLT parameter. - - - The name of the XSLT parameter, or if - not set. - - - - - The namespace URI to associate with the parameter. - - - The namespace URI to associate with the parameter, or - if not set. - - - - - The value of the XSLT parameter. - - - The value of the XSLT parameter, or if - not set. - - - - - Indicates if the parameter should be added to the XSLT argument list. - If then the parameter will be added; - otherwise, skipped. The default is . - - - - - Indicates if the parameter should not be added to the XSLT argument - list. If then the parameter will be - added; otherwise, skipped. The default is . - - - - - Contains a collection of elements. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Determines whether a with the specified - value is in the collection. - - The argument value to locate in the collection. - - if a with - value is found in the collection; otherwise, - . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - 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. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Gets the with the specified name. - - The name of the to get. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Resolves assemblies by caching assemblies that were loaded. - - - - - Initializes an instanse of the - class. - - - - - Initializes an instanse of the - class in the context of the given . - - - - - Installs the assembly resolver by hooking up to the - event. - - - - - Uninstalls the assembly resolver. - - - - - Resolves an assembly not found by the system using the assembly - cache. - - The source of the event. - A that contains the event data. - - The loaded assembly, or if not found. - - - - - Occurs when an assembly is loaded. The loaded assembly is added - to the assembly cache. - - The source of the event. - An that contains the event data. - - - - Logs a message with the given priority. - - The message priority at which the specified message is to be logged. - The message to log, containing zero or more format items. - An array containing zero or more objects to format. - - The actual logging is delegated to the in which - the is executing - - - - - Holds the loaded assemblies. - - - - - Holds the in which the - is executing. - - - The in which the - is executing or if the - is not executing in the context of a . - - - - - Represents a valid command-line argument. - - - - - Sets the value of the argument on the specified object. - - The object on which the value of the argument should be set. - The argument is required and no value was specified. - - - The matching property is collection-based, but is not initialized - and cannot be written to. - - -or- - - The matching property is collection-based, but has no strongly-typed - Add method. - - -or- - - The matching property is collection-based, but the signature of the - Add method is not supported. - - - - - - Assigns the specified value to the argument. - - The value that should be assigned to the argument. - - Duplicate argument. - -or- - Invalid value. - - - - - Indicates whether the specified is a - . - - - if can be assigned - to ; otherwise, . - - - - - Indicates whether the specified is collection-based. - - - if can be assigned - to and is not backed by a - that can be assigned to ; - otherwise, . - - - - - Indicates whether the specified is an array. - - - if is an array; - otherwise, . - - - - - Gets the property that backs the argument. - - - The property that backs the arguments. - - - - - Gets the underlying of the argument. - - - The underlying of the argument. - - - If the of the argument is a collection type, - this property will returns the underlying type of that collection. - - - - - Gets the long name of the argument. - - The long name of the argument. - - - - Gets the short name of the argument. - - The short name of the argument. - - - - Gets the description of the argument. - - The description of the argument. - - - - Gets a value indicating whether the argument is required. - - - if the argument is required; otherwise, - . - - - - - Gets a value indicating whether a mathing command-line argument - was already found. - - - if a matching command-line argument was - already found; otherwise, . - - - - - Gets a value indicating whether the argument can be specified multiple - times. - - - if the argument may be specified multiple - times; otherwise, . - - - - - Gets a value indicating whether the argument can only be specified once - with a certain value. - - - if the argument should always have a unique - value; otherwise, . - - - - - Gets the of the property to which the argument - is applied. - - - The of the property to which the argument is - applied. - - - - - Gets a value indicating whether the argument is collection-based. - - - if the argument is backed by a - that can be assigned to and is not backed - by a that can be assigned to - ; otherwise, . - - - - - Gets a value indicating whether the argument is a set of name/value - pairs. - - - if the argument is backed by a - that can be assigned to ; otherwise, - . - - - - - Gets a value indicating whether the argument is array-based. - - - if the argument is backed by an array; - otherwise, . - - - - - Gets a value indicating whether the argument is the default argument. - - - if the argument is the default argument; - otherwise, . - - - - - Gets a value indicating whether the argument cannot be combined with - other arguments. - - - if the argument cannot be combined with other - arguments; otherwise, . - - - - - Allows control of command line parsing. - - - - - Initializes a new instance of the class - with the specified argument type. - - Specifies the checking to be done on the argument. - - - - Gets or sets the checking to be done on the argument. - - The checking that should be done on the argument. - - - - Gets or sets the long name of the argument. - - The long name of the argument. - - - - Gets or sets the short name of the argument. - - The short name of the argument. - - - - Gets or sets the description of the argument. - - The description of the argument. - - - - Contains a strongly typed collection of objects. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - 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. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Gets the with the specified name. - - The name of the to get. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - The exception that is thrown when one of the command-line arguments provided - is not valid. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a descriptive message. - - A descriptive message to include with the exception. - - - - Initializes a new instance of the class - with a descriptive message and an inner exception. - - A descriptive message to include with the exception. - A nested exception that is the cause of the current exception. - - - - Initializes a new instance of the class - with serialized data. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - - - - Used to control parsing of command-line arguments. - - - - - Indicates that this field is required. An error will be displayed - if it is not present when parsing arguments. - - - - - Only valid in conjunction with Multiple. - Duplicate values will result in an error. - - - - - Inidicates that the argument may be specified more than once. - Only valid if the argument is a collection - - - - - Inidicates that if this argument is specified, no other arguments may be specified. - - - - - The default type for non-collection arguments. - The argument is not required, but an error will be reported if it is specified more than once. - - - - - The default type for collection arguments. - The argument is permitted to occur multiple times, but duplicate - values will cause an error to be reported. - - - - - Commandline parser. - - - - - Initializes a new instance of the class - using possible arguments deducted from the specific . - - The from which the possible command-line arguments should be retrieved. - A value indicating whether or not a response file is able to be used. - is a null reference. - - - - Parses an argument list. - - The arguments to parse. - The destination object on which properties will be set corresponding to the specified arguments. - is a null reference. - The of does not match the argument specification that was used to initialize the parser. - - - - Splits a string and removes any empty strings from the - result. Same functionality as the - public string[] Split(char[] separator, StringSplitOptions options) - method in .Net 2.0. Replace with that call when 2.0 is standard. - - - - the array of strings - - - - Read a response file and parse the arguments as usual. - - The response file to load arguments - - - - Parse the argument list using the - - - - - - Returns the that's applied - on the specified property. - - The property of which applied should be returned. - - The that's applied to the - , or a null reference if none was applied. - - - - - Gets a logo banner using version and copyright attributes defined on the - or the - . - - - A logo banner. - - - - - Gets the usage instructions. - - The usage instructions. - - - - Gets a value indicating whether no arguments were specified on the - command line. - - - - - Marks a command-line option as being the default option. When the name of - a command-line argument is not specified, this option will be assumed. - - - - - Initializes a new instance of the class - with the specified argument type. - - Specifies the checking to be done on the argument. - - - - Provides modified version for Copy and Move from the File class that - allow for filter chain processing. - - - - - Copies a file filtering its content through the filter chain. - - The file to copy - The file to copy to - Chain of filters to apply when copying, or is no filters should be applied. - The encoding used to read the soure file. - The encoding used to write the destination file. - - - - Moves a file filtering its content through the filter chain. - - The file to move - The file to move move to - Chain of filters to apply when moving, or is no filters should be applied. - The encoding used to read the soure file. - The encoding used to write the destination file. - - - - Returns a uniquely named empty temporary directory on disk. - - - A representing the temporary directory. - - - - - Combines two path strings. - - The first path. - The second path. - - A string containing the combined paths. If one of the specified - paths is a zero-length string, this method returns the other path. - If contains an absolute path, this method - returns . - - - - On *nix, processing is delegated to . - - - On Windows, this method normalized the paths to avoid running into - the 260 character limit of a path and converts forward slashes in - both and to - the platform's directory separator character. - - - - - - Returns Absolute Path (Fix for 260 Char Limit of Path.GetFullPath(...)) - - The file or directory for which to obtain absolute path information. - Path Resolved - path is a zero-length string, contains only white space or contains one or more invalid characters as defined by . - is . - - - - Returns the home directory of the current user. - - - The home directory of the current user. - - - - - Helper class for determining whether assemblies are located in the - Global Assembly Cache. - - - - - Initializes a new instance of the class in - the context of the given . - - - - - Determines whether an assembly is installed in the Global - Assembly Cache given its file name or path. - - The name or path of the file that contains the manifest of the assembly. - - if is - installed in the Global Assembly Cache; otherwise, - . - - - - To determine whether the specified assembly is installed in the - Global Assembly Cache, the assembly is loaded into a separate - . - - - If the family of the current runtime framework does not match the - family of the current target framework, this method will return - for all assemblies as there's no way to - determine whether a given assembly is in the Global Assembly Cache - for another framework family than the family of the current runtime - framework. - - - - - - Holds the in which assemblies will be loaded - to determine whether they are in the Global Assembly Cache. - - - - - Holds the context of the . - - - - - Holds a list of assembly files for which already has been determined - whether they are located in the Global Assembly Cache. - - - - The key of the is the full path to the - assembly file and the value is a indicating - whether the assembly is located in the Global Assembly Cache. - - - - - - Holds a value indicating whether the object has been disposed. - - - - - Gets the context of the . - - - The context of the . - - - - - Obtains a lifetime service object to control the lifetime policy for - this instance. - - - An object of type used to control the lifetime - policy for this instance. This is the current lifetime service object - for this instance if one exists; otherwise, a new lifetime service - object initialized with a lease that will never time out. - - - - - Determines whether an assembly is installed in the Global - Assembly Cache given its file name or path. - - The name or path of the file that contains the manifest of the assembly. - - if is - installed in the Global Assembly Cache; otherwise, - . - - - - - Provides a set of helper methods related to reflection. - - - - - Initializes a new instance of the class. - - - Uses a private access modifier to prevent instantiation of this class. - - - - - Loads the type specified in the type string with assembly qualified name. - - The assembly qualified name of the type to load. - Flag set to to throw an exception if the type cannot be loaded. - - is and - an error is encountered while loading the , or - is not an assembly qualified name. - - - If the cannot be instantiated from the assembly - qualified type name, then we'll try to instantiate the type using its - simple type name from an already loaded assembly with an assembly - name mathing the assembly in the assembly qualified type name. - - - The type loaded or if it could not be loaded. - - - - - Provides resource support to NAnt assemblies. This class cannot - be inherited from. - - - - - Prevents the class from being - instantiated explicitly. - - - - - Registers the assembly to be used as the fallback if resources - aren't found in the local satellite assembly. - - - A that represents the - assembly to register. - - - The following example shows how to register a shared satellite - assembly. - - - - - - - - Returns the value of the specified string resource. - - - A that contains the name of the - resource to get. - - - A that contains the value of the - resource localized for the current culture. - - - The returned resource is localized for the cultural settings of the - current . - - The GetString method is thread-safe. - - - - The following example demonstrates the GetString method using - the cultural settings of the current . - - - - - - - - Returns the value of the specified string resource localized for - the specified culture. - - - - - A that contains the value of the - resource localized for the specified culture. - - - - The GetString method is thread-safe. - - - - The following example demonstrates the GetString method using - a specific culture. - - - - - - - - Returns the value of the specified string resource localized for - the specified culture for the specified assembly. - - - A that contains the name of the - resource to get. - - - A that represents - the culture for which the resource is localized. - - - A - - - A that contains the value of the - resource localized for the specified culture. - - - - The GetString method is thread-safe. - - - - The following example demonstrates the GetString method using - specific culture and assembly. - - - - - - - - Registers the specified assembly. - - - A that represents the - assembly to register. - - - - - Determines the manifest resource name of the resource holding the - localized strings. - - The name of the assembly. - - The manifest resource name of the resource holding the localized - strings for the specified assembly. - - - The manifest resource name of the resource holding the localized - strings should match the name of the assembly, minus Tasks - suffix. - - - - - Groups a set of useful manipulation and validation - methods. - - - - - Initializes a new instance of the class. - - - Prevents instantiation of the class. - - - - - Determines whether the last character of the given - matches the specified character. - - The string. - The character. - - if the last character of - matches ; otherwise, . - - is . - - - - Indicates whether or not the specified is - or an string. - - The value to check. - - if is - or an empty string (""); otherwise, . - - - - - Converts an empty string ("") to . - - The value to convert. - - if is an empty - string ("") or ; otherwise, . - - - - - Converts to an empty string. - - The value to convert. - - An empty string if is ; - otherwise, . - - - - - Concatenates a specified separator between each - element of a specified , yielding a - single concatenated string. - - A . - A . - - A consisting of the elements of - interspersed with the separator string. - - - - For example if is ", " and the elements - of are "apple", "orange", "grape", and "pear", - returns "apple, orange, - grape, pear". - - - If is , an empty - string () is used instead. - - - - - - Creates a shallow copy of the specified . - - The that should be copied. - - A shallow copy of the specified . - - - - - Thrown whenever an error occurs during the build. - - - - - The location of the exception in the build document (xml file). - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a descriptive message. - - A descriptive message to include with the exception. - - - - Initializes a new instance of the class - with the specified descriptive message and inner exception. - - A descriptive message to include with the exception. - A nested exception that is the cause of the current exception. - - - - Initializes a new instance of the class - with a descriptive message and the location in the build file that - caused the exception. - - A descriptive message to include with the exception. - The location in the build file where the exception occured. - - - - Initializes a new instance of the class - with a descriptive message, the location in the build file and an - instance of the exception that is the cause of the current exception. - - A descriptive message to include with the exception. - The location in the build file where the exception occured. - A nested exception that is the cause of the current exception. - - - - Initializes a new instance of the class - with serialized data. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - - - - Serializes this object into the provided. - - The to populate with data. - The destination for this serialization. - - - - Creates and returns a string representation of the current - exception. - - - A string representation of the current exception. - - - - - Gets the raw message as specified when the exception was - constructed. - - - The raw message as specified when the exception was - constructed. - - - - - Gets the location in the build file of the element from which the - exception originated. - - - The location in the build file of the element from which the - exception originated. - - - - - Gets a message that describes the current exception. - - - The error message that explains the reason for the exception. - - - Adds location information to the message, if available. - - - - - Represents the set of command-line options supported by NAnt. - - - - - Gets or sets the target framework to use (overrides - NAnt.exe.config settings) - - - The framework that should be used. - - - For a list of possible frameworks, see NAnt.exe.config, possible - values include "net-1.0", "net-1.1", etc. - - - - - Gets or sets the target framework to use (overrides - NAnt.exe.config settings) - - - The framework that should be used. - - - For a list of possible frameworks, see NAnt.exe.config, possible - values include "net-1.0", "net-1.1", etc. - - - - - Gets or sets the buildfile that should be executed. - - - The buildfile that should be executed. - - - Can be both a file or an URI. - - - - - Gets or sets a value indicating whether more information should be - displayed during the build process. - - - if more information should be displayed; - otherwise, . The default is . - - - - - Gets or sets a value indicating whether debug information should be - displayed during the build process. - - - if debug information should be displayed; - otherwise, . The default is . - - - - - Gets or sets a value indicating whether only error and debug debug messages should be - displayed during the build process. - - - if only error or warning messages should be - displayed; otherwise, . The default is - . - - - - - Gets or sets a value indicating whether to produce emacs (and other - editor) friendly output. - - - if output is to be unadorned so that emacs - and other editors can parse files names, etc. The default is - . - - - - - Gets a value indicating whether parent directories should be searched - for a buildfile. - - - if parent directories should be searched for - a build file; otherwise, . The default is - . - - - - - Gets or sets the indentation level of the build output. - - - The indentation level of the build output. The default is 0. - - - - - Gets or sets the list of properties that should be set. - - - The list of properties that should be set. - - - - - Gets or sets the of logger to add to the list - of listeners. - - - The of logger to add to the list of - listeners. - - - The should derive from . - - - - - Gets or sets the name of the file to log output to. - - - The name of the file to log output to. - - - - - Gets a collection containing fully qualified type names of classes - implementating that should be added - to the project as listeners. - - - A collection of fully qualified type names that should be added as - listeners to the . - - - - - Gets a collection of assemblies to load extensions from. - - - A collection of assemblies to load extensions from. - - - - - Gets or sets a value indicating whether help - should be printed. - - - if help should be - printed; otherwise, . The default is - . - - - - - Gets or sets a value indicating whether the logo banner should be - printed. - - - if the logo banner should be printed; otherwise, - . The default is . - - - - - Gets or sets a value indicating whether the NAnt help should be - printed. - - - if NAnt help should be printed; otherwise, - . The default is . - - - - - Gets a collection containing the targets that should be executed. - - - A collection that contains the targets that should be executed. - - - - - Custom configuration section handler for the element. - - - - - This just passed things through. Return the node read from the config file. - - - - - Main entry point to NAnt that is called by the ConsoleStub. - - - - - Starts NAnt. This is the Main entry point. - - Command Line args, or whatever you want to pass it. They will treated as Command Line args. - - The exit code. - - - - - Prints the projecthelp to the console. - - The build file to show help for. - - is loaded and transformed with - ProjectHelp.xslt, which is an embedded resource. - - - - - Gets the file name for the build file in the specified directory. - - The directory to look for a build file. When in doubt use Environment.CurrentDirectory for directory. - Look for a build file with this pattern or name. If null look for a file that matches the default build pattern (*.build). - Whether or not to search the parent directories for a build file. - The path to the build file or null if no build file could be found. - - - - Loads the extension assemblies in the current - and scans them for extensions. - - The extension assemblies to load. - The which will be used to output messages to the build log. - - - - Dynamically constructs an instance of - the class specified. - - - - At this point, only looks in the assembly where - is defined. - - - The fully qualified name of the logger that should be instantiated. - Type could not be loaded. - does not implement . - - - - Dynamically constructs an instance of - the class specified. - - - - At this point, only looks in the assembly where - is defined. - - - The fully qualified name of the listener that should be instantiated. - Type could not be loaded. - does not implement . - - - - Add the listeners specified in the command line arguments, - along with the default listener, to the specified project. - - The command-line options. - The to add listeners to. - - - - Spits out generic help info to the console. - - - - - Write the message of the specified and - the inner exceptions to . - - The to write to . - - - - Creates a new instance of the - class for the specified class in the - specified. - - The containing the . - The class representing the . - - - - Gets the name of the class that can be - created using this . - - - The name of the class that can be created - using this . - - - - - Gets the name of the data type which the - can create. - - - The name of the data type which the - can create. - - - - - Contains a strongly typed collection of objects. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Determines whether a for the specified - task is in the collection. - - The name of task for which the should be located in the collection. - - if a for - the specified task is found in the collection; otherwise, - . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - 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. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Gets the for the specified task. - - The name of task for which the should be located in the collection. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified capacity. - - - - - Inherits Properties from an existing property - dictionary Instance - - DataType list to inherit - - - - Used for searching filesystem based on given include/exclude rules. - - - Simple client code for testing the class. - - while (true) { - DirectoryScanner scanner = new DirectoryScanner(); - - Console.Write("Scan Basedirectory : "); - string s = Console.ReadLine(); - if (s.Length == 0) break; - scanner.BaseDirectory = s; - - while(true) { - Console.Write("Include pattern : "); - s = Console.ReadLine(); - if (s.Length == 0) break; - scanner.Includes.Add(s); - } - - while(true) { - Console.Write("Exclude pattern : "); - s = Console.ReadLine(); - if (s.Length == 0) break; - scanner.Excludes.Add(s); - } - - foreach (string name in scanner.FileNames) - Console.WriteLine("file:" + name); - foreach (string name in scanner.DirectoryNames) - Console.WriteLine("dir :" + name); - - Console.WriteLine(""); - } - - - - - - Initializes a new instance of the . - - - On unix, patterns are matching case-sensitively; otherwise, they - are matched case-insensitively. - - - - - Initializes a new instance of the - specifying whether patterns are to be match case-sensitively. - - Specifies whether patterns are to be matched case-sensititely. - - - - Creates a shallow copy of the . - - - A shallow copy of the . - - - - - Uses and search criteria (relative to - or absolute), to search for filesystem objects. - - - - - Parses specified NAnt search patterns for search directories and - corresponding regex patterns. - - In. NAnt patterns. Absolute or relative paths. - Out. Regex patterns. Absolute canonical paths. - Out. Non-regex files. Absolute canonical paths. - In. Whether to allow a pattern to add search directories. - - - - Given a NAnt search pattern returns a search directory and an regex - search pattern. - - Whether this pattern is an include or exclude pattern - NAnt searh pattern (relative to the Basedirectory OR absolute, relative paths refering to parent directories ( ../ ) also supported) - Out. Absolute canonical path to the directory to be searched - Out. Whether the pattern is potentially recursive or not - Out. Whether this is a regex pattern or not - Out. Regex search pattern (absolute canonical path) - - - - Searches a directory recursively for files and directories matching - the search criteria. - - Directory in which to search (absolute canonical path) - Whether to scan recursively or not - - - - Converts search pattern to a regular expression pattern. - - Search pattern relative to the search directory. - Regular expresssion - - - - Gets or set a value indicating whether or not to use case-sensitive - pattern matching. - - - - - Gets the collection of include patterns. - - - - - Gets the collection of exclude patterns. - - - - - The base directory to scan. The default is the - current directory. - - - - - Gets the list of files that match the given patterns. - - - - - Gets the list of directories that match the given patterns. - - - - - Gets the list of directories that were scanned for files. - - - - - Creates a shallow copy of the . - - - A shallow copy of the . - - - - - Creates a string representing a list of the strings in the collection. - - - A string that represents the contents. - - - - - Initialize a new instance of the - class specifying whether or not string comparison should be - case-sensitive. - - Specifies whether or not string comparison should be case-sensitive. - - - - Creates a shallow copy of the . - - - A shallow copy of the . - - - - - Determines whether the specified string is in the - . - - The string to locate in the . The value can be . - - if value is found in the ; otherwise, . - - - String comparisons within the - are only case-sensitive if is - - - - - - Searches for the specified string and returns the zero-based index - of the first occurrence within the . - - The string to locate. The value can be . - - The zero-based index of the first occurrence of - in the , if found; otherwise, -1. - - - String comparisons within the - are only case-sensitive if is - . - - - - - Gets a value indicating whether string comparison is case-sensitive. - - - A value indicating whether string comparison is case-sensitive. - - - - - Gets the value of the specified property. - - The name of the property to get the value of. - - The value of the specified property. - - - - - Splits an input string into a sequence of tokens used during parsing. - - - - - Available tokens - - - - - Encalsulates information about installed frameworks incuding version - information and directory locations for finding tools. - - - - - Resolves the specified assembly to a full path by matching it - against the reference assemblies. - - The file name of the assembly to resolve (without path information). - - An absolute path to the assembly, or if the - assembly could not be found. - - - Whether the file name is matched case-sensitive depends on the - operating system. - - - - - Searches the list of tool paths of the current framework for the - given file, and returns the absolute path if found. - - The file name of the tool to search for. - - The absolute path to if found in one of the - configured tool paths; otherwise, . - - is . - - - The configured tool paths are scanned in the order in which they - are defined in the framework configuration. - - - The file name of the tool to search should include the extension. - - - - - - Gets the value of the specified attribute from the specified node. - - The node of which the attribute value should be retrieved. - The attribute of which the value should be returned. - - The value of the attribute with the specified name or - if the attribute does not exist or has no value. - - - - - Gets the name of the framework. - - - The name of the framework. - - - - - Gets the family of the framework. - - - The family of the framework. - - - - - Gets the description of the framework. - - - The description of the framework. - - - - - Gets the version of the framework. - - - The version of the framework. - - - - - Gets the Common Language Runtime version of the framework. - - - The Common Language Runtime version of the framework. - - - - - Gets the Visual Studio version that corresponds with this - framework. - - - The Visual Studio version that corresponds with this framework. - - There is no version of Visual Studio .NET that corresponds with this framework. - - - - Gets the base directory of the framework tools for the framework. - - - The base directory of the framework tools for the framework. - - - - - Gets the runtime information for this framework. - - - The runtime information for the framework or - if no runtime information is configured for the framework. - - - - - Gets the directory where the system assemblies for the framework - are located. - - - The directory where the system assemblies for the framework are - located. - - - - - Gets the directory containing the SDK tools for the framework. - - - The directory containing the SDK tools for the framework or a null - reference if the configured sdk directory does not exist, or is not - valid. - - - - - Gets the used to initialize this framework. - - - The used to initialize this framework. - - - - - Gets the set of assemblies and directories that should scanned for - NAnt tasks, types or functions. - - - The set of assemblies and directories that should be scanned for - NAnt tasks, types or functions. - - - - - Returns a value indicating whether the current framework is valid. - - - if the framework is installed and correctly - configured; otherwise, . - - - - - Gets the . - - - The . - - - The defines the current namespace - scope and provides methods for looking up namespace information. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified capacity. - - - - - Stores the file name, line number and column number to record a position - in a text file. - - - - - Creates a location consisting of a file name, line number and - column number. - - - can be a local URI resource, e.g., file:///C:/WINDOWS/setuplog.txt. - - - - - Creates a location consisting of a file name. - - - can be a local URI resource, e.g., file:///C:/WINDOWS/setuplog.txt. - - - - - Creates an "unknown" location. - - - - Private Init function. - - - - Returns the file name, line number and a trailing space. An error - message can be appended easily. For unknown locations, returns - an empty string. - - - - - Gets a string containing the file name for the location. - - - The file name includes both the file path and the extension. - - - - - Gets the line number for the location. - - - Lines start at 1. Will be zero if not specified. - - - - - Gets the column number for the location. - - - Columns start a 1. Will be zero if not specified. - - - - - Maps XML nodes to the text positions from their original source. - - - - - Initializes a new instance of the class. - - - - - Determines if a file has been loaded by the current project. - - The file to check. - - if the specified file has already been loaded - by the current project; otherwise, . - - - - - Adds an to the map. - - - An can only be added to the map once. - - - - - Returns the in the XML file for the given node. - - - The must be from an - that has been added to the map. - - - - - Represents a position in the build file. - - - - - Initializes a new instance of the - with the speified line and column. - - The line coordinate of the position. - The column coordinate of the position. - - - - The line coordinate of the position. - - - - - The column coordinate of the position. - - - - - Defines the set of levels recognised by the NAnt logging system. - - - - - Designates fine-grained informational events that are most useful - to debug a build process. - - - - - Designates events that offer a more detailed view of the build - process. - - - - - Designates informational events that are useful for getting a - high-level view of the build process. - - - - - Designates potentionally harmful events. - - - - - Designates error events. - - - - - Can be used to suppress all messages. - - - No events should be logged with this . - - - - - Class representing an event occurring during a build. - - - - An event is built by specifying either a project, a task or a target. - - - A level event will only have a - reference. - - - A level event will have and - references. - - - A level event will have , - and references. - - - - - - Initializes a new instance of the - class. - - - - - Initializes a new instance of the - class for a level event. - - The that emitted the event. - - - - Initializes a new instance of the - class for a level event. - - The that emitted the event. - - - - Initializes a new instance of the - class for a level event. - - The that emitted the event. - - - - Gets or sets the message associated with this event. - - - The message associated with this event. - - - - - Gets or sets the priority level associated with this event. - - - The priority level associated with this event. - - - - - Gets or sets the associated with this event. - - - The associated with this event. - - - - - Gets the that fired this event. - - - The that fired this event. - - - - - Gets the that fired this event. - - - The that fired this event, or a null reference - if this is a level event. - - - - - Gets the that fired this event. - - - The that fired this event, or - if this is a or level - event. - - - - - Represents the method that handles the build events. - - The source of the event. - A that contains the event data. - - - - Instances of classes that implement this interface can register to be - notified when things happen during a build. - - - - - Signals that a build has started. - - The source of the event. - A object that contains the event data. - - This event is fired before any targets have started. - - - - - Signals that the last target has finished. - - The source of the event. - A object that contains the event data. - - This event will still be fired if an error occurred during the build. - - - - - Signals that a target has started. - - The source of the event. - A object that contains the event data. - - - - Signals that a target has finished. - - The source of the event. - A object that contains the event data. - - This event will still be fired if an error occurred during the build. - - - - - Signals that a task has started. - - The source of the event. - A object that contains the event data. - - - - Signals that a task has finished. - - The source of the event. - A object that contains the event data. - - This event will still be fired if an error occurred during the build. - - - - - Signals that a message has been logged. - - The source of the event. - A object that contains the event data. - - - - Interface used by NAnt to log the build output. - - - Depending on the supplied command-line arguments, NAnt will set the - to or a - with a file as backend store. - - - - - Flushes buffered build events or messages to the underlying storage. - - - - - Gets or sets the highest level of message this logger should respond - to. - - The highest level of message this logger should respond to. - - Only messages with a message level higher than or equal to the given - level should actually be written to the log. - - - - - Gets or sets a value indicating whether to produce emacs (and other - editor) friendly output. - - - if output is to be unadorned so that emacs - and other editors can parse files names, etc. - - - - - Gets or sets the to which the logger is - to send its output. - - - - - Initializes a new instance of the - class. - - - - - Flushes buffered build events or messages to the underlying storage. - - - - - Signals that a build has started. - - The source of the event. - A object that contains the event data. - - This event is fired before any targets have started. - - - - - Signals that the last target has finished. - - The source of the event. - A object that contains the event data. - - This event will still be fired if an error occurred during the build. - - - - - Signals that a target has started. - - The source of the event. - A object that contains the event data. - - - - Signals that a task has finished. - - The source of the event. - A object that contains the event data. - - This event will still be fired if an error occurred during the build. - - - - - Signals that a task has started. - - The source of the event. - A object that contains the event data. - - - - Signals that a task has finished. - - The source of the event. - A object that contains the event data. - - This event will still be fired if an error occurred during the build. - - - - - Signals that a message has been logged. - - The source of the event. - A object that contains the event data. - - Only messages with a priority higher or equal to the threshold of - the logger will actually be output in the build log. - - - - - Empty implementation which allows derived classes to receive the - output that is generated in this logger. - - The message being logged. - - - - Outputs an indented message to the build log if its priority is - greather than or equal to the of the - logger. - - The priority of the message to output. - The message to output. - The number of characters that the message should be indented. - - - - Outputs an indented message to the build log if its priority is - greather than or equal to the of the - logger. - - The event to output. - - - - Outputs an indented message to the build log if its priority is - greather than or equal to the of the - logger. - - The event to output. - The number of characters that the message should be indented. - - - - Holds a stack of reports for all running builds. - - - - - Gets or sets the highest level of message this logger should respond - to. - - - The highest level of message this logger should respond to. - - - Only messages with a message level higher than or equal to the given - level should be written to the log. - - - - - Gets or sets a value indicating whether to produce emacs (and other - editor) friendly output. - - - if output is to be unadorned so that emacs - and other editors can parse files names, etc. The default is - . - - - - - Gets or sets the to which the logger is - to send its output. - - - The to which the logger sends its output. - - - - - Used to store information about a build, to allow better reporting to - the user. - - - - - Errors encountered so far. - - - - - Warnings encountered so far. - - - - - The start time of the build process. - - - - - Buffers log messages from DefaultLogger, and sends an e-mail with the - results. - - - The following properties are used to send the mail : - - - Property - Description - - - MailLogger.mailhost - Mail server to use. [default: localhost] - - - MailLogger.from - The address of the e-mail sender. - - - MailLogger.failure.notify - Send build failure e-mails ? [default: true] - - - MailLogger.success.notify - Send build success e-mails ? [default: true] - - - MailLogger.failure.to - The address to send build failure messages to. - - - MailLogger.success.to - The address to send build success messages to. - - - MailLogger.failure.subject - The subject of build failure messages. [default: "Build Failure"] - - - MailLogger.success.subject - The subject of build success messages. [default: "Build Success"] - - - MailLogger.success.attachments - The ID of a fileset holdng set of files to attach when the build is successful. - - - MailLogger.failure.attachments - The ID of a fileset holdng set of files to attach when the build fails. - - - MailLogger.body.encoding - The encoding type of the body of the e-mail message. [default: system's ANSI code page] - - - MailLogger.smtp.username - The name of the user to login to the SMTP server. - - - MailLogger.smtp.password - The password of the specified user. - - - MailLogger.smtp.enablessl - Specifies whether to use SSL to encrypt the connection. [default: false] - - - MailLogger.smtp.port - The SMTP server port to connect to. [default: 25] - - - - - - - Initializes a new instance of the - class. - - - - - Signals that a build has started. - - The source of the event. - A object that contains the event data. - - This event is fired before any targets have started. - - - - - Signals that the last target has finished, and send an e-mail with - the build results. - - The source of the event. - A object that contains the event data. - - - - Receives and buffers log messages. - - The message being logged. - - - - Gets the value of the specified property. - - Properties to obtain value from. - Suffix of property name. "MailLogger" will be prepended internally. - Value returned if property is not present in . - Value indicating whether the property should exist, or have a default value set. - - The value of the specified property; or the default value if the - property is not present in . - - is , and the specified property is not present and no default value has been given. - - - - Buffer in which the message is constructed prior to sending. - - - - - Holds the stack of currently executing projects. - - - - - Contains a strongly typed collection of - objects. - - - - - Initializes a new instance of the - class. - - - - - Initializes a new instance of the - class with the specified instance. - - - - - Initializes a new instance of the - class with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - 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. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Implements a for writing information to - the NAnt logging infrastructure. - - - - - Initializes a new instance of the class - for the specified with the specified output - level and format provider. - - Determines the indentation level. - The with which messages will be output to the build log. - An object that controls formatting. - - - - Writes a character array to the buffer. - - The character array to write to the text stream. - - - - Writes a string to the buffer. - - - - - - Writes an empty string to the logging infrastructure. - - - - - Writes a string to the logging infrastructure. - - The string to write. If is a null reference, only the line termination characters are written. - - - - Writes out a formatted string using the same semantics as - . - - The formatting string. - The object array to write into format string. - - - - Causes any buffered data to be written to the logging infrastructure. - - - - - Closes the current writer and releases any system resources - associated with the writer. - - - - - Obtains a lifetime service object to control the lifetime policy for - this instance. - - - An object of type used to control the lifetime - policy for this instance. This is the current lifetime service object - for this instance if one exists; otherwise, a new lifetime service - object initialized with a lease that will never time out. - - - - - Gets the in which the output is written. - - - The always writes output in UTF8 - encoding. - - - - - Gets the with which messages will be output to - the build log. - - - - - Used to search for files on the PATH. - - - - The local directory is not searched (since this would already be covered - by normal use of the includes element). - - - Also, advanced pattern matching isn't supported: you need to know the - exact name of the file. - - - - - - Creates a shallow copy of the . - - - A shallow copy of the . - - - - - Creates a shallow copy of the . - - - A shallow copy of the . - - - - - Adds a file to the list of files to be scanned for. - - The filename or search pattern to add to the list. - - - - Scans all direcetories in the PATH environment variable for files. - - - List of matching files found in the PATH. - - - - - Scans all directories in the given environment variable for files. - - The environment variable of which the directories should be scanned. - - List of matching files found in the directory of the given - environment variable. - - - - - Creates a shallow copy of the specified . - - The that should be copied. - - A shallow copy of the specified . - - - - - Central representation of a NAnt project. - - - - The method will initialize the project with the build - file specified in the constructor and execute the default target. - - - - - - - - If no target is given, the default target will be executed if specified - in the project. - - - - - - - - - Constant for the "visiting" state, used when traversing a DFS of - target dependencies. - - - - - Constant for the "visited" state, used when traversing a DFS of - target dependencies. - - - - - Holds the logger for this class. - - - - - Holds the default threshold for build loggers. - - - - - Initializes a new class with the given - document, message threshold and indentation level. - - Any valid build format will do. - The message threshold. - The project indentation level. - - - - Initializes a new class with the given - document, message threshold and indentation level, and using - the specified to load internal configuration - settings. - - Any valid build format will do. - The message threshold. - The project indentation level. - The NAnt should use to initialize configuration settings. - - This constructor is useful for developers using NAnt as a class - library. - - - - - Initializes a new class with the given - source, message threshold and indentation level. - - - The full path to the build file. - This can be of any form that accepts. - - The message threshold. - The project indentation level. - - If the source is a uri of form 'file:///path' then use the path part. - - - - - Initializes a new class with the given - source, message threshold and indentation level, and using - the specified to load internal configuration - settings. - - - The full path to the build file. - This can be of any form that accepts. - - The message threshold. - The project indentation level. - The NAnt should use to initialize configuration settings. - is . - - If the source is a uri of form 'file:///path' then use the path part. - - - - - Initializes a as subproject of the specified - . - - - The full path to the build file. - This can be of any form that accepts. - - The parent . - - Optimized for framework initialization projects, by skipping automatic - discovery of extension assemblies and framework configuration. - - - - - Initializes a with - set to , and - set to 0. - - An containing the build script. - - Optimized for framework initialization projects, by skipping automatic - discovery of extension assemblies and framework configuration. - - - - - Dispatches a event to the build listeners - for this . - - The source of the event. - A that contains the event data. - - - - Dispatches a event to the build listeners - for this . - - The source of the event. - A that contains the event data. - - - - Dispatches a event to the build listeners - for this . - - The source of the event. - A that contains the event data. - - - - Dispatches a event to the build listeners - for this . - - The source of the event. - A that contains the event data. - - - - Dispatches a event to the build listeners - for this . - - The source of the event. - A that contains the event data. - - - - Dispatches the event to the build listeners - for this . - - The source of the event. - A that contains the event data. - - - - Dispatches a event to the build listeners - for this . - - A that contains the event data. - - - - Writes a level message to the build log with - the given . - - The to log at. - The message to log. - - - - Writes a level formatted message to the build - log with the given . - - The to log at. - The message to log, containing zero or more format items. - An array containing zero or more objects to format. - - - - Writes a task level message to the build log - with the given . - - The from which the message originated. - The to log at. - The message to log. - - - - Writes a level message to the build log with - the given . - - The from which the message orignated. - The level to log at. - The message to log. - - - - Executes the default target. - - - No top level error handling is done. Any - will be passed onto the caller. - - - - - Executes a specific target, and its dependencies. - - The name of the target to execute. - - Global tasks are not executed. - - - - - Executes a specific target. - - The name of the target to execute. - Whether dependencies should be forced to execute - - Global tasks are not executed. - - - - - Executes the default target and wraps in error handling and time - stamping. - - - if the build was successful; otherwise, - . - - - - - Creates a new from the given . - - The definition. - The new instance. - - - - Creates a new from the given - within a . - - The definition. - The owner . - The new instance. - - - - Expands a from known properties. - - The with replacement tokens. - The location in the build file. Used to throw more accurate exceptions. - The expanded and replaced . - - - - Combines the specified path with the of - the to form a full path to file or directory. - - The relative or absolute path. - - A rooted path, or the of the - if the parameter is a null reference. - - - - - Creates the default and attaches it to - the . - - - - - Increases the of the . - - - - - Decreases the of the . - - - - - Detaches the currently attached instances - from the . - - - - - Attaches the specified build listeners to the . - - The instances to attach to the . - - The currently attached instances will - be detached before the new instances - are attached. - - - - - Inits stuff: - TypeFactory: Calls Initialize and AddProject - Log.IndentSize set to 12 - Project properties are initialized ("nant.* stuff set") - - NAnt Props: - nant.filename - nant.version - nant.location - nant.project.name - nant.project.buildfile (if doc has baseuri) - nant.project.basedir - nant.project.default = defaultTarget - - - An representing the project definition. - The project message threshold. - The project indentation level. - Optimization flags. - is . - - - - This method is only meant to be used by the - class and . - - - - - Creates a new based on the project - definition. - - - The full path to the build file. - This can be of any form that accepts. - - - An based on the specified project - definition. - - - - - Configures the platform properties for the current platform. - - NAnt does not support the current platform. - - - - Updates dependent properties when the - is set. - - - - - Topologically sorts a set of targets. - - The name of the root target. The sort is created in such a way that the sequence of targets up to the root target is the minimum possible such sequence. Must not be . - A collection of instances. - - A collection of instances in sorted order. - - There is a cyclic dependecy among the targets, or a named target does not exist. - - - - - Performs a single step in a recursive depth-first-search traversal - of the target dependency tree. - - - The current target is first set to the "visiting" state, and pushed - onto the "visiting" stack. - - - An exception is then thrown if any child of the current node is in - the visiting state, as that implies a circular dependency. The - exception contains details of the cycle, using elements of the - "visiting" stack. - - - If any child has not already been "visited", this method is called - recursively on it. - - - The current target is then added to the ordered list of targets. - Note that this is performed after the children have been visited in - order to get the correct order. The current target is set to the - "visited" state. - - - By the time this method returns, the ordered list contains the - sequence of targets up to and including the current target. - - - The current target to inspect. Must not be . - A collection of instances. - A mapping from targets to states The states in question are "VISITING" and "VISITED". Must not be . - A stack of targets which are currently being visited. Must not be . - The list to add target names to. This will end up containing the complete list of depenencies in dependency order. Must not be . - - A non-existent target is specified - -or- - A circular dependency is detected. - - - - - Builds an appropriate exception detailing a specified circular - dependency. - - The dependency to stop at. Must not be . - A stack of dependencies. Must not be . - - A detailing the specified circular - dependency. - - - - - Gets or sets the indendation level of the build output. - - - The indentation level of the build output. - - - To change the , the - and methods should be used. - - - - - Gets or sets the indentation size of the build output. - - - The indendation size of the build output. - - - - - Gets or sets the default threshold level for build loggers. - - - The default threshold level for build loggers. - - - - - Gets the name of the . - - - The name of the or an empty - if no name is specified. - - - - - Gets or sets the base directory used for relative references. - - - The base directory used for relative references. - - The directory is not rooted. - - - The gets and sets the built-in property - named "nant.project.basedir". - - - - - - Gets the . - - - The . - - - The defines the current namespace - scope and provides methods for looking up namespace information. - - - - - Gets the form of the current project definition. - - - The form of the current project definition. - - - - - Gets a collection of available .NET frameworks. - - - A collection of available .NET frameworks. - - - - - Gets the framework in which NAnt is currently running. - - - The framework in which NAnt is currently running. - - - - - Gets or sets the framework to use for compilation. - - - The framework to use for compilation. - - - We will use compiler tools and system assemblies for this framework - in framework-related tasks. - - - - - Gets the name of the platform on which NAnt is currently running. - - - The name of the platform on which NAnt is currently running. - - - - Possible values are: - - - - win32 - - - unix - - - - NAnt does not support the current platform. - - - - Gets the current target. - - - The current target, or if no target is - executing. - - - - - Gets the path to the build file. - - - The path to the build file, or if the build - document is not file backed. - - - - - Gets the active definition. - - - The active definition. - - - - - Gets the NAnt should use to initialize - configuration settings. - - - The NAnt should use to initialize - configuration settings. - - - - - Gets the name of the target that will be executed when no other - build targets are specified. - - - The name of the target that will be executed when no other - build targets are specified, or if no - default target is specified in the build file. - - - - - Gets a value indicating whether tasks should output more build log - messages. - - - if tasks should output more build log message; - otherwise, . - - - - - The list of targets to build. - - - Targets are built in the order they appear in the collection. If - the collection is empty the default target will be built. - - - - - Gets the properties defined in this project. - - The properties defined in this project. - - - This is the collection of properties that are defined by the system - and property task statements. - - - These properties can be used in expansion. - - - - - - Gets the framework-neutral properties defined in the NAnt - configuration file. - - - The framework-neutral properties defined in the NAnt configuration - file. - - - - This is the collection of read-only properties that are defined in - the NAnt configuration file. - - - These properties can only be used for expansion in framework-specific - and framework-neutral configuration settings. These properties are - not available for expansion in the build file. - - - - - - Gets the instances defined in this project. - - - The instances defined in this project. - - - - This is the collection of instances that - are defined by (eg fileset) declarations. - - - - - - Gets the targets defined in this project. - - - The targets defined in this project. - - - - - Gets the build listeners for this project. - - - The build listeners for this project. - - - - - Allow the project construction to be optimized. - - - Use this with care! - - - - - Do not perform any optimizations. - - - - - The project base directory must not be automatically scanned - for extension assemblies. - - - - - Do not scan the project configuration for frameworks, and - do not configure the runtime and target framework. - - - - - Holds a value indicating whether a scan for tasks, types and functions - has already been performed for the current runtime framework. - - - - - Initializes a new instance of the - class for the given . - - The that should be configured. - - - - Loads and processes settings from the specified - of the configuration file. - - - - - Processes the framework nodes of the given platform node. - - An representing the platform on which NAnt is running. - - - - Reads the list of global properties specified in the NAnt configuration - file. - - An representing global properties. - - - - Gets the value of the specified attribute from the specified node. - - The node of which the attribute value should be retrieved. - The attribute of which the value should be returned. - - The value of the attribute with the specified name or - if the attribute does not exist or has no value. - - - - - Gets the underlying instance. - - - The underlying instance. - - - - - Gets the . - - - The . - - - The defines the current namespace - scope and provides methods for looking up namespace information. - - - - - Constant for the "visiting" state, used when traversing a DFS of - property references. - - - - - Constant for the "visited" state, used when travesing a DFS of - property references. - - - - - Initializes a new instance of the - class holding properties for the given - instance. - - The project for which the dictionary will hold properties. - - - - Performs additional custom processes before inserting a new element - into the instance. - - The key of the element to insert. - The value of the element to insert. - - - - Performs additional custom processes before removing an element - from the instance. - - The key of the element to remove. - The value of the element to remove. - - - - Performs additional custom processes when validating the element - with the specified key and value. - - The key of the element to validate. - The value of the element to validate. - - - - Adds a property that cannot be changed. - - The name of the property. - The value to assign to the property. - - Properties added with this method can never be changed. Note that - they are removed if the method is called. - - - - - Marks a property as a property of which the value is expanded at - execution time. - - The name of the property to mark as dynamic. - - - - Adds a property to the collection. - - The name of the property. - The value to assign to the property. - - - - Determines whether the specified property is listed as read-only. - - The name of the property to check. - - if the property is listed as read-only; - otherwise, . - - - - - Determines whether the specified property is listed as dynamic. - - The name of the property to check. - - if the property is listed as dynamic; - otherwise, . - - - - - Inherits properties from an existing property dictionary Instance. - - Property list to inherit. - The list of properties to exclude during inheritance. - - - - Expands a from known properties. - - The replacement tokens. - The to pass through for any exceptions. - The expanded and replaced string. - - - - Determines whether a property already exists. - - The name of the property to check. - - if the specified property already exists; - otherwise, . - - - - - Removes the property with the specified name. - - The name of the property to remove. - - - - Expands a from known properties. - - The replacement tokens. - The to pass through for any exceptions. - A mapping from properties to states. The states in question are "VISITING" and "VISITED". Must not be . - A stack of properties which are currently being visited. Must not be . - The expanded and replaced string. - - - - Evaluates the given expression string and returns the result - - - - - - - - - - Checks whether the specified property is deprecated. - - The property to check. - - - - Builds an appropriate exception detailing a specified circular - reference. - - The property reference to stop at. Must not be . - A stack of property references. Must not be . - - A detailing the specified circular - dependency. - - - - - Maintains a list of the property names that are readonly. - - - - - Maintains a list of the property names of which the value is expanded - on usage, not at initalization. - - - - - The project for which the dictionary holds properties. - - - - - Indexer property. - - - - - Gets the project for which the dictionary holds properties. - - - The project for which the dictionary holds properties. - - - - - Initializes a new instance of the class. - - - - - Creates a shallow copy of the . - - - A shallow copy of the . - - - - - Creates a shallow copy of the . - - - A shallow copy of the . - - - - - Executes dependent targets first, then the target. - - - - - This indicates whether the target has already executed. - - - - - The name of the target. - - - - Hides to have - return the name of target, not the name of XML element - which - would always be target. - - - Note: Properties are not allowed in the name. - - - - - - If then the target will be executed; - otherwise, skipped. The default is . - - - - - Gets a value indicating whether the target should be executed. - - - if the target should be executed; otherwise, - . - - - - - Opposite of . If - then the target will be executed; otherwise, skipped. The default - is . - - - - - Gets a value indicating whether the target should NOT be executed. - - - if the target should NOT be executed; - otherwise, . - - - - - The description of the target. - - - - - Space separated list of targets that this target depends on. - - - - - A collection of target names that must be executed before this - target. - - - - - Finds a target by name. - - The name of the target to find. - - The with the specified name, or - if no exists with - the given name. - - - - - Gets the names of the targets in the - combined into one list separated by the given . - - - A that contains a list of the names of the - targets in the , separated by - the specified . - - - - - Gets the names of the targets in the - combined into one comma-separated list. - - - A that contains a comma-separated list of the - names of the targets in the . - - - - - Creates a new instance of the class - for the specified class in the specified - . - - The containing the . - The class representing the . - - - - Gets the name of the class that can be created - using this . - - - The name of the class that can be created using - this . - - - - - Gets the name of the task which the - can create. - - - The name of the task which the can - create. - - - - - Contains a strongly typed collection of objects. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Determines whether a for the specified - task is in the collection. - - The name of task for which the should be located in the collection. - - if a for the - specified task is found in the collection; otherwise, . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - 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. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Gets the for the specified task. - - The name of task for which the should be located in the collection. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Comprises all of the loaded, and available, tasks. - Use these static methods to register, initialize and create a task. - - - - - Scans the given assembly for tasks, types, functions and filters. - - The assembly to scan for tasks, types, functions and filters. - The which will be used to output messages to the build log. - - - - Scans the given assembly for tasks, types, functions and filters. - - The assembly to scan for tasks, types, functions and filters. - The which will be used to output messages to the build log. - - if contains at - least one "extension"; otherwise, . - - - - - Scans the path for any task assemblies and adds them. - - The directory to scan in. - The which will be used to output messages to the build log. - indicating whether scanning of the directory should halt on first error. - - - - Adds any task assemblies in the project base directory - and its tasks subdirectory. - - The project to work from. - - - - Registers the project with , and optionally - scan the for extension assemblies. - - The project to work from. - Specified whether to scan the for extension assemblies. - - - - Looks up a function by name. - - The name of the function to lookup, including namespace prefix. - The in which the function is invoked. - - A representing the function, or - if a function with the given name does not - exist. - - - - - Creates a new instance for the given XML and - . - - The XML to initialize the task with. - The that the belongs to. - - The new instance. - - - - - Scans a given for tasks. - - The containing the to scan. - The to scan. - The which will be used to output messages to the build log. - - if represents a - ; otherwise, . - - - - - Scans a given for data type. - - The containing the to scan. - The to scan. - The which will be used to output messages to the build log. - - if represents a - data type; otherwise, . - - - - - Scans a given for functions. - - The to scan. - The which will be used to output messages to the build log. - - if represents a - valid set of funtions; otherwise, . - - - - - Scans a given for filters. - - The containing the to scan. - The to scan. - The which will be used to output messages to the build log. - - if represents a - ; otherwise, . - - - - - Gets the list of loaded instances. - - - List of loaded instances. - - - - - Gets the list of loaded instances. - - - List of loaded instances. - - - - - Gets the list of loaded instances. - - - List of loaded instances. - - - - - Initializes a new instance of the - class. - - - - - Initializes a new instance of the - class with a descriptive message. - - A descriptive message to include with the exception. - - - - Initializes a new instance of the - class with the specified descriptive message and inner exception. - - A descriptive message to include with the exception. - A nested exception that is the cause of the current exception. - - - - Initializes a new instance of the - class with a descriptive message and the location in the build file - that caused the exception. - - A descriptive message to include with the exception. - The location in the build file where the exception occured. - - - - Initializes a new instance of the - class with a descriptive message, the location in the build file and - an instance of the exception that is the cause of the current - exception. - - A descriptive message to include with the exception. - The location in the build file where the exception occured. - A nested exception that is the cause of the current exception. - - - - Initializes a new instance of the - class with serialized data. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - - - - Used to wrap log messages in xml <message/> elements. - - - - - Holds the stack of currently executing projects. - - - - - 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. - - - - Populates with the data needed to serialize - the instance. - - The to populate with data. - The destination for this serialization. - - - - Returns the contents of log captured. - - - - - Signals that a build has started. - - The source of the event. - A object that contains the event data. - - This event is fired before any targets have started. - - - - - Signals that the last target has finished. - - The source of the event. - A object that contains the event data. - - This event will still be fired if an error occurred during the build. - - - - - Signals that a target has started. - - The source of the event. - A object that contains the event data. - - - - Signals that a target has finished. - - The source of the event. - A object that contains the event data. - - This event will still be fired if an error occurred during the build. - - - - - Signals that a task has started. - - The source of the event. - A object that contains the event data. - - - - Signals that a task has finished. - - The source of the event. - A object that contains the event data. - - This event will still be fired if an error occurred during the build. - - - - - Signals that a message has been logged. - - The source of the event. - A object that contains the event data. - - Only messages with a priority higher or equal to the threshold of - the logger will actually be output in the build log. - - - - - Flushes buffered build events or messages to the underlying storage. - - - - - Gets or sets the highest level of message this logger should respond - to. - - - The highest level of message this logger should respond to. - - - Only messages with a message level higher than or equal to the given - level should be written to the log. - - - - - Gets or sets a value indicating whether to produce emacs (and other - editor) friendly output. - - - as it has no meaning in XML format. - - - - - Gets or sets the to which the logger is - to send its output. - - -
            -
            diff --git a/bin/Nant/NAnt.DotNetTasks.dll b/bin/Nant/NAnt.DotNetTasks.dll deleted file mode 100644 index dd7887b23..000000000 Binary files a/bin/Nant/NAnt.DotNetTasks.dll and /dev/null differ diff --git a/bin/Nant/NAnt.DotNetTasks.xml b/bin/Nant/NAnt.DotNetTasks.xml deleted file mode 100644 index 3b2994691..000000000 --- a/bin/Nant/NAnt.DotNetTasks.xml +++ /dev/null @@ -1,5318 +0,0 @@ - - - - NAnt.DotNetTasks - - - - - Generates an AssemblyInfo file using the attributes given. - - - - Create a C# AssemblyInfo file containing the specified assembly-level - attributes. - - - - - - - - - - - - - - - - - - - - - - - ]]> - - - - - Create a C# AssemblyInfo file containing an attribute with multiple - named properties by setting the - attribute on the element to - . - - - - - - - - - - - - - - ]]> - - - - - - Generates an AssemblyInfo file. - - - - - Determines whether the specified AssemblyInfo file in the given - needs to be persisted. - - holding the newly generated AssemblyInfo source. - - if the generated AssemblyInfo source needs - to be persisted; otherwise, . - - - - - Name of the AssemblyInfo file to generate. - - - The name of the AssemblyInfo file to generate. - - - - - The code language in which the AssemblyInfo file should be - generated. - - - - - The assembly-level attributes to generate. - - - The assembly-level attributes to generate. - - - - - The namespaces to import. - - - The namespaces to import. - - - - - Assembly files used to locate the types of the specified attributes. - - - - - Defines the supported code languages for generating an AssemblyInfo - file. - - - - - A value for generating C# code. - - - - - A value for generating JScript code. - - - - - A value for generating Visual Basic code. - - - - - Encapsulates functionality to generate a code file with imports - and assembly-level attributes. - - - - - Initializes a new instance of the - for the specified . - - The for which an instance of the class should be initialized. - The for which an instance of the class should be initialized. - - - - Generates code for the specified imports. - - The imports for which code should be generated. - The to which the generated code will be written. - - - - Generates code for the specified assembly attributes. - - The assembly attributes for which code should be generated. - Imports used to resolve the assembly attribute names to fully qualified type names. - Assembly that will be used to resolve the attribute names to instances. - The to which the generated code will be written. - - - - Gets the in which the AssemblyInfo - code will be generated. - - - - - Gets the that will be used to - generate the AssemblyInfo code. - - - - - Responsible for returning the specified value converted to a - accepted by a constructor for a given - . - - - - - Obtains a lifetime service object to control the lifetime policy for - this instance. - - - An object of type used to control the lifetime - policy for this instance. This is the current lifetime service object - for this instance if one exists; otherwise, a new lifetime service - object initialized with a lease that will never time out. - - - - - Retrieves the specified corresponding with the specified - type name from a list of assemblies. - - The collection of assemblies that the type should tried to be instantiated from. - The list of imports that can be used to resolve the typename to a full typename. - The typename that should be used to determine the type to which the specified value should be converted. - The value that should be converted to a typed value. - - - is and the identified by has no default public constructor. - -or- - cannot be converted to a value that's suitable for one of the constructors of the identified by . - -or- - The identified by has no suitable constructor. - -or- - A identified by could not be located or loaded. - - - - - Wraps al.exe, the assembly linker for the .NET Framework. - - - - All specified sources will be embedded using the /embed flag. - Other source types are not supported. - - - - - Create a library containing all icon files in the current directory. - - - - - - - - ]]> - - - - - Create an executable assembly manifest from modules. - - - - - - - - - ]]> - - - - - - Generates an assembly manifest. - - - - - Determines whether the assembly manifest needs compiling or is - uptodate. - - - if the assembly manifest needs compiling; - otherwise, . - - - - - Specifies an algorithm (in hexadecimal) to hash all files in a - multifile assembly except the file that contains the assembly - manifest. The default algorithm is CALG_SHA1. - - - - - Specifies a string for the Company field in the assembly. - - - A string for the Company field in the assembly. - - - If is an empty string (""), the Win32 - Company resource appears as a single space. - - - - - Specifies a string for the Configuration field in the assembly. - - - A string for the Configuration field in the assembly. - - - If is an empty string (""), the Win32 - Configuration resource appears as a single space. - - - - - Specifies a string for the Copyright field in the assembly. - - - A string for the Copyright field in the assembly. - - - If is an empty string (""), the Win32 - Copyright resource appears as a single space. - - - - - The culture string associated with the output assembly. - The string must be in RFC 1766 format, such as "en-US". - - - - Corresponds with the /c[ulture]: flag. - - - - - - Specifies whether the assembly should be partially signed. The default - is . - - - - - Specifies a string for the Description field in the assembly. - - - A string for the Description field in the assembly. - - - If is an empty string (""), the Win32 - Description resource appears as a single space. - - - - - Security evidence file to embed. - - - The security evidence file to embed. - - - - Corresponds with the /e[vidence] flag. - - - - - - Specifies a string for the File Version field in the assembly. - - - A string for the File Version field in the assembly. - - - - - Specifies a value (in hexadecimal) for the Flags field in - the assembly. - - - A value (in hexadecimal) for the Flags field in the assembly. - - - - - Specifies a container that holds a key pair. - - - - - Specifies a file (filename) that contains a key pair or - just a public key to sign an assembly. - - - The complete path to the key file. - - - - Corresponds with the /keyf[ile]: flag. - - - - - - Specifies the fully-qualified name (class.method) of the method to - use as an entry point when converting a module to an executable file. - - - The fully-qualified name (class.method) of the method to use as an - entry point when converting a module to an executable file. - - - - - One or more modules to be compiled into an assembly. - - - - - The name of the output file for the assembly manifest. - - - The complete output path for the assembly manifest. - - - - Corresponds with the /out flag. - - - - - - The target type (one of lib, exe, or winexe). - - - - Corresponds with the /t[arget]: flag. - - - - - - Specifies a string for the Product field in the assembly. - - - A string for the Product field in the assembly. - - - - - Specifies a string for the Product Version field in the assembly. - - - A string for the Product Version field in the assembly. - - - - - The set of resources to embed. - - - - - The set of compiled resources to embed. - - - Do not yet expose this to build authors. - - - - - Indicates whether the assembly linker for a given target framework - supports the "template" option, which takes an assembly from which - to get all options except the culture field. - The default is . - - - TODO: remove this once Mono bug #74814 is fixed. - - - - - Specifies an assembly from which to get all options except the - culture field. - - - The complete path to the assembly template. - - - - Corresponds with the /template: flag. - - - - - - Specifies a string for the Title field in the assembly. - - - A string for the Title field in the assembly. - - - - - Specifies a string for the Trademark field in the assembly. - - - A string for the Trademark field in the assembly. - - - - - Specifies version information for the assembly. The format of the - version string is major.minor.build.revision. - - - - - Icon to associate with the assembly. - - - - - Inserts a Win32 resource (.res file) in the output file. - - - - - Gets the command-line arguments for the external program. - - - The command-line arguments for the external program or - if the task is not being executed. - - - - - Provides the abstract base class for compiler tasks. - - - - - Contains a list of extensions for all file types that should be treated as - 'code-behind' when looking for resources. Ultimately this will determine - if we use the "namespace+filename" or "namespace+classname" algorithm, since - code-behind will use the "namespace+classname" algorithm. - - - - - Case-insensitive list of valid culture names for this platform. - - - The key of the is the culture name and - the value is . - - - - - Class constructor for . - - - - - Compiles the sources and resources. - - - - - Determines the manifest resource name of the given resource file. - - The containing information that will used to assemble the manifest resource name. - The resource file of which the manifest resource name should be determined. - The logical location of the resource file. - The source file on which the resource file depends. - - The manifest resource name of the specified resource file. - - - - - Determines the manifest resource name of the given resource file. - - The containing information that will used to assemble the manifest resource name. - The resource file of which the manifest resource name should be determined. - - The manifest resource name of the specified resource file. - - - For .resx resources, the name of the dependent is determined by - replacing the extension of the file with the extension of the - source files for the compiler, and removing the culture name from - the file name for localized resources. - - - - - Extracts the associated namespace/classname linkage found in the - given stream. - - The read-only stream of the source file to search. - - The namespace/classname of the source file matching the resource. - - - - - Writes package references to the specified . - - The to which the package references should be written. - - - - Writes list of warnings to (not) treat as errors to the specified - . - - The to which the list of warnings should be written. - - - - Writes list of warnings to suppress to the specified - . - - The to which the list of warnings to suppress should be written. - - - - Writes conditional compilation constants to the specified - . - - The to which the conditional compilation constants should be written. - - - - Writes module references to the specified . - - The to which the module references should be written. - - - - Allows derived classes to provide compiler-specific options. - - The to which the compiler options should be written. - - - - Writes an option using the default output format. - - The to which the compiler options should be written. - The name of the option which should be passed to the compiler. - - - - Writes an option and its value using the default output format. - - The to which the compiler options should be written. - The name of the option which should be passed to the compiler. - The value of the option which should be passed to the compiler. - - The combination of and - (separated by a colon) is quoted - unless is already surrounded by quotes. - - - - - Determines whether compilation is needed. - - - - - Finds the correct namespace/classname for a resource file from the - given dependent source file. - - The file from which the resource linkage of the resource file should be determined. - The culture of the resource file for which the resource linkage should be determined. - - The namespace/classname of the source file matching the resource or - if the dependent source file does not exist. - - - This behaviour may be overidden by each particular compiler to - support the namespace/classname syntax for that language. - - - - - Link a list of files into a resource assembly. - - The collection of resources. - Resource assembly to generate - Culture of the generated assembly. - - - - Compiles a set of resx files to a .resources files. - - The set of resx files to compile. - - - - Determines the culture associated with a given resource file by - scanning the filename for valid culture names. - - The resource file path to check for culture info. - The file on which the resource file depends. - - A valid instance if the resource is - associated with a specific culture; otherwise, . - - - - - Generate debug output. The default is . - - - Only used for <jsc> tasks, but retained for backward - compatibility (Clover.NET). - - - - - The output file created by the compiler. - - - - - Output type. Possible values are exe, winexe, - library or module. - - - - - Define conditional compilation symbol(s). - - - - Corresponds to /d[efine]: flag. - - - - - - Icon to associate with the application. - - - - Corresponds to /win32icon: flag. - - - - - - Instructs the compiler to treat all warnings as errors. The default - is . - - - - Corresponds to the /warnaserror[+|-] flag of the compiler. - - - When this property is set to , any messages - that would ordinarily be reported as warnings will instead be - reported as errors. - - - - - - Controls which warnings should be reported as errors. - - - - - Specifies a comma-separated list of warnings that should be suppressed - by the compiler. - - - Comma-separated list of warnings that should be suppressed by the - compiler. - - - - Corresponds with the /nowarn flag. - - - - - - Specifies a list of warnings that you want the compiler to suppress. - - - - - Instructs NAnt to recompile the output file regardless of the file timestamps. - - - When this parameter is to , NAnt will always - run the compiler to rebuild the output file, regardless of the file timestamps. - - - - - Specifies which type contains the Main method that you want to use - as the entry point into the program. - - - - Corresponds to the /m[ain]: flag of the compiler. - - - Use this property when creating an executable file. If this property - is not set, the compiler searches for a valid Main method in all - public classes. - - - - - - Specifies the key pair container used to strongname the assembly. - - - - - Specifies a strong name key file. - - - - - Specifies whether to delay sign the assembly using only the public - portion of the strong name key. The default is - . - - - - - Additional directories to search in for assembly references. - - - - Corresponds with the /lib[path]: flag. - - - - - - Reference metadata from the specified assembly files. - - - - - Specifies list of packages to reference. - - - - - Resources to embed. - - - - This can be a combination of resx files and file resources. - - - .resx files will be compiled by and then - embedded into the resulting executable. - - - The property is used to make - up the resource name added to the assembly manifest for non-resx - files. - - - For .resx files the namespace from the matching source file is used - as prefix. This matches the behaviour of Visual Studio. - - - Multiple resources tags with different namespace prefixes may be - specified. - - - - - - Link the specified modules into this assembly. - - - - - The set of source files for compilation. - - - - - Indicates whether package references are supported by compiler for - a given target framework. The default is . - - - - - Indicates whether the compiler for a given target framework supports - the "warnaserror" option that takes a list of warnings. The default - is . - - - - - Indicates whether the compiler for a given target framework supports - a command line option that allows a list of warnings to be - suppressed. The default is . - - - - - Indicates whether the compiler for a given target framework supports - the "keycontainer" option. The default is . - - - - - Indicates whether the compiler for a given target framework supports - the "keyfile" option. The default is . - - - - - Indicates whether the compiler for a given target framework supports - the "delaysign" option. The default is . - - - - - Gets the file extension required by the current compiler. - - - The file extension required by the current compiler. - - - - - Gets the class name regular expression for the language of the current compiler. - - class name regular expression for the language of the current compiler - - - - Gets the namespace regular expression for the language of the current compiler. - - namespace regular expression for the language of the current compiler - - - - Gets the command-line arguments for the external program. - - - The command-line arguments for the external program. - - - - - Holds class and namespace information for resource (*.resx) linkage. - - - - - Initializes a new instance of the - class. - - The namespace the resource is under. - The class name the resource is associated with. - - - - Returns the resource linkage as a string. - - - A string representation of the resource linkage. - - - - - Gets a value indicating whether the - instances contains valid data. - - - if the - instance contains valid data; otherwise, . - - - - - Gets a value indicating whether a namespace name is available - for this instance. - - - if a namespace name is available for - this instance; otherwise, - . - - - - - Gets a value indicating whether a class name is available - for this instance. - - - if a class name is available for - this instance; otherwise, - . - - - - - Gets the name of namespace the resource is under. - - - The name of namespace the resource is under. - - - - - Gets the name of the class (most likely a form) that the resource - is associated with. - - - The name of the class the resource is associated with. - - - - - Gets the culture that the resource is associated with. - - - The culture that the resource is associated with. - - - - - Compiles C# programs. - - - - In order to have generate manifest resource names - that match those generated by Microsoft Visual Studio.NET, the value of - the attribute of the <> - element should match the "Default Namespace" of the C# project, and the - value of the attribute - should be set to "". - - - - Compile a "HelloWorld" application, including embedded resources. - - - - - - - - - - - - - - - - - - ]]> - - - - - - Writes the compiler options to the specified . - - to which the compiler options should be written. - - - - Determines whether compilation is needed. - - - - - The preferred base address at which to load a DLL. The default base - address for a DLL is set by the .NET Framework common language - runtime. - - - The preferred base address at which to load a DLL. - - - This address can be specified as a decimal, hexadecimal, or octal - number. - - - - - Specifies the type of debugging information generated by the - compiler. The default is . - - - - - No longer expose this to build authors. Use - instead. - - - - - The name of the XML documentation file to generate. - - - - Corresponds with the /doc: flag. - - - - - - Specifies the size of sections in the output file. Valid values are - 512, 1024, 2048, 4096, and 8192. - - - The size of sections in the output file. - - - - - Instructs the compiler not to import mscorlib.dll. The default is - . - - - - Corresponds with the /nostdlib[+|-] flag. - - - - - - Instructs the compiler not to use implicit references to assemblies. - The default is . - - - - Corresponds with the /noconfig flag. - - - - - - Specifies whether an integer arithmetic statement that is not in - the scope of the checked or unchecked keywords and - that results in a value outside the range of the data type should - cause a run-time exception. The default is . - - - - Corresponds with the /checked[+|-] flag. - - - - - - Instructs the compiler to allow code that uses the unsafe - keyword. The default is . - - - - Corresponds with the /unsafe[+|-] flag. - - - - - - Causes the compiler to only accept syntax that is included in a - given specification. - - - - Corresponds with the /langversion flag. - - - - - - Specifies whether the compiler should perform optimizations to the - make output files smaller, faster, and more effecient. The default - is . - - - if the compiler should perform optimizations; - otherwise, . - - - - Corresponds with the /optimize[+|-] flag. - - - - - - Specifies which platform version of common language runtime (CLR) - can run the output file. - - - The platform version of common language runtime (CLR) that can run - the output file. - - - - Corresponds with the /platform flag. - - - - - - Specifies the warning level for the compiler to display. Valid values - are 0-4. The default is 4. - - - The warning level for the compiler to display. - - - - Corresponds with the /warn flag. - - - - - - Specifies the code page to use for all source code files in the - compilation. - - - - Corresponds with the /codepage flag. - - - - - - Specifies whether the compiler for the active target framework - supports generation of XML Documentation file. The default is - . - - - - - Specifies whether the compiler for the active target framework - supports limiting the platform on which the compiled code can run. - The default is . - - - - - Specifies whether the compiler for the active target framework - supports accepting only a specific language syntax. - The default is . - - - - - Gets the file extension required by the current compiler. - - - For the C# compiler, the file extension is always cs. - - - - - Gets the class name regular expression for the language of the - current compiler. - - - Class name regular expression for the language of the current - compiler. - - - - - Gets the namespace regular expression for the language of the current compiler. - - - Namespace regular expression for the language of the current - compiler. - - - - - Signs delay-signed .NET Assemblies, or re-signs existing assemblies. - - - - The delay-signing mechanism takes a fileset (named targets) - and either a attribute for a file containing the - public and private keys, or to name a key - container. - - - - Sign partially-signed foo.dll with bar.snk. - - - - - - - ]]> - - - - - - Converts a single file or group of files. - - - - - List of assemblies/executables to sign. - - - - - Specifies the filesystem path to the signing key. - - - - - Specifies the key container. - - - - - Gets the command line arguments for the external program. - - - The command line arguments for the external program. - - - - - Compiles ILASM programs. - - - - Compiles helloworld.il to helloworld.exe. - - - - - - - - ]]> - - - - - - Compiles the sources. - - - - - Writes the compiler options. - - - - - Writes an option using the default output format. - - - The to which the compiler options should - be written. - - - A that contains the name of the - option which should be passed to the compiler. - - - - - Writes an option and its value using the default output format. - - - The to which the compiler options should - be written. - - - A that contains the name of the - option which should be passed to the compiler. - - - A that contains the value of the - option which should be passed to the compiler. - - - - - Determines whether or not compilation is needed. - - - if compilation is needed; otherwise, - . - - - - - Specifies whether or not the compiler should measure and report - the compilation times. - - - if the compilation times should be - measured and reported; otherwise, . The - default is . - - - - Corresponds to the /CLOCK flag. - - - - - - Specifies whether or not the compiler should generate debug - information. - - - if debug information should be generated; - otherwise, . The default is - . - - - - Corresponds to the /DEBUG flag. - - - - - - Specifies whether or not the compiler should attempt to create a - PE file even if compilation errors have been reported. - - - if a PE file has to be created even if - compilation errors have been reported; otherwise, - . The default is . - - - - Corresponds to the /ERROR flag. - - - - - - Instructs NAnt to recompile the output file regardless of the file - timestamps. - - - if the output file should be recompiled - regardless of its timestamps; otherwise . - The default is . - - - - - Specifies whether or not the compiler should type a formatted - listing of the compilation result. - - - if a formatted listing of the compilation - result should be typed; otherwise, . The - default is . - - - - Corresponds to the /LISTING flag. - - - - - - Instructs the compiler to set the FileAlignment value in - the PE header. - - - An that represents the FileAlignment - value to set in the PE header. The value must be a power of 2, in - range from 512 to 65536. - - - - Corresponds to the /ALIGNMENT flag. - - - - - - Instructs the compiler to set the ImageBase value in - the PE header. - - - A that represents the ImageBase - value to set in the PE header. - - - - Corresponds to the /BASE flag. - - - - - - Instructs the compiler to set the Flags value in the CLR - header. - - - An that represents the Flags - value to set in the CLR header. The most frequently value are 1 - (pre-IL code) and 2 (mixed code). The third bit indicating that - the PE file is strong signed, is ignored. - - - - Corresponds to the /FLAGS flag. - - - - - - Instructs the compiler to set the Subsystem value in the PE - header. - - - An that represents the Subsystem - value to set in the PE header. The most frequently value are 3 - (console application) and 2 (GUI application). - - - - Corresponds to the /SUBSYSTEM flag. - - - - - - Specifies which output type should be generated. - - - A that contains the target type. - Possible values are dll and exe. - - - - Corresponds to the /OUTPUT flag. - - - - - - Instructs the compiler to generate a strong signature of the PE - file. - - - A that contains the private - encryption key. - - - - Corresponds to the /KEY=keysource]]> - flag. - - - - - - Instructs the compiler to generate a strong signature of the PE - file. - - - A that represents the file - containing the private encryption key. - - - - Corresponds to the /KEY=keyfile]]> - flag. - - - - - - Specifies the name of the output file created by the compiler. - - - A that represents the name of - the output file. - - - - Corresponds to the /OUTPUT flag. - - - - - - Instructs the compiler to link the specified unmanaged resource - file into the resulting PE file. - - - A that represents the unmanaged - resource file to link. - - - - Corresponds to the /RESOURCE flag. - - - - - - Specifies the set of source files to compile. - - - A that represents the set - of source files to compile. - - - - - Gets the command-line arguments for the external program. - - - A that contains the command-line - arguments for the external program. - - - - - Compiles JScript.NET programs. - - - Compile helloworld.js to helloworld.exe. - - - - - - - ]]> - - - - - - Writes module references to the specified . - - The to which the module references should be written. - - - - Writes the compiler options to the specified . - - to which the compiler options should be written. - - - - Automatically references assemblies if they have the same name as - an imported namespace or as a type annotation when declaring a - variable. The default is . - - - - Corresponds with the /autoref flag. - - - - - - Instructs the compiler not to import standard library, and changes - to . The default is - . - - - - Corresponds with the /noconfig flag. - - - - - - Specifies which platform version of common language runtime (CLR) - can run the output file. - - - The platform version of common language runtime (CLR) that can run - the output file. - - - - Corresponds with the /platform flag. - - - - - - Causes the compiler to generate errors for implicit method - overrides. The default is . - - - - Corresponds with the /versionsafe flag. - - - - - - Specifies the warning level for the compiler to display. Valid - values are 0-4. The default is 4. - - - The warning level for the compiler to display. - - - - Corresponds with the /warn flag. - - - - - - Controls which warnings should be reported as errors. - - - Override to avoid exposing this to build authors, as the JScript.NET - compiler does not allow control over which warnings should be - reported as errors. - - - - - Specifies a comma-separated list of warnings that should be suppressed - by the compiler. - - - Override to avoid exposing this to build authors, as the JScript.NET - compiler does not support package references. - - - - - Specifies a list of warnings that you want the compiler to suppress. - - - Override to avoid exposing this to build authors, as the JScript.NET - compiler does not support suppressing warnings. - - - - - Specifies the code page to use for all source code files in the - compilation. - - - - Corresponds with the /codepage flag. - - - - - - Specifies the key pair container used to strongname the assembly. - - - Override to avoid exposing this to build authors, as the JScript.NET - does not support this. - - - - - Specifies a strong name key file. - - - Override to avoid exposing this to build authors, as the JScript.NET - does not support this. - - - - - Specifies whether to delay sign the assembly using only the public - portion of the strong name key. - - - Override to avoid exposing this to build authors, as the JScript.NET - does not support this. - - - - - Indicates whether the compiler for a given target framework supports - the "keycontainer" option. The default is . - - - . - - - Override to avoid exposing this to build authors, as the JScript.NET - does not support this. - - - - - Indicates whether the compiler for a given target framework supports - the "keyfile" option. The default is . - - - . - - - Override to avoid exposing this to build authors, as the JScript.NET - does not support this. - - - - - Indicates whether the compiler for a given target framework supports - the "delaysign" option. The default is . - - - . - - - Override to avoid exposing this to build authors, as the JScript.NET - does not support this. - - - - - Specifies whether the compiler for the active target framework - supports limiting the platform on which the compiled code can run. - The default is . - - - - - Link the specified modules into this assembly. - - - Override to avoid exposing this to build authors, as the JScript.NET - compiler does not support linking modules. - - - - - Gets the file extension required by the current compiler. - - - For the JScript.NET compiler, the file extension is always js. - - - - - Gets the class name regular expression for the language of the - current compiler. - - - Class name regular expression for the language of the current - compiler. - - - - - Gets the namespace regular expression for the language of the - current compiler. - - - Namespace regular expression for the language of the current - compiler. - - - - - Generates a .licence file from a .licx file. - - - - If no output file is specified, the default filename is the name of the - target file with the extension .licenses appended. - - - - - Generate the file component.exe.licenses file from component.licx. - - - - ]]> - - - - - - Initializes the class. - - - - - Updates the of the specified - . - - The of which the should be updated. - - - - Generates the license file. - - - - - Determines whether the .licenses file needs to be recompiled - or is uptodate. - - The .licenses file. - - if the .licenses file needs compiling; - otherwise, . - - - - - Input file to process. - - - - - Name of the license file to output. - - - - - Names of the references to scan for the licensed component. - - - - - Specifies the executable for which the .licenses file is generated. - - - - - Specifies the executable for which the .licenses file is generated. - - - - - Indicates whether assembly references are supported by the current - target framework. The default is . - - - Applies only to frameworks having a command line tool for compiling - licenses files. - - - - - Indicates whether the current target framework has a command line - tool for compiling licenses files. The default is - . - - - - - Gets the working directory for the application. - - - The working directory for the application. - - - - - The command-line arguments for the external program. - - - Override to avoid exposing these elements in build file. - - - - - Gets the command-line arguments for the external program. - - - The command-line arguments for the external program. - - - - - Gets the filename of the external program to start. - - - The filename of the external program. - - - Override in derived classes to explicitly set the location of the - external tool. - - - - - Responsible for reading the license and writing them to a license - file. - - - - - Obtains a lifetime service object to control the lifetime policy for - this instance. - - - An object of type used to control the lifetime - policy for this instance. This is the current lifetime service object - for this instance if one exists; otherwise, a new lifetime service - object initialized with a lease that will never time out. - - - - - Creates the whole license file. - - The instance for which the license file should be created. - The .licenses file to create. - - - - Determines whether the given object is serializable in binary - format. - - The object to check. - - if is - serializable in binary format; otherwise, . - - - - - Runs NDoc V1.3.1 to create documentation. - - - - See the NDoc home page for more - information. - - - By default, only the NDoc MSDN documenter ships as part of the NAnt - distribution. To make another NDoc documenter from the NDoc V1.3.1 - distribution available to the , copy the - documenter assembly (and possible dependencies) to the "lib" - directory corresponding with the CLR you're running NAnt on - (eg. <nant root>/bin/lib/net/1.1). - - - - - Document two assemblies using the MSDN documenter. The namespaces are - documented in NamespaceSummary.xml. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ]]> - - Content of NamespaceSummary.xml : - - - - The Foo.Bar namespace reinvents the wheel. - - - The Foo.Bar.Tests namespace ensures that the Foo.Bar namespace reinvents the wheel correctly. - - - ]]> - - - - - - Initializes the taks and verifies the parameters. - - - - - Generates an NDoc project and builds the documentation. - - - - - Represents the method that will be called to update the overall - percent complete value and the current step name. - - The source of the event. - A that contains the event data. - - - - Represents the method that will be called to update the current - step's precent complete value. - - The source of the event. - A that contains the event data. - - - - Returns the documenter for the given project. - - - Documenter is not found. - - - is . - - - - - Performs macro expansion for the given nodes. - - for which expansion should be performed. - - - - The set of assemblies to document. - - - - - The set of namespace summary files. - - - - - Specifies the formats in which the documentation should be generated. - - - - - Collection of additional directories to search for referenced - assemblies. - - - - - Installs or removes .NET Services. - - - - This tasks provides the same functionality as the regsvcs tool - provided in the .NET SDK. - - - It performs the following actions: - - - - Loads and registers an assembly. - - - Generates, registers, and installs a type library into a specified COM+ application. - - - Configures services that are added programmatically to your class. - - - - Refer to the .NET Services Installation Tool (Regsvcs.exe) for more information. - - - - - Adds all public classes contained in myTest.dll to a COM+ - application and produces the myTest.tlb type library. If the - application already exists, it is overwritten. - - - - ]]> - - - - - Adds all public classes contained in myTest.dll to myTargetApp - and produces the myTest.tlb type library. If the application already - exists, it is overwritten. - - - - ]]> - - - - - Adds all public classes contained in myTest.dll to a COM+ - application and produces the myTest.tlb type library. A new - application is always created. - - - - ]]> - - - - - Uninstalls the COM+ application contained in myTest.dll. - - - - ]]> - - - - - - Performs the specified action. - - - - - Defines the action to take with the assembly. The default is - . - - - - - The source assembly file. - - - The assembly must be signed with a strong name. - - - - - Specifies the type library file to install. - - - - - Uses an existing type library. The default is . - - - - - Do not reconfigure an existing target application. - The default is . - - - - - Configures components only; ignores methods and interfaces. - The default is . - - - - - Expect an existing application. The default is . - - - - - Specifies the name of the COM+ application to either find or create. - - - - - Specifies the name or id of the COM+ application to either find or - create. - - - - - Gets the command-line arguments for the external program. - - - The command-line arguments for the external program. - - - - - Defines the possible actions for a .NET Service. - - - - - Finds or creates the target application. - - - - - Creates the target application. - - - - - Uninstalls the target application. - - - - - Converts files from one resource format to another. - - - - If no is specified, the resource file will - be created next to the input file. - - - - - Convert a resource file from the .resx to the .resources - format. - - - - ]]> - - - - - Convert a set of .resx files to the .resources format. - - - - - - - - ]]> - - - - - - Updates the of the specified - . - - The of which the should be updated. - - - - Converts a single file or group of files. - - - - - Cleans up generated files. - - - - - Determines whether the specified input file needs to be compiled. - - The input file. - The output file. - - if the input file need to be compiled; - otherwise . - - - - - Determines the full path and extension for the output file. - - The output file for which the full path and extension should be determined. - - The full path (with extensions) for the specified file. - - - - - Determines whether the specified resource file references third - party assemblies by checking whether a <data> element exists - with a "type" attribute that does not start with - "System.". - - The resource file to check. - - if the resource file references third party - assemblies, or an error occurred; otherwise, . - - - This check will only be accurate for 1.0 resource file, but the - 2.0 resx files can only be compiled with a resgen tool that supported - assembly references, so this method will not be used anyway. - - - - - Returns a list of external file references for the specified file. - - The resx file for which a list of external file references should be returned. - - A list of external file references for the specified file, or - if does not - exist or does not support external file references. - - - - - Input file to process. - - - The full path to the input file. - - - - - The resource file to output. - - - - - The target type. The default is resources. - - - - - The directory to which outputs will be stored. - - - - - Use each source file's directory as the current directory for - resolving relative file paths. The default is . - Only supported when targeting .NET 2.0 (or higher). - - - - - Takes a list of .resx or .txt files to convert to .resources files. - - - - - Reference metadata from the specified assembly files. - - - - - Indicates whether assembly references are supported by the - resgen tool for the current target framework. The default - is . - - - - - Indicates whether external file references are supported by the - resgen tool for the current target framework. The default - is . - - - - - For internal use only ! - - - - - Gets the working directory for the application. - - - The working directory for the application. - - - - - Gets the command line arguments for the external program. - - - The command line arguments for the external program. - - - - - Gets the filename of the external program to start. - - - The filename of the external program. - - - Override in derived classes to explicitly set the location of the - external tool. - - - - - For internal use only ! - - - - - Initializes a new instance of the - class for a given input and output file. - - The resource to compile. - The compiled resource. - - - - Gets the resource file to compile. - - - The resource file to compile. - - - - - Gets the compiled resource file. - - - The compiled resource file. - - - - - Executes the code contained within the task. This code can include custom extension function definitions. - Once the script task has executed those custom functions will be available for use in the buildfile. - - - - The must contain a single code - element, which in turn contains the script code. - - - A static entry point named ScriptMain is required if no custom functions have been defined. It must - have a single parameter. - - - The following namespaces are loaded by default: - - - - System - - - System.Collections - - - System.Collections.Specialized - - - System.IO - - - System.Text - - - System.Text.RegularExpressions - - - NAnt.Core - - - - - Run C# code that writes a message to the build log. - - <script language="C#"> - <code> - <![CDATA[ - public static void ScriptMain(Project project) { - project.Log(Level.Info, "Hello World from a script task using C#"); - } - ]]> - </code> - </script> - - - - Define a custom function and call it using C#. - - <script language="C#" prefix="test" > - <code> - <![CDATA[ - [Function("test-func")] - public static string Testfunc( ) { - return "some result !!!!!!!!"; - } - ]]> - </code> - </script> - <echo message='${test::test-func()}'/> - - - - Use a custom namespace in C# to create a database - - <script language="C#" > - <references> - <include name="System.Data.dll" /> - </references> - <imports> - <import namespace="System.Data.SqlClient" /> - </imports> - <code> - <![CDATA[ - public static void ScriptMain(Project project) { - string dbUserName = "nant"; - string dbPassword = "nant"; - string dbServer = "(local)"; - string dbDatabaseName = "NAntSample"; - string connectionString = String.Format("Server={0};uid={1};pwd={2};", dbServer, dbUserName, dbPassword); - - SqlConnection connection = new SqlConnection(connectionString); - string createDbQuery = "CREATE DATABASE " + dbDatabaseName; - SqlCommand createDatabaseCommand = new SqlCommand(createDbQuery); - createDatabaseCommand.Connection = connection; - - connection.Open(); - - try { - createDatabaseCommand.ExecuteNonQuery(); - project.Log(Level.Info, "Database added successfully: " + dbDatabaseName); - } catch (Exception e) { - project.Log(Level.Error, e.ToString()); - } finally { - connection.Close(); - } - } - ]]> - </code> - </script> - - - - - Run Visual Basic.NET code that writes a message to the build log. - - - <script language="VB"> - <code> - <![CDATA[ - Public Shared Sub ScriptMain(project As Project) - project.Log(Level.Info, "Hello World from a script task using Visual Basic.NET") - End Sub - ]]> - </code> - </script> - - - - Define a custom task and call it using C#. - - <script language="C#" prefix="test" > - <code> - <![CDATA[ - [TaskName("usertask")] - public class TestTask : Task { - #region Private Instance Fields - - private string _message; - - #endregion Private Instance Fields - - #region Public Instance Properties - - [TaskAttribute("message", Required=true)] - public string FileName { - get { return _message; } - set { _message = value; } - } - - #endregion Public Instance Properties - - #region Override implementation of Task - - protected override void ExecuteTask() { - Log(Level.Info, _message.ToUpper()); - } - #endregion Override implementation of Task - } - ]]> - </code> - </script> - <usertask message='Hello from UserTask'/> - - - - - Define a custom function and call it using Boo. - - - <script language="Boo.CodeDom.BooCodeProvider, Boo.CodeDom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=32c39770e9a21a67" - failonerror="true"> - <code> - <![CDATA[ - - [Function("test-func")] - def MyFunc(): - return "Hello from Boo !!!!!!" - ]]> - </code> - </script> - <echo message='${script::test-func()}'/> - - - - - - Initializes the task. - - - - - Executes the script block. - - - - - The language of the script block. Possible values are "VB", "vb", "VISUALBASIC", "C#", "c#", "CSHARP". - "JS", "js", "JSCRIPT" "VJS", "vjs", "JSHARP" or a fully-qualified name for a class implementing - . - - - - - Any required references. - - - - - The name of the main class containing the static ScriptMain - entry point. - - - - - The namespace prefix for any custom functions defined in the script. - If ommitted the prefix will default to 'script' - - - - - The namespaces to import. - - - - - The code to execute. - - - - - Compiles Visual Basic.NET programs. - - - - In order to have generate manifest resource names - that match those generated by Microsoft Visual Studio.NET, the value of - the attribute of the <> - element should match the "Root namespace" of the VB.NET project, and the - value of the attribute - should be set to "". - - - - Example build file using this task. - - - - - - - - - - - - - - - - - - - - - - - - - - - - ]]> - - - - - - Finds the correct namespace/classname for a resource file from the - given dependent source file, and ensure the - is prefixed. - - The file from which the resource linkage of the resource file should be determined. - The culture of the resource file for which the resource linkage should be determined. - - The namespace/classname of the source file matching the resource or - if the dependent source file does not exist. - - - - - Writes conditional compilation constants to the specified - . - - The to which the conditional compilation constants should be written. - - - - Writes the compiler options to the specified . - - to which the compiler options should be written. - - - - Determines whether compilation is needed. - - - - - The preferred base address at which to load a DLL. The default base - address for a DLL is set by the .NET Framework common language - runtime. - - - The preferred base address at which to load a DLL. - - - This address must be specified as a hexadecimal number. - - - - - Specifies the type of debugging information generated by the - compiler. The default is . - - - - - No longer expose this to build authors. Use - instead. - - - - - The name of the XML documentation file to generate. Only supported - when targeting .NET 2.0 (or higher). - - - - Corresponds with the /doc: flag. - - - - - - Specifies whether the /imports option gets passed to the - compiler. - - - The value of this attribute is a string that contains one or more - namespaces separated by commas. - - - See the Microsoft.NET Framework SDK documentation for details. - - Example of an imports attribute - - - - - - The namespaces to import. - - - - - Instructs the compiler not to reference standard libraries - (system.dll and VBC.RSP). The default is . - Only supported when targeting .NET 2.0 (or higher). - - - - Corresponds with the /nostdlib flag. - - - - - - Specifies whether /optioncompare option gets passed to the - compiler. - - - text, binary, or an empty string. If the value is - or an empty string, the option will not be - passed to the compiler. - - See the Microsoft.NET Framework SDK documentation for details. - - - - Specifies whether the /optionexplicit option gets passed to - the compiler. The default is . - - - if the option should be passed to the compiler; - otherwise, . - - See the Microsoft.NET Framework SDK documentation for details. - - - - Specifies whether the /optimize option gets passed to the - compiler. The default is . - - - if the option should be passed to the compiler; - otherwise, . - - See the Microsoft.NET Framework SDK documentation for details. - - - - Specifies whether the /optionstrict option gets passed to - the compiler. The default is . - - - if the option should be passed to the compiler; - otherwise, . - - See the Microsoft.NET Framework SDK documentation for details. - - - - Specifies which platform version of common language runtime (CLR) - can run the output file. - - - The platform version of common language runtime (CLR) that can run - the output file. - - - - Corresponds with the /platform flag. - - - - - - Specifies whether the /removeintchecks option gets passed to - the compiler. The default is . - - - if the option should be passed to the compiler; - otherwise, . - - See the Microsoft.NET Framework SDK documentation for details. - - - - Specifies whether the /rootnamespace option gets passed to - the compiler. - - - The value of this attribute is a string that contains the root - namespace of the project. - - See the Microsoft.NET Framework SDK documentation for details. - - - - Specifies whether the compiler for the active target framework - supports generation of XML Documentation file. The default is - . - - - - - Specifies whether the compiler for the active target framework - supports NOT referencing standard libraries (system.dll and VBC.RSP). - The default is . - - - - - Specifies whether the compiler for the active target framework - supports limiting the platform on which the compiled code can run. - The default is . - - - - - Gets the file extension required by the current compiler. - - - For the VB.NET compiler, the file extension is always vb. - - - - - Gets the class name regular expression for the language of the - current compiler. - - - Class name regular expression for the language of the current - compiler. - - - - - Gets the namespace regular expression for the language of the - current compiler. - - - Namespace regular expression for the language of the current - compiler. - - - - - Compiles Visual J# programs using vjc, Microsoft's J# compiler. - - - - In order to have generate manifest resource names - that match those generated by Microsoft Visual Studio.NET, the value of - the attribute of the <> - element should match the "Default Package" of the J#.NET project, and - the value of the attribute - should be set to "". - - - - Compile a "HelloWorld" application, including embedded resources. - - - - - - - - - - - - - - - - - ]]> - - - - - - Writes module references to the specified . - - The to which the module references should be written. - - - - Writes the compiler options to the specified . - - to which the compiler options should be written. - - - - The preferred base address at which to load a DLL. The default base - address for a DLL is set by the .NET Framework common language - runtime. - - - The preferred base address at which to load a DLL. - - - This address can be specified as a decimal, hexadecimal, or octal - number. - - - - - Specifies the type of debugging information generated by the - compiler. The default is . - - - - - No longer expose this to build authors. Use - instead. - - - - - Specifies whether package-scoped members are accessible outside of - the assembly. In other words, package scope is treated as assembly - scope when emitting metadata. The default is . - - - if the option should be passed to the compiler; - otherwise, . - - - - Corresponds to the /securescoping flag. - - - See the Visual J# Reference for details. - - - - ]]> - - - - - Specifies whether to disable language extensions. - - - The value of this property must be either all, net, - or an empty string. - - - - Corresponds to the /x flag. - - - See the Visual J# Reference for details. - - - - To disable only the .NET Framework extensions: - ]]> - To disable the .NET Framework extensions and the VJ++ 6.0 extensions: - ]]> - - - - - Specifies the location of assemblies referenced by way of the /reference flag. - - - - Corresponds to the /libpath:dir[;dir2] flag. - - - See the Visual J# Reference for details. - - - - - - Associate Java-language/COM package names. - - - The value of this propery. must be package=namespace, @filename, - or an empty string. - - - - Corresponds to the /jcpa:package=namespace and /jcpa:@filename flags. - - - See the Visual J# Reference for details. - - - - Map package 'x' to namespace 'y': - ]]> - - - - - Specifies the code page to use for all source code files in the - compilation. - - - - Corresponds with the /codepage flag. - - - See the Visual J# Reference for details. - - - - - - Specifies the warning level for the compiler to display. Valid values - are 0-4. The default is 4. - - - The warning level for the compiler to display. - - - - Corresponds with the /warn option. - - - - - - Controls which warnings should be reported as errors. - - - Override to avoid exposing this to build authors, as the Visual J# - compiler does not allow control over which warnings should be - reported as errors. - - - - - Reference packages - - - Override to avoid exposing this to build authors, as the Visual J# - compiler does not support package references. - - - - - Link the specified modules into this assembly. - - - Override to avoid exposing this to build authors, as the Visual J# - compiler does not support linking modules. - - - - - Gets the file extension required by the current compiler. - - - For the J# compiler, the file extension is always jsl. - - - - - Gets the class name regular expression for the language of the - current compiler. - - - Class name regular expression for the language of the current - compiler. - - - - - Gets the namespace regular expression for the language of the - current compiler. - - - Namespace regular expression for the language of the current - compiler. - - - - - Override to avoid exposing the configuration setting for this - task as Visual J# will never support package references. - - - , as the Visual J# compiler will never - support package references. - - - - - Represents an assembly-level attribute. - - - - - Initializes a new instance of the - class. - - - - - Typename of the assembly-level attribute. - - - - - Value of the attribute. - - - - - If then the value of the attribute will be - set as is, without actually looking for a matching constructor or - named properties. The default is . - - - if the value of the attribute should be set - as is; otherwise, . - - - - - Indicates if the attribute should be generated. - - - if the attribute should be generated; - otherwise, . - - - - - Indicates if the attribute should be not generated. - - - if the attribute should be not generated; - otherwise, . - - - - - Contains a strongly typed collection of - objects. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Determines whether a with the specified - value is in the collection. - - The argument value to locate in the collection. - - if a with - value is found in the collection; otherwise, - . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - 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. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Gets the with the specified value. - - The value of the to get. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - A specialized used for setting the lib directories. - - - The primary reason for this class is to allow the - to always be the same value as the parent - - - - - - Initializes a new instance of the class. - - - - - - override this. We will always use the base directory of the parent. - overriding without the TaskAttribute attribute prevents it being set - in the source xml - - - - - Specialized class for managing assembly files. - - - - If an include pattern does not contain any wildcard characters then - the assembly will be searched for in following locations (in the order listed): - - - - - The base directory of the fileset. - - - - - The directories specified using the nested <lib> element. - - - - - The list of reference assemblies of the current target framework. - - - - - The reference assemblies of a given target framework are defined using - <reference-assemblies> filesets in the <framework> node - of the NAnt configuration file. - - - - - Define a reference with name "sys.assemblies", holding - a set of system assemblies. - - - - - - - - ]]> - - - Use the predefined set of assemblies to compile a C# assembly. - - - - - - - - - ]]> - - - - - Compile a C# assembly using assembly references that are searched for - in the "Third Party Assemblies" and "Company Assemblies" - directories. - - - - - - - - - - - - - - - - ]]> - - - - - - - Initializes a new instance of the class. - - - - - copy constructor for FileSet. Required in order to - assign references of FileSet type where - AssemblyFileSets are used - - - - - - Do a normal scan and then resolve assemblies. - - - - - Resolves references to system assemblies and assemblies that can be - resolved using directories specified in . - - - - - Additional directories to search in for assembly references. - - - - loosely Corresponds with the /lib[path]: flag of the various compiler tasks. - - - - - - Represents a compiler warning. - - - - - A warning number, or comma-separated list of warnings, that you want - the compiler to suppress or report. - - - - - If then the element will be processed; - otherwise, skipped. The default is . - - - - - If then the element will be skipped; - otherwise, processed. The default is . - - - - - Contains a collection of elements. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - 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. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Specifies the type of debugging information generated by the compiler. - - - - For backward compatibility, the following string values can also be - used in build files: - - - - Value - Corresponding field - - - "true" - - - - "false" - - - - - When set to then the following conditional - compilation symbols will also be defined: - - - - DEBUG - - - TRACE - - - - - - - Create no debug information. - - - - - Enable attaching a debugger to the running program. - - - - - Enable attaching a debugger to the running program. - - - - - Only display assembler when the running program is attached to the - debugger. - - - - - Specialized that also supports - case-insensitive conversion of "true" to - and "false" to - . - - - - - Initializes a new instance of the - class. - - - - - Converts the given object to the type of this converter, using the - specified context and culture information. - - An that provides a format context. - A object. If a is passed, the current culture is assumed. - The to convert. - - An that represents the converted value. - - - - - Specifies whether the generated assembly is strongly named and will - be signed later. - - - - For backward compatibility, the following string values can also be - used in build files: - - - - Value - Corresponding field - - - "true" - - - - "false" - - - - - - - - Not specified. - - - - - Fully sign the assembly. - - - - - Only place the public key in the assembly, allowing the signature - to be added later. - - - - - Specialized that also supports - case-insensitive conversion of "true" to - and "false" to - . - - - - - Initializes a new instance of the - class. - - - - - Converts the given object to the type of this converter, using the - specified context and culture information. - - An that provides a format context. - A object. If a is passed, the current culture is assumed. - The to convert. - - An that represents the converted value. - - - - - Represents an embedded resource. - - - Do not yet expose this to build authors. - - - - - Initializes a new instance of the - with the specified file name and manifest resource name. - - The path of the compiled resource. - The manifest resource name of the embedded resource. - - - - Gets the physical location of the resource to embed. - - - The physical location of the resource to embed. - - - - - Gets the manifest resource name to use when embedding the resource. - - - The manifest resource name to use when embedding the resource. - - - - - Contains a collection of items. - - - Do not yet expose this to build authors. - - - - - Base class for collections that needs to be globally referencable. - - - - - Initializes a new instance of the - class. - - - - - Copies the items of the collection to an , - starting at a particular index. - - The one-dimensional that is the destination of the items copied from the collection. The must have zero-based indexing. - The zero-based index in at which copying begins. - - - - Returns an enumerator that can iterate through a collection. - - - An that can be used to iterate through - the collection. - - - - - Removes an item at a specific index. - - The zero-based index of the item to remove. - - - - Removes all items from the collection. - - - - - Used by methods that take instances as argument - to verify whether the instance is valid for the collection class. - - The instance to verify. - - - - Checks whether the specified index is within the range of this - collection. - - The index to check. - - - - Gets a value indicating whether access to the collection is - synchronized (thread-safe). - - - . - - - - - Gets the number of items in the collection. - - - The number of items in the collection. - - - - - 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. - - - . - - - - - Gets a value indicating whether the collection has a fixed size. - - - . - - - - - Gets the list of elements contained in the - instance. - - - An containing the elements of the - collection. - - - - - Gets the of the items in this collection. - - - The of the items in this collection. - - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Inserts a into the collection at the - specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Removes the specified from the - collection. - - The to remove from the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Gets the location of a in the collection. - - The object to locate. - - The zero-based location of the in the - collection. - - - If the is not currently a member of - the collection, -1 is returned. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - - The position into which the new item was inserted. - - - - - Adds the items of a to the end of the collection. - - The to be added to the end of the collection. - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - - The position into which the new item was inserted. - - - - - Inserts a into the collection at the - specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Removes the specified from the - collection. - - The to remove from the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Gets the location of a in the collection. - - The object to locate. - - The zero-based location of the in the - collection. - - - If the is not currently a member of - the collection, -1 is returned. - - - - - Gets or sets the item at the specified index. - - The zero-based index of the item to get or set. - - - - Gets the with the specified manifest - resource name. - - The manifest resource name of the to get. - - - - Gets the of the items in this collection. - - - The of the items in this collection. - - - - - Gets or sets the item at the specified index. - - The zero-based index of the item to get or set. - - - - Enumerates the items of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next item of the collection. - - - if the enumerator was successfully advanced - to the next item; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first item in the collection. - - - - - Gets the current item in the collection. - - - The current item in the collection. - - - - - Gets the current item in the collection. - - - The current item in the collection. - - - - - Represents a metadata file without assembly manifest. - - - - - Returns a textual representation of the module, which can be used as - argument for command-line tools. - - - A textual representation of the path, file[,target]. - - - - - The path of the module. - - - - - File name where the module should be copied to before it is compiled - into an assembly. - - - - - Gets or sets the that contains the module. - - - - - Contains a collection of items. - - - Do not yet expose this to build authors. - - - - - Initializes a new instance of the - for the specified . - - The containing the collection. - is . - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Copies the items of the collection to an , - starting at a particular index. - - The one-dimensional that is the destination of the items copied from the collection. The must have zero-based indexing. - The zero-based index in at which copying begins. - - - - Removes all items from the collection. - - - - - Inserts a into the collection at the - specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Removes the specified from the - collection. - - The to remove from the collection. - - - - Removes an item at a specific index. - - The zero-based index of the item to remove. - The parameter is less than 0 or greater than or equal to the value of the property of the . - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Gets the location of a in the collection. - - The object to locate. - - The zero-based location of the in the - collection. - - - If the is not currently a member of - the collection, -1 is returned. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - - The position into which the new item was inserted. - - - - - Adds the items of a to the end of the collection. - - The to be added to the end of the collection. - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - - The position into which the new item was inserted. - - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Inserts a into the collection at the - specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Removes the specified from the - collection. - - The to remove from the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Gets the location of a in the collection. - - The object to locate. - - The zero-based location of the in the - collection. - - - If the is not currently a member of - the collection, -1 is returned. - - - - - Gets or sets the item at the specified index. - - The zero-based index of the item to get or set. - The parameter is less than 0 or greater than or equal to the value of the property of the . - - - - Gets the list of elements contained in the - instance. - - - An containing the elements of the - collection. - - - - - Gets a value indicating whether access to the collection is - synchronized (thread-safe). - - - . - - - - - Gets the number of items in the collection. - - - The number of items in the collection. - - - - - 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. - - - . - - - - - Gets a value indicating whether the collection has a fixed size. - - - . - - - - - Gets or sets the item at the specified index. - - The zero-based index of the item to get or set. - The parameter is less than 0 or greater than or equal to the value of the property of the . - - - - Enumerates the items of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next item of the collection. - - - if the enumerator was successfully advanced - to the next item; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first item in the collection. - - - - - Gets the current item in the collection. - - - The current item in the collection. - - - - - Gets the current item in the collection. - - - The current item in the collection. - - - - - - One or more modules to compile into an assembly. - - - - - Define a global <moduleset> that can be referenced by - other tasks or types. - - - - - - - ]]> - - - - - - Initializes a new instance of the class. - - - - - The base of the directory of this . - The default is the project base directory. - - - - - The modules to add to this . - - - - - Represents a namespace to import. - - - - - Initializes a new instance of the - class. - - - - - Initializes a new instance of the - class for the specified namespace. - - The namespace. - is . - - - - The name of the namespace to import. - - - The name of the namespace to import. - - - - - The name of the namespace to import. - - - The name of the namespace to import. - - - - - Indicates if the import should be generated. - - - if the import should be generated; otherwise, - . - - - - - Indicates if the import should be not generated. - - - if the import should be not generated; - otherwise, . - - - - - Contains a collection of items. - - - Define a reference with name "system.imports". - - - - - - ]]> - - Use the predefined set of imports to compile a VB.NET assembly. - - - - - - - - - - - - ]]> - - - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Returns a comma-delimited list of namespace imports. - - - A comma-delimited list of namespace imports, or an empty - if there are no namespace imports. - - - Each namespace import is quoted individually. - - - - - Inserts a into the collection at the - specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Removes the specified from the - collection. - - The to remove from the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Gets the location of a in the collection. - - The object to locate. - - The zero-based location of the in the - collection. - - - If the is not currently a member of - the collection, -1 is returned. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - - The position into which the new item was inserted. - - - - - Adds the items of a to the end of the collection. - - The to be added to the end of the collection. - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - - The position into which the new item was inserted. - - - - - Inserts a into the collection at the - specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Removes the specified from the - collection. - - The to remove from the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Gets the location of a in the collection. - - The object to locate. - - The zero-based location of the in the - collection. - - - If the is not currently a member of - the collection, -1 is returned. - - - - - Gets or sets the item at the specified index. - - The zero-based index of the item to get or set. - - - - Gets the with the specified namespace. - - The namespace of the to get. - - - - Gets the of the items in this collection. - - - The of the items in this collection. - - - - - Gets or sets the item at the specified index. - - The zero-based index of the item to get or set. - - - - Enumerates the items of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next item of the collection. - - - if the enumerator was successfully advanced - to the next item; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first item in the collection. - - - - - Gets the current item in the collection. - - - The current item in the collection. - - - - - Gets the current item in the collection. - - - The current item in the collection. - - - - - Represents a package. - - - - - Name of the package to reference. Multiple package can be specified - with a single element as a semi-colon separated list of - package names. - - - - - Indicates if the package should be passed to the task. - If then the package will be passed; - otherwise, skipped. The default is . - - - - - Indicates if the package should not be passed to the task. - If then the package will be passed; - otherwise, skipped. The default is . - - - - - Contains a strongly typed collection of - objects. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - 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. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Specialized class for managing resource files. - - - - - Initializes a new instance of the class. - - - - - copy constructor for FileSet. Required in order to - assign references of FileSet type where - ResourceFileSet are used - - - - - - Creates a shallow copy of the . - - - A shallow copy of the . - - - - - Gets the manifest resource name for the specified resource file. - - The physical path of the resource file. - - The manifest resource name to be sent to the compiler. - - - - - Gets the manifest resource name for the file using both its physical - and logical path. - - The physical path of the resource file. - The logical location of the resource file. - - The manifest resource name to be sent to the compiler. - - - We use the relative path of the logical path, but the filename and - and the extension of the physical path to match VS.NET - - - - - Indicates the prefix to prepend to the actual resource. - This is usually the default namspace of the assembly. - - - - - Indicates whether prefixes should be dynamically generated by taking - the path of the resource relative to the basedir and appending it - to the specified prefix. The default is . - - - - - Gets a containing all matching resx files. - - - A containing all matching resx files. - - - - - Gets a containing all matching non-resx - files. - - - A containing all matching non-resx files. - - - - - Contains a strongly typed collection of objects. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - 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. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Controls the behaviour of a compiler with regards to the reporting of - warnings. - - - - Instruct a compiler to report warning 0519 as an error. - - - - - - ]]> - - - - - Instruct a compiler not to report warning 0519 as an error, if the - release property is . - - - - - - ]]> - - - - - - Specifies a list of warnings that the compiler should treat as - errors. This overrides the - attribute. Only supported when targeting .NET 2.0 or higher. - - - - - Specifies a list of warnings that the compiler should NOT treat as - errors. This is only useful if - is . Only supported when targeting .NET 2.0 - or higher. - - - - diff --git a/bin/Nant/NAnt.MSNetTasks.dll b/bin/Nant/NAnt.MSNetTasks.dll deleted file mode 100644 index d09a7ca8d..000000000 Binary files a/bin/Nant/NAnt.MSNetTasks.dll and /dev/null differ diff --git a/bin/Nant/NAnt.MSNetTasks.xml b/bin/Nant/NAnt.MSNetTasks.xml deleted file mode 100644 index 832721162..000000000 --- a/bin/Nant/NAnt.MSNetTasks.xml +++ /dev/null @@ -1,579 +0,0 @@ - - - - NAnt.MSNetTasks - - - - - Disassembles any portable executable (PE) file that contains - intermediate language (IL) code. - - - - Files are only disassembled if the input file is newer than the output - file, or if the output file does not exist. However, you can - explicitly force files to be disassembled with the - attribute. - - - A can be used to select files to disassemble. - To use a , the - attribute must be set. The file name of the output file will be equal - to the file name of the input file, but with extension ".il". - - - - - Disassembles helloworld.exe to helloworld.il. - - - - ]]> - - - - - Disassembles a set of PE files into the specified directory. - - - - - - - - - ]]> - - - - - - Checks whether the task is initialized with valid attributes. - - - - - Disassembles the PE file(s). - - - - - Disassembles the specified PE file. - - The PE file to disassemble. - - - - Determines the full path and extension for the output file. - - - A that represents the PE file - file for which the corresponding output file should be determined. - - - A that represents the full path - for the output file. - - The path of the output file could not be determined. - - - - Writes the disassembler options. - - - - - Writes an option using the default output format. - - - The to which the disassembler options - should be written. - - - A that contains the name of the - option which should be passed to the disassembler. - - - - - Writes an option and its value using the default output format. - - - The to which the disassembler options - should be written. - - - A that contains the name of the - option which should be passed to the disassembler. - - - A that contains the value of the - option which should be passed to the disassembler. - - - - - Determines whether or not disassembling is needed. - - - if disassembling is needed; otherwise, - . - - - - - Specifies whether or not the disassembler should combine the - /HEADER, /BYTE, and /TOKENS options. The default - is . - - - if the disassembler should combine the - /HEADER, /BYTE, and /TOKENS options; - otherwise, . The default is - . - - - - Corresponds to the /ALL flag. - - - - - - Specifies whether or not the disassembler should generate the - IL stream bytes (in hexadecimal notation) as instruction comments. - The default is . - - - if the IL stream bytes should be generated - as instruction comments; otherwise, . The - default is . - - - - Corresponds to the /BYTE flag. - - - - - - Instructs NAnt to rebuild the output file regardless of the file - timestamps. The default is . - - - if the output file should be rebuilt - regardless of its timestamps; otherwise . - The default is . - - - - - Specifies whether or not the disassembler should include PE header - information and runtime header information in the output. The default - is . - - - if PE header information and runtime header - information should be included in the output; otherwise, - . The default is . - - - - Corresponds to the /HEADER flag. - - - - - - Specifies the PE file to disassemble. - - - A that represents the PE file - to disassemble. - - - - - Specifies whether or not the disassembler should include - references to original source lines. The default is . - - - if references to original source lines - should be included; otherwise, . The - default is . - - - - Corresponds to the /LINENUM flag. - - - - - - Specifies whether or not the disassembler should suppress ILASM - code output. The default is . - - - if ILASM code output should be suppresses; - otherwise, . The default is - . - - - - Corresponds to the /NOIL flag. - - - - - - Specifies whether or not the disassembler should disassemble - public items only. This is a shortcut for ="pub". - The default is . - - - if only public items should be - disassembled; otherwise, . The default is - . - - - - Corresponds to the /PUBONLY flag. - - - - - - Specifies whether or not the disassembler should enclose all names - in single quotation marks. By default, only names that don't match - the ILASM definition of a simple name are quoted. The default is - . - - - if all names should be enclosed in single - quotation marks; otherwise, . The default - is . - - - - Corresponds to the /QUOTEALLNAMES flag. - - - - - - Specifies whether or not the disassembler should generate - structured exception handling clauses in canonical (label) form. - The default is . - - - if structured exception handling clauses - should be generated in canonical form; otherwise, - . The default is . - - - - Corresponds to the /RAWEH flag. - - - - - - Specifies whether or not the disassembler should generate - original source lines as comments. The default is . - - - if original source lines should be - generated as comments; otherwise, . - The default is . - - - - Corresponds to the /SOURCE flag. - - - - - - Specifies whether or not the disassembler should generate metadata - token values as comments. The default is . - - - if metadata token values should be - generated as comments; otherwise, . The - default is . - - - - Corresponds to the /TOKENS flag. - - - - - - Specifies whether or not the disassembler should use the UNICODE - encoding when generating the output. The default is ANSI. - - - if the output should be generated using - the UNICODE encoding; otherwise, . The - default is . - - - - Corresponds to the /UNICODE flag. - - - - - - Specifies whether or not the disassembler should use the UTF-8 - encoding when generating the output. The default is ANSI. - - - if the output should be generated using - the UTF-8 encoding; otherwise, . The - default is . - - - - Corresponds to the /UTF8 flag. - - - - - - Instructs the disassembler to disassemble the specified item only. - - - A that specifies the item to - disassemble. - - - - Corresponds to the /ITEM flag. - - - - - - Instructs the disassembler to disassemble only the items with the - specified visibility. Possible values are PUB, PRI, - FAM, ASM, FAA, FOA, PSC, - or any combination of them separated by +. - - - A that contains the visibility - suboptions. - - - - Corresponds to the /VISIBILITY flag. - - - - - - Specifies the name of the output file created by the disassembler. - - - A that represents the name of - the output file. - - - - Corresponds to the /OUT flag. - - - - - - Specifies the directory to which outputs will be stored. - - - A that represents the - directory to which outputs will be stored. - - - - - Specifies a list of PE files to disassemble. To use a , - the attribute must be specified. - - - A that represents the set - of PE files to disassemble. - - - - - The command-line arguments for the external program. - - - Overridden to ensure the <arg> elements would not be exposed - to build authors. - - - - - Gets the command-line arguments for the external program. - - - A that contains the command-line - arguments for the external program. - - - - - Allows a Windows service to be controlled. - - - Starts the World Wide Web Publishing Service on the local computer. - - - ]]> - - - - Stops the Alerter service on computer 'MOTHER'. - - - ]]> - - - - - - Initializes a new instance of the - class. - - - - - Peforms actions on the service in order to reach the desired status. - - - - - Determines the desired status of the service based on the action - that should be performed on it. - - - The that should be reached - in order for the to be considered successful. - - - - - Starts the service identified by and - . - - instance for controlling the service identified by and . - - - - Stops the service identified by and - . - - instance for controlling the service identified by and . - - - - Restarts the service identified by and - . - - instance for controlling the service identified by and . - - - - Pauses the service identified by and - . - - instance for controlling the service identified by and . - - - - Continues the service identified by and - . - - instance for controlling the service identified by and . - - - - Holds the name of the service that should be controlled. - - - - - Holds the name of the computer on which the service resides. - - - - - Holds the action that should be performed on the service. - - - - - Holds the time, in milliseconds, the task will wait for a service - to reach the desired status. - - - - - The name of the service that should be controlled. - - - - - The name of the computer on which the service resides. The default - is the local computer. - - - - - The action that should be performed on the service. - - - - - The time, in milliseconds, the task will wait for the service to - reach the desired status. The default is 5000 milliseconds. - - - - - Defines the actions that can be performed on a service. - - - - - Starts a service. - - - - - Stops a service. - - - - - Restarts a service. - - - - - Pauses a running service. - - - - - Continues a paused service. - - - - diff --git a/bin/Nant/NAnt.NUnit.dll b/bin/Nant/NAnt.NUnit.dll deleted file mode 100644 index e24204399..000000000 Binary files a/bin/Nant/NAnt.NUnit.dll and /dev/null differ diff --git a/bin/Nant/NAnt.NUnit.xml b/bin/Nant/NAnt.NUnit.xml deleted file mode 100644 index 39d46d6b4..000000000 --- a/bin/Nant/NAnt.NUnit.xml +++ /dev/null @@ -1,353 +0,0 @@ - - - - NAnt.NUnit - - - - - Carries data specified through the formatter element. - - - - - Gets or sets the type of the formatter. - - The type of the formatter. - - - - Gets or sets a value indicating whether output should be persisted - to a file. - - - if output should be written to a file; otherwise, - . The default is . - - - - - Gets or sets the extension to append to the output filename. - - The extension to append to the output filename. - - - - Gets or sets the directory where the output file should be written - to, if is . - - - The directory where the output file should be written to. - - - - - Contains a strongly typed collection of objects. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - 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. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - The built-in formatter types. - - - - - A plaintext formatter. - - - - - An XML formatter. - - - - - Represents the FormatterElement of the NUnit task. - - - - - Type of formatter. - - - - - Extension to append to the output filename. - - - - - Determines whether output should be persisted to a file. The default - is . - - - - - Specifies the directory where the output file should be written to, - if is . If not - specified, the output file will be written to the directory where - the test module is located. - - - - - Gets the underlying for the element. - - - - - Contains a strongly typed collection of objects. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - 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. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - diff --git a/bin/Nant/NAnt.NUnit1Tasks.dll b/bin/Nant/NAnt.NUnit1Tasks.dll deleted file mode 100644 index 6f0086f1d..000000000 Binary files a/bin/Nant/NAnt.NUnit1Tasks.dll and /dev/null differ diff --git a/bin/Nant/NAnt.NUnit1Tasks.xml b/bin/Nant/NAnt.NUnit1Tasks.xml deleted file mode 100644 index 941273b91..000000000 --- a/bin/Nant/NAnt.NUnit1Tasks.xml +++ /dev/null @@ -1,538 +0,0 @@ - - - - NAnt.NUnit1Tasks - - - - - The whole test suite started. - - - - - The whole test suite ended. - - - - - Sets the the formatter is supposed to write - its results to. - - - - - Contains a strongly typed collection of objects. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - 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. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Prints information about running tests directly to the build log. - - - - Not used, all output goes to Log class. - - - Called when the whole test suite has started. - - - Called when the whole test suite has ended. - - - Convert a stack trace line into something that can be clicked on in an IDE output window. - The StackTrace string, see . - The string that gets appended to the end of file(line): portion. - - - - Runs tests using the NUnit V1.0 framework. - - - - See the NUnit home page for more - information. - - - The or - attributes are only used to stop more than one test suite to stop - running. If any test suite fails a build error will be thrown. - Set to to - ignore test errors and continue build. - - - - - Run tests in the MyProject.Tests.dll assembly. - - - The test results are logged in results.xml and results.txt - using the and - formatters, respectively. - - - - - - - - ]]> - - - - - - Stops running tests when a test causes an error. The default is - . - - - Implies haltonfailure. - - - - - Stops running tests if a test fails (errors are considered failures - as well). The default is . - - - - - Cancel the individual tests if they do not finish in the specified - time (measured in milliseconds). Ignored if fork is disabled. - - - - - Tests to run. - - - - - Formatters to output results of unit tests. - - - - - Represents a test element of an . - - - - - Base name of the test result. The full filename is determined by this - attribute and the extension of formatter. - - - - - Directory to write the reports to. - - - - - Class name of the test. - - - - - Assembly to load the test from. - - - - - Run the tests in a separate . - - - - - Stop the build process if an error occurs during the test run. - - - - - Stop the build process if a test fails (errors are considered failures - as well). - - - - - The application configuration file to use for the NUnit test domain. - - - - - Contains a strongly typed collection of objects. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - 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. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Carries data specified through the test element. - - - - - Determines if the unit test needs running. - - - if unit test needs running, otherwise, - . - - - - Determines if the test needs running by looking at the date stamp - of the test assembly and the test results log. - - - - - - Runs a Suite extracted from a TestCase subclass. - - - - - Creates the formatters to be used when running this test. - - - - - Returns the output file or null if does not use a file. - - - - - Returns the test suite from a given class. - - - The assemblyQualifiedName parameter needs to be in form: - "full.qualified.class.name,Assembly" - - - - - Gets the collection of registered formatters. - - Collection of registered formatters. - - - - Gets the result of the test. - - The result of the test. - - - - Prints information about running tests in plain text. - - - - Sets the Writer the formatter is supposed to write its results to. - - - Called when the whole test suite has started. - - - Called when the whole test suite has ended. - - - Convert a stack trace line into something that can be clicked on in an IDE output window. - The StackTrace string, see . - The string that gets appended to the end of file(line): portion. - - - - Decorates NUnits with extra information such as - run-time. - - - - - Initializes a new instance of the - class. - - - - - Gets or sets the total run-time of a test. - - The total run-time of a test. - - - - Prints detailed information about running tests in XML format. - - - - - Initializes a new instance of the - class. - - - - - Sets the the formatter is supposed to - write its results to. - - - - - Called when the whole test suite has started. - - - - - Called when the whole test suite has ended. - - - - diff --git a/bin/Nant/NAnt.NUnit2Tasks.dll b/bin/Nant/NAnt.NUnit2Tasks.dll deleted file mode 100644 index 5663df31d..000000000 Binary files a/bin/Nant/NAnt.NUnit2Tasks.dll and /dev/null differ diff --git a/bin/Nant/NAnt.NUnit2Tasks.xml b/bin/Nant/NAnt.NUnit2Tasks.xml deleted file mode 100644 index 4e16c35bc..000000000 --- a/bin/Nant/NAnt.NUnit2Tasks.xml +++ /dev/null @@ -1,568 +0,0 @@ - - - - NAnt.NUnit2Tasks - - - - - Controls the categories of tests to execute using the . - - - - Only include test cases and fixtures that require no internet access. - - - - - - ]]> - - - - - Exclude test cases and fixtures that are known to fail. - - - - - - ]]> - - - - - - Specifies a list of categories to include. - - - - - Specifies a list of categories to exclude. - - - - - Represents a certain group of test cases or fixtures. - - - - - A name of a category, or comma-separated list of names. - - - - - If then the category will be processed; - otherwise, skipped. The default is . - - - - - If then the category will be skipped; - otherwise, processed. The default is . - - - - - Contains a collection of elements. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Returns a comma-delimited list of categories. - - - A comma-delimited list of categories, or an empty - if there are no categories. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Determines whether a with the specified - value is in the collection. - - The argument value to locate in the collection. - - if a with value - is found in the collection; otherwise, - . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - 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. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Gets the with the specified name. - - The name of the to get. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Contains a strongly typed collection of objects. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - 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. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Runs tests using the NUnit V2.2 framework. - - - - The attribute is only useful when more - than one test suite is used, and you want to continue running other - test suites although a test failed. - - - Set to to - ignore any errors and continue the build. - - - In order to run a test assembly built with NUnit 2.0 or 2.1 using - , you must add the following node to your - test config file : - - - - ... - - - - - - - - - - ... - - ]]> - - - See the NUnit home page for more - information. - - - - - Run tests in the MyProject.Tests.dll assembly. - - - - - - - ]]> - - - - - Only run tests that are not known to fail in files listed in the tests.txt - file. - - - - - - - - - - - - - - ]]> - - - - - - Runs the tests and sets up the formatters. - - - - - Stop the test run if a test fails. The default is . - - - - - Tests to run. - - - - - Formatters to output results of unit tests. - - - - - Represents a test element of an . - - - - - Name of the assembly to search for tests. - - - - - Name of a specific testfixture to run. If not specified then all - testfixtures are run. - - - - - Assemblies to include in test. - - - - - Categories of test cases to include or exclude. - - - - - Build fails on failure. The default is . - - - - - XSLT transform file to use when using the - formatter. - - - - - The application configuration file to use for the NUnit test domain. - If not specified, NAnt will try to use a configuration name matching - the file name of the assembly with extension ".config". - - - - - Gets all assemblies specified for these tests. - - - All assemblies specified for these tests. - - - - - Custom TestDomain, similar to the one included with NUnit, in order - to workaround some limitations in it. - - - - - Initializes a new instance of the - class. - - - - - Runs a single testcase. - - The test assembly. - The application configuration file for the test domain. - - The result of the test. - - - - - Helper class called when an assembly resolve event is raised. - - - - - Initializes an instanse of the - class. - - - - - Called back when the CLR cannot resolve a given assembly. - - The source of the event. - A that contains the event data. - - The nunit.framework we know to be in NAnts bin directory, if - that is the assembly that needs to be resolved; otherwise, - . - - - - - Occurs when an assembly is loaded. The loaded assembly is added - to the assembly cache. - - The source of the event. - An that contains the event data. - - - - Holds the list of directories that will be scanned for missing - assembly references. - - - - - Holds the loaded assemblies. - - - - diff --git a/bin/Nant/NAnt.SourceControlTasks.dll b/bin/Nant/NAnt.SourceControlTasks.dll deleted file mode 100644 index 465c18db6..000000000 Binary files a/bin/Nant/NAnt.SourceControlTasks.dll and /dev/null differ diff --git a/bin/Nant/NAnt.SourceControlTasks.xml b/bin/Nant/NAnt.SourceControlTasks.xml deleted file mode 100644 index 8da09a128..000000000 --- a/bin/Nant/NAnt.SourceControlTasks.xml +++ /dev/null @@ -1,1283 +0,0 @@ - - - - NAnt.SourceControlTasks - - - - - A base class for creating tasks for executing CVS client commands on a - CVS repository. - - - - - A base class for creating tasks for executing CVS client commands on a - CVS repository. - - - - - Name of the environmental variable specifying a users' home - in a *nix environment. - - - - - Used on windows to specify the location of application data. - - - - - The environment variable that holds path information. - - - - - The environment variable that holds the location of the - .cvspass file. - - - - - Property name used to specify the source control executable. This is - used as a readonly property. - - - - - Initializes a new instance of the - class. - - - - - Build up the command line arguments, determine which executable is being - used and find the path to that executable and set the working - directory. - - The process to prepare. - - - - Adds a new global option if none exists. If one does exist then - the use switch is toggled on or of. - - The common name of the option. - The option value or command line switch - of the option. - true if the option should be - appended to the commandline, otherwise false. - - - - Adds a new command option if none exists. If one does exist then - the use switch is toggled on or of. - - The common name of the option. - The option value or command line switch - of the option. - true if the option should be - appended to the commandline, otherwise false. - - - - Set up the environment variables for a process. - - A process to setup. - - - - Append the files specified in the fileset to the command line argument. - Files are changed to use a relative path from the working directory - that the task is spawned in. - - - - - Derive the location of the version control system from the environment - variable PATH. - - The file information of the version control system, - or null if this cannot be found. - - - - The name of the passfile, overriden for each version control system (VCS). - - - - - The path to the specific home directory of the version control system, - this can be where the binary files are kept, or other app - information. - - - - - The environment variable that defines where the version control system - (VCS) home variable is kept. - - - - - The name of the version control system (VCS) executable file. - - - - - - The root variable contains information on how to locate a repository. - Although this information is in different formats it typically must - define the following: - - server location - protocol used to communicate with the repository - repository location on the server - project location in the repository - - - - - - - Destination directory for the local sandbox. If destination is not specified - then the current directory is used. - - - Root path of the local sandbox. - - - - Root path of the local sandbox. - - - - - - The password for logging in to the repository. - - - The password for logging in to the repository. - - - - - The full path to the cached password file. If not specified then the - environment variables are used to try and locate the file. - - - - - Holds a collection of globally available options. - - - - - A collection of options that can be used to modify the default behavoir - of the version control commands. See the sub-tasks for implementation - specifics. - - - - - Command-line arguments for the program. The command line arguments are used to specify - any cvs command options that are not available as attributes. These are appended - after the command itself and are additive to whatever attributes are currently specified. - - - <cvs-checkout cvsroot=":pserver:anonymous@cvs.sourceforge.net:/cvsroot/nant" - module="nant" - destination="e:\test\merillcornish\working" - readonly="true" - quiet="true" - commandline="-n" - cvsfullpath="C:\Program Files\TortoiseCVS\cvs.exe" - /> -
            - Produces the cvs command: - c:\Program Files\TortoiseCVS\cvs.exe -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/nant -q checkout -n nant -
            -
            - - - The name of the command that is going to be executed. - - - - - Used to specify the version control system (VCS) files that are going - to be acted on. - - - - - The executable to use for ssh communication. - - - - - The environment name for the ssh variable. - - - - - The name of the version control system executable. - - - - - Get the command line arguments for the task. - - - - - Default value for the recursive directive. The default is - . - - - - - Default value for the quiet command. - - - - - Default value for the really quiet command. - - - - - An environment variable that holds path information about where - cvs is located. - - - - - Name of the password file that cvs stores pserver - cvsroot/ password pairings. - - - - - The default compression level to use for cvs commands. - - - - - The default use of binaries, defaults to use sharpcvs. - - - - - The name of the cvs executable. - - - - - The temporary name of the sharpcvslib binary file, to avoid - conflicts in the path variable. - - - - - Environment variable that holds the executable name that is used for - ssh communication. - - - - - Property name used to specify on a project level whether sharpcvs is - used or not. - - - - - Initializes a new instance of the - class. - - - - - Build up the command line arguments, determine which executable is being - used and find the path to that executable and set the working - directory. - - The process to prepare. - - - - Override to append any commands before the modele and files. - - - - - Append the command line options or commen names for the options - to the generic options collection. This is then piped to the - command line as a switch. - - - - - Add the given argument to the command line options. Note that are not explicitly - quoted are split into seperate arguments. This is to resolve a recent issue - with quoting command line arguments. - - - - - - The environment name for the ssh variable. - - - - - The name of the cvs binary, or cvs.exe at the time this - was written. - - - - - The name of the pass file, or .cvspass at the time - of this writing. - - - - - The name of the version control system specific home environment - variable. - - - - - Specify if the module is needed for this cvs command. It is - only needed if there is no module information on the local file - system. - - - - - Used to specify the version control system (VCS) files that are going - to be acted on. - - - - - Get the cvs file set. - - - - - The name of the cvs executable. - - - - - The full path to the cvs binary used. The cvs tasks will attempt to - "guess" the location of your cvs binary based on your path. If the - task is unable to resolve the location, or resolves it incorrectly - this can be used to manually specify the path. - - - A full path (i.e. including file name) of your cvs binary: - On Windows: c:\vcs\cvs\cvs.exe - On *nix: /usr/bin/cvs - - - - - - The cvs root variable has the following components: - - - [protocol]:[username]@[servername]:[server path] -
              -
            • protocol: ext, pserver, ssh (sharpcvslib); if you are not using sharpcvslib consult your cvs documentation.
            • -
            • username: [username]
            • -
            • servername: cvs.sourceforge.net
            • -
            • server path: /cvsroot/nant
            • -
            -
            -
            - - NAnt anonymous cvsroot: - - :pserver:anonymous@cvs.sourceforge.net:/cvsroot/nant - - -
            - - - The module to perform an operation on. - - - The module to perform an operation on. This is a normal file/folder - name without path information. - - - In NAnt the module name would be: - nant - - - - - - if the SharpCvsLib binaries that come bundled - with NAnt should be used to perform the cvs commands, - otherwise. - - - You may also specify an override value for all cvs tasks instead - of specifying a value for each. To do this set the property - sourcecontrol.usesharpcvslib to . - - - If you choose not to use SharpCvsLib to checkout from cvs you will - need to include a cvs.exe binary in your path. - - - - To use a cvs client in your path instead of sharpcvslib specify - the property: - >property name="sourcecontrol.usesharpcvslib" value="false"< - - The default settings is to use sharpcvslib and the setting closest - to the task execution is used to determine which value is used - to execute the process. - - For instance if the attribute usesharpcvslib was set to false - and the global property was set to true, the usesharpcvslib is - closes to the point of execution and would be used and is false. - Therefore the sharpcvslib binary would NOT be used. - - - - - The executable to use for ssh communication. - - - - - Indicates if the output from the cvs command should be supressed. - The default is . - - - - - Indicates if the output from the cvs command should be stopped. - The default is . - - - - - if the sandbox files should be checked out in - read only mode. The default is . - - - - - if the sandbox files should be checked out in - read/write mode. The default is . - - - - - Compression level to use for all net traffic. This should be a value from 1-9. -
            -
            - NOTE: This is not available on sharpcvslib. -
            -
            - - - Produces an XML report that represents the cvs changes from the given - start day, to a given end date. - - - Report changes in NAnt from 1st of June 2004 until 25th of July 2004. - - - ]]> - - - - - - The command being executed. - - - - - Name of the xml file that will contain the cvs log information. - - - - - The earliest change to use in the cvs log command. - - - - - The latest date to use in the cvs log command. - - - - - The cvs command to execute. - - - - - Override use of sharpcvslib, needs to be true. - - - - - - The cvs root variable has the following components: - - - [protocol]:[username]@[servername]:[server path] -
              -
            • protocol: ext, pserver, ssh (sharpcvslib); if you are not using sharpcvslib consult your cvs documentation.
            • -
            • username: [username]
            • -
            • servername: cvs.sourceforge.net
            • -
            • server path: /cvsroot/nant
            • -
            -
            - - If the cvsroot is not specified then the directory specified by the - attribute - is searched for CVS\Root. - -
            - - NAnt anonymous cvsroot: - - :pserver:anonymous@cvs.sourceforge.net:/cvsroot/nant - - -
            - - - Checks out a CVS module to the required directory. - - - Checkout NAnt. - - - ]]> - - - - - Checkout NAnt revision named 0_85 to the - folder c:\src\nant\v0.85. - - - - ]]> - - So the nant module tagged with revision 0_85 will be checked - out in the folder v0.85 under the working/ destination directory. -
            This could be used to work on different - branches of a repository at the same time.
            -
            - - - Checkout NAnt with specified revision date to the - folder c:\src\nant\2003_08_16. - - - - ]]> - - -
            - - - The command being executed. - - - - - Initializes a new instance of the class. - - - - - Specify the revision to checkout. This corresponds to the "sticky-tag" - of the file. - - - - - Sticky tag or revision to checkout. - - - - - Specify the revision date to checkout. The date specified is validated - and then passed to the cvs binary in a standard format recognized by - cvs. - - - - - Specify a directory name to replace the module name. Valid names - include any valid filename, excluding path information. - - - - - Specify a directory name to replace the module name. Valid names - include any valid filename, excluding path information. - - - - - The name of the cvs command that is going to be executed. - - - - - Executes the cvs login command which appends or updates an entry to the - specified .cvspass file. - - - Update .cvspass file to include the NAnt anonymous login. - - - ]]> - - - - - - Ensures all information is available to execute the . - - - - - Update the .cvspass file with the given password. If the passfile - is not specified then the default search locations are used: - - CVS_PASSFILE/.cvspass - HOME/.cvspass - USERPROFILE/.cvspass TODO: Confirm that this is valid - behavior or if it is going to give problems with the - cvsnt implementation. - - - - - - Password to append or update to the .cvspass file. - - - - - The full path to the .cvspass file. The default is ~/.cvspass. - - - - - - The current working directory. - - - - - The repository root string. - - - - - Executes the cvs command specified by the command attribute. - - - Checkout NAnt. - - - ]]> - - - - - - The cvs command to execute. - - - - - Specify if the module is needed for this cvs command. - - - - - Exports a cvs module in preperation for a release (i.e. the CVS version - folders are not exported). - - - Export the most recent NAnt sources from cvs. - - - ]]> - - - - - Export NAnt revision named your_favorite_revision_here to the - folder c:\src\nant\replacement_for_module_directory_name. - - **NOTE**: filesets names for the export task must be - prefixed with the module name. This is different than other tasks. - - - - - - - - - ]]> - - - - - - The command being executed. - - - - - Create a new instance of the . - - - The following values are set by default: -
              -
            • Recursive:
            • -
            -
            -
            - - - No shortening. Do not shorten module paths if -d specified. - - - - - Indicates whether the head revision should be used if the revison specified by - or the tags are not - found. The default is . - - - if the specified tag should be moved; - otherwise, . The default is . - - - - - If a directory is specified indicates whether sub-directories should - also be processed. - - - if the sub-directories should be tagged; - otherwise, . The default is . - - - - - Specify the revision to update the file to. This corresponds to the "sticky-tag" - of the file. - - - - - Specify the revision date to update to. The version of the file that - existed at the date specified is retrieved. - - - A valid date time value, which is then converted to a format that - cvs can parse. - - - - - Specify a directory name to replace the module name. Valid names - include any valid filename, excluding path information. - - - - - The export command name for the cvs client. - - - - - Tags all sources in the remote repository with a given tag. - - - - Unlike tag, the rtag command acts only on sources that are in the repository. - Any modified sources on the local file system will NOT be tagged with this - command, so a commit should be performed before an rtag is done. - - - NOTE: Although a working directory is not necessary to perform the command - one must be specified in order to remain in compliance with the cvs library. - - - - Tag NAnt sources remotely. - - - ]]> - - - - Remove a tag from the remote repository. - - - ]]> - - - - - - Initializes a new instance of the - class. - - - - - Append the tag information to the commandline. - - - - - The name of the tag to assign or remove. - - - The name of the tag to assign or remove. - - - - - Indicates whether the tag specified in should - be removed or not. - - - if the specified tag should be removed; - otherwise, . The default is . - - - - - Indicates whether the tag specified in should - be moved to the current file revision. If the tag does not exist - then it is created. - - - if the specified tag should be moved; - otherwise, . The default is . - - - - - If a directory is specified indicates whether sub-directories should - also be processed. - - - if the sub-directories should be tagged; - otherwise, . The default is . - - - - - Indicates the repository that is acted on - for the tag command. Note if is - then the tag specified is moved to the revision - of the file on the HEAD of the branch specified. - - - The tag (or more likely) branch that should be used to apply the new tag. - - - - - Indicates the revision date of the file that the tag should be - applied to. - - - A valid date which specifies the revision point that the tag will - be applied to. - - - - - Indicates whether the head revision should be used if the - or the tags are not - found. - - - if the specified tag should be moved; - otherwise, . The default is . - - - - - The name of the cvs command that is going to be executed. - - - - - Tags all local sources with the specified tag. - - - - This differs from the - in that it acts on references to the cvs files - contained in your local filesystem. As such the sticky tags and local - revisions can be considered in commits. It also allows you to verify that - all local files have been checked in before a tag is performed. - - - - Tag NAnt sources remotely. - - - ]]> - - - - Remove a tag from the remote repository. - - - ]]> - - - - - - Cvs command to be executed. - - - - - Initializes a new instance of the - class. - - - - - Append the tag information to the commandline. - - - - - The name of the tag to assign or remove. - - - The name of the tag to assign or remove. - - - - - Indicates whether the tag specified in should - be removed or not. - - - if the specified tag should be removed; - otherwise, . The default is . - - - - - Indicates whether the tag specified in should - be moved to the current file revision. If the tag does not exist - then it is created. - - - if the specified tag should be moved; - otherwise, . The default is . - - - - - If a directory is specified indicates whether sub-directories should - also be processed. - - - if the sub-directories should be tagged; - otherwise, . The default is . - - - - - Indicates the repository that is acted on - for the tag command. Note if is - then the tag specified is moved to the revision - of the file on the HEAD of the branch specified. - - - The tag (or more likely) branch that should be used to apply the new tag. - - - - - Indicates the revision date of the file that the tag should be - applied to. - - - A valid date which specifies the revision point that the tag will - be applied to. - - - - - Indicates whether the head revision should be used if the revision specified by - or the tags are not - found. - - - if the specified tag should be moved; - otherwise, . The default is . - - - - - Indicates whether the head revision should be used if the - or the tags are not - found. - - - if the specified tag should be moved; - otherwise, . The default is . - - - - - The name of the cvs command that is going to be executed. - - - - - Not used - - - - - Specify if the module is needed for this cvs command. It is - only needed if there is no module information on the local file - system. - - - - - Updates a CVS module in a local working directory. - - - Update nant. - - - ]]> - - - - - Update your NAnt revision named your_favorite_revision_here in - the folder c:\src\nant\replacement_for_module_directory_name. - - - - - - - - ]]> - - - - - - The command being executed. - - - - - Initializes a new instance of the - class. - - - Sets the build directory and prune empty directory properties to - . - - - - - If . new directories will be created on the local - sandbox. The default is . - - - - - If empty directories copied down from the - remote repository will be removed from the local sandbox. - The default is . - - - - - If the local copy of the file will be - overwritten with the copy from the remote repository. The default - is . - - - - - Specifies if the command should be executed recursively. The - default is . - - - The -R option is on by default in cvs. - - - - - Specify the revision to update the file to. This corresponds to the - "sticky-tag" of the file. - - - - - Sticky tag or revision to update the local file to. - - - A valid cvs tag. - - - - - Specify the revision date to update to. The version of the file that - existed at the date specified is retrieved. - - - A valid date time value, which is then converted to a format that - cvs can parse. - - - - - Specify if the module is needed for this cvs command. It is - only needed if there is no module information on the local file - system. - - - - - The name of the cvs command that is going to be executed. - - - - - A is a with extra - attributes useful in the context of the . - - - - - Initialize the object and locate the .cvsignore - files to add to the exclude list. - - - - - Indicates whether the entires in the .cvsignore should be used to limit the - file list; to exclude files in .cvsignore, otherwise - . The default is . - - -
            -
            diff --git a/bin/Nant/NAnt.VSNetTasks.dll b/bin/Nant/NAnt.VSNetTasks.dll deleted file mode 100644 index d83a2223b..000000000 Binary files a/bin/Nant/NAnt.VSNetTasks.dll and /dev/null differ diff --git a/bin/Nant/NAnt.VSNetTasks.xml b/bin/Nant/NAnt.VSNetTasks.xml deleted file mode 100644 index 7cdc6196e..000000000 --- a/bin/Nant/NAnt.VSNetTasks.xml +++ /dev/null @@ -1,3912 +0,0 @@ - - - - NAnt.VSNetTasks - - - - - Analyses Microsoft Visual Studio .NET 2003 (Everett) solution files. - - - - - Gets the project file of the project with the given unique identifier. - - The unique identifier of the project for which the project file should be retrieves. - - The project file of the project with the given unique identifier. - - No project with unique identifier could be located. - - - - Logs a message with the given priority. - - The message priority at which the specified message is to be logged. - The message to be logged. - - The actual logging is delegated to the underlying task. - - - - - Logs a message with the given priority. - - The message priority at which the specified message is to be logged. - The message to log, containing zero or more format items. - An array containing zero or more objects to format. - - The actual logging is delegated to the underlying task. - - - - - Loads the projects from the file system and stores them in an - instance variable. - - instance to use to determine whether an assembly is located in the Global Assembly Cache. - instance to use to determine location and references of assemblies. - TODO - A project GUID in the solution file does not match the actual GUID of the project in the project file. - - - - Translates a project path, in the form of a relative file path or - a URL, to an absolute file path. - - The directory of the solution. - The project path to translate to an absolute file path. - - The project path translated to an absolute file path. - - - - - Converts assembly references to projects to project references, adding - a build dependency.c - - The to analyze. - The solution configuration that is built. - containing list of projects that have been built. - containing list of projects that failed to build. - - - - Determines whether any of the project dependencies of the specified - project still needs to be built. - - The to analyze. - containing list of projects that have been built. - - if one of the project dependencies has not - yet been built; otherwise, . - - - - - Gets or sets the in memory representation of the project. - - - The in memory representation of the project, or - if the project is not (yet) loaded. - - - This property will always be for - projects that are not supported. - - - - - Contains a collection of elements. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - - The position into which the new element was inserted. - - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Determines whether a with the specified - GUID is in the collection, using a case-insensitive lookup. - - The GUID to locate in the collection. - - if a with GUID - is found in the collection; otherwise, - . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - 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. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Gets the with the specified GUID. - - The GUID of the to get. - - Performs a case-insensitive lookup. - - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Returns a number representing how much this file fits this project type. - - - - - - This enables the override in other providers. Do not return big numbers, mainly when compring only on filename. - - - - - Analyses Microsoft Visual Studio .NET 2002 (Rainier) solution files. - - - - - Compiles VS.NET solutions (or sets of projects), automatically determining - project dependencies from inter-project references. - - - - This task support the following projects: - - - - Visual Basic .NET - - - Visual C# .NET - - - Visual J# .NET - - - Visual C++ .NET - - - - Right now, only Microsoft Visual Studio .NET 2002 and 2003 solutions - and projects are supported. Support for .NET Compact Framework projects - is also not available at this time. - - - The also supports the model of referencing - projects by their output filenames, rather than referencing them inside - the solution. It will automatically detect the existance of a file - reference and convert it to a project reference. For example, if project - "A" references the file in the release output directory of - project "B", the will automatically - convert this to a project dependency on project "B" and will - reference the appropriate configuration output directory at the final - build time (ie: reference the debug version of "B" if the - solution is built as debug). - - - The expects all project files to be valid - XML files. - -

            Resx Files

            - - When building a project for a down-level target framework, special care - should be given to resx files. Resx files (can) contain references to - a specific version of CLR types, and as such are only upward compatible. - - - For example: if you want to be able to build a project both as a .NET 1.0 - and .NET 1.1 assembly, the resx files should only contain references to - .NET 1.0 CLR types. Failure to do this may result in a - failure at runtime on machines with only the .NET Framework 1.0 installed. - -
            - - - Compiles all of the projects in test.sln, in release mode, in - the proper order. - - - - ]]> - - - - - Compiles all of the projects in projects.txt, in the proper - order. - - - - - - - - ]]> - - - - - Compiles projects A, B and C, using the output of project X as a - reference. - - - - - - - - - - - - - ]]> - - - - - Compiles all of the projects in the solution except for project A. - - - - - - - - ]]> - - - - - Compiles all of the projects in the solution mapping the specific project at - http://localhost/A/A.csproj to c:\inetpub\wwwroot\A\A.csproj and any URLs under - http://localhost/B/[remainder] to c:\other\B\[remainder]. This allows the build - to work without WebDAV. - - - - - - - - - ]]> - - - - - Compiles all of the projects in the solution placing compiled outputs - in c:\temp. - - - ]]> - - -
            - - - Initializes a new instance of the class. - - - - - Expands the given macro. - - The macro to expand. - - The expanded macro or if the macro is not - supported. - - The macro cannot be expanded. - - - - Builds the list of folders that should be scanned for assembly - references. - - - The list of folders that should be scanned for assembly references. - - - - - The projects to build. - - - - - The projects to scan, but not build. - - - These projects are used to resolve project references and are - generally external to the solution being built. References to - these project's output files are converted to use the appropriate - solution configuration at build time. - - - - - The name of the VS.NET solution file to build. - - - - The can be used instead to supply a list - of Visual Studio.NET projects that should be built. - - - - - - The name of the solution configuration to build. - - - - Generally release or debug. Not case-sensitive. - - - - - - The directory where compiled targets will be placed. This - overrides path settings contained in the solution/project. - - - - - WebMap of URL's to project references. - - - - - Fileset of projects to exclude. - - - - - Set of folders where references are searched when not found in path - from project file (HintPath). - - - - - Includes Visual Studio search folders in reference search path. - The default is . - - - - - Allow the task to use WebDAV for retrieving/compiling the projects within solution. Use of - is preferred over WebDAV. The default is . - - - WebDAV support requires permission changes to be made on your project server. These changes may affect - the security of the server and should not be applied to a public installation. - Consult your web server or the NAnt Wiki documentation for more information. - - - - - Gets the list of folders to scan for assembly references. - - - The list of folders to scan for assembly references. - - - - - Defines how the project is using the ATL library. - - - - - Don't use ATL. - - - - - Use ATL in a Static Library. - - - - - Use ATL in a Shared DLL. - - - - - Defines how the project is using the MFC library. - - - - - Don't use MFC. - - - - - Use MFC in a Static Library. - - - - - Use MFC in a Shared DLL. - - - - - Indicates the possible ways in which precompiled header file use is - specified in a Visual C++ project. - - - The integer values assigned match those specified in the Visual C++ - project file for each setting. - > - - - - Precompiled header file use not specified. - - - - - Don't use a precompiled header file. - - - For further information on the use of this option - see the Microsoft documentation on the C++ compiler flag /Yc. - - - - - Create precompiled header file. - - - For further information on the use of this option - see the Microsoft documentation on the C++ compiler flag /Yc. - - - - - Automatically create precompiled header file if necessary. - - - For further information on the use of this option - see the Microsoft documentation on the C++ compiler flag /Yc. - - - - - Use a precompiled header file. - - - For further information on the use of this option - see the Microsoft documentation on the C++ compiler flag /Yu. - - - - - Represents a single mapping from URL project path to physical project - path. - - - - - Specifies the URL of the project file, or a URL fragment to match. - - - The URL of the project file or the URL fragment to match. - - - - - Specifies the actual path to the project file, or the path fragment - to replace. - - - The actual path to the project file or the path fragment to replace - the URL fragment with. - - - - - Specifies whether the mapping is case-sensitive or not. - - - A boolean flag representing the case-sensitivity of the mapping. Default is . - - - - - Indicates if the URL of the project file should be mapped. - - - if the URL of the project file should be - mapped; otherwise, . - - - - - Indicates if the URL of the project file should not be mapped. - - - if the URL of the project file should not - be mapped; otherwise, . - - - - - Contains a strongly typed collection of - objects. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Find the best matching for the given Uri. - - The value to match against the objects in the collection. - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Determines whether a with the specified - value is in the collection. - - The argument value to locate in the collection. - - if a with value - is found in the collection; otherwise, - . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - 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. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Gets the with the specified value. - - The value of the to get. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Gets the output path of the reference, without taking the "copy local" - setting into consideration. - - The solution configuration that is built. - - The full output path of the reference. - - - - - Gets the complete set of output files of the reference for the - specified configuration. - - The solution configuration that is built. - The set of output files to be updated. - - The key of the case-insensitive is the - full path of the output file and the value is the path relative to - the output directory. - - - - - Gets the complete set of assemblies that need to be referenced when - a project references this component. - - The solution configuration that is built. - - The complete set of assemblies that need to be referenced when a - project references this component. - - - - - Gets the timestamp of the reference. - - The solution configuration that is built. - - The timestamp of the reference. - - - - - Gets a value indicating whether the reference is managed for the - specified configuration. - - The solution configuration that is built. - - if the reference is managed for the - specified configuration; otherwise, . - - - - - Returns the date and time the specified file was last written to. - - The file for which to obtain write date and time information. - - A structure set to the date and time that - the specified file was last written to, or - if the specified file does not - exist. - - - - - Logs a message with the given priority. - - The message priority at which the specified message is to be logged. - The message to be logged. - - The actual logging is delegated to the underlying task. - - - - - Logs a message with the given priority. - - The message priority at which the specified message is to be logged. - The message to log, containing zero or more format items. - An array containing zero or more objects to format. - - The actual logging is delegated to the underlying task. - - - - - Gets a value indicating whether the output file(s) of this reference - should be copied locally. - - - if the output file(s) of this reference - should be copied locally; otherwise, . - - - - - Gets a value indicating whether this reference represents a system - assembly. - - - if this reference represents a system - assembly; otherwise, . - - - - - Gets the project in which the reference is defined. - - - - - Gets a value indicating whether the reference is managed for the - specified configuration. - - The build configuration of the reference. - - . - - - - - Gets the complete set of output files for the specified assembly - and adds them to collection. - - The path of the assembly to get the output files for. - The set of output files to be updated. - - The key of the case-insensitive is the - full path of the output file and the value is the path relative to - the output directory. - - - - - Gets the path of the reference, without taking the "copy local" - setting into consideration. - - The solution configuration that is built. - - The output path of the reference. - - - - - Gets the complete set of output files for the referenced project. - - The solution configuration that is built. - The set of output files to be updated. - - The key of the case-insensitive is the - full path of the output file and the value is the path relative to - the output directory. - - - - - Gets the complete set of assemblies that need to be referenced when - a project references this component. - - The solution configuration that is built. - - The complete set of assemblies that need to be referenced when a - project references this component. - - - - - Gets the timestamp of the reference. - - The solution configuration that is built. - - The timestamp of the reference. - - - - - Resolves an assembly reference. - - - The full path to the resolved assembly, or - if the assembly reference could not be resolved. - - - - - Searches for the given file in all paths in . - - The folders to search. - The file to search for. - - The path of the assembly if was found - in ; otherwise, . - - - - - Resolves an assembly reference in the framework assembly directory - of the target framework. - - The file to search for. - - The full path of the assembly file if the assembly could be located - in the framework assembly directory; otherwise, . - - - - - Resolves an assembly reference using a path relative to the project - directory. - - - The full path of the assembly, or if - is or an - empty . - - - - - Gets a value indicating whether the output file(s) of this reference - should be copied locally. - - - if the output file(s) of this reference - should be copied locally; otherwise, . - - - - - Gets a value indicating whether this reference represents a system - assembly. - - - if this reference represents a system - assembly; otherwise, . - - - - - Base class for all project classes. - - - - - Initializes a new instance of the class. - - - - - Gets the complete set of output files for the project. - configuration. - - The solution configuration that is built. - The set of output files to be updated. - - The key of the case-insensitive is the - full path of the output file and the value is the path relative to - the output directory. - - - - - Gets a value indicating whether building the project for the specified - build configuration results in managed output. - - The build configuration. - - if the project output for the given build - configuration is managed; otherwise, . - - - - - Expands the given macro. - - The macro to expand. - - The expanded macro or if the macro is not - supported. - - - - - Returns the Visual Studio product version of the specified project - XML fragment. - - XML fragment representing the project file. - - The Visual Studio product version of the specified project XML - file. - - - The product version could not be determined. - -or- - The product version is not supported. - - - - - Verifies whether the specified XML fragment represents a valid project - that is supported by this . - - XML fragment representing the project file. - - The XML fragment is not supported by this . - -or- - The XML fragment does not represent a valid project (for this ). - - - - - Prepares the project for being built. - - The solution configuration that is built. - - The default implementation will ensure that none of the output files - are marked read-only. - - - - - Copies the specified file if the destination file does not exist, or - the source file has been modified since it was previously copied. - - The file to copy. - The destination file. - The in which context the operation will be performed. - - - - Logs a message with the given priority. - - The message priority at which the specified message is to be logged. - The message to be logged. - - The actual logging is delegated to the underlying task. - - - - - Logs a message with the given priority. - - The message priority at which the specified message is to be logged. - The message to log, containing zero or more format items. - An array containing zero or more objects to format. - - The actual logging is delegated to the underlying task. - - - - - Gets the Visual Studio product version of the project. - - - The Visual Studio product version of the project. - - - - - Gets the name of the VS.NET project. - - - - - Gets the type of the project. - - - The type of the project. - - - - - Gets the path of the VS.NET project. - - - - - Gets the directory containing the VS.NET project. - - - - - Get the location of the project. - - - - - Get the directory in which intermediate build output that is not - specific to the build configuration will be stored. - - - - For projects, this is defined - as <Project Directory<\obj. - - - For projects, this is defined - as %HOMEPATH%\VSWebCache\<Machine Name>\<Project Directory>\obj. - - - - - - Gets or sets the unique identifier of the VS.NET project. - - - - - Gets a case-insensitive list of project configurations. - - - The key of the is the name of the - configuration and the value is a - instance. - - - - - Gets a list of project configurations that can be build. - - - - Project configurations that are not in this list do not need to be - compiled (unless the project was not loaded through a solution file). - - - The key of the is the name of the - configuration and the value is a - instance. - - - - - - Gets the extra set of output files for the project. - - - The extra set of output files for the project. - - - The key of the case-insensitive is the - full path of the output file and the value is the path relative to - the output directory. - - - - - Gets the set of projects that the project depends on. - - - The set of projects that the project depends on. - - - - - TODO: refactor this !!! - - - - - Gets a value indicating whether building the project for the specified - build configuration results in managed output. - - The solution configuration that is built. - - . - - - - - Prepares the project for being built. - - The solution configuration that is built. - - Ensures the configuration-level object directory exists and ensures - that none of the output files are marked read-only. - - - - - Returns a for launching the compiler - for this project. - - The configuration to build. - The response file for the compiler. - - A for launching the compiler for - this project. - - - - - Returns the project location from the specified project XML fragment. - - XML fragment representing the project file. - - The project location of the specified project XML file. - - - The project location could not be determined. - -or- - The project location is invalid. - - - - - Gets the absolute path of the type library for the project - output. - - The configuration to build. - - The absolute path of the type library for the project output. - - - - - Generates a type library for the specified assembly, registers it. - - The project configuration that is built. - The path of the type library to generate. - - The regasm tool is used to generate the type library. - - - - - Unregister a type library for the specified assembly, and the types - in that assembly. - - The project configuration that is built. - - The regasm tool is used to unregister the type library, and - remove the COM registration for types in the specified assembly. - - - - - Returns containing culture-specific resources. - - - A containing culture-specific resources. - - - The key of the is - and the value is an instance - for that culture. - - - - - Creates and initializes a instance. - - - An initialized instance. - - - - - Returns the Visual Studio product version of the specified project - XML fragment. - - XML fragment representing the project to check. - - The Visual Studio product version of the specified project XML - fragment. - - - The product version could not be determined. - -or- - The product version is not supported. - - - - - Returns the of the specified project - XML fragment. - - XML fragment representing the project to check. - - The of the specified project XML - fragment. - - - The project location could not be determined. - -or- - The project location is invalid. - - - - - Holds a case-insensitive list of source files. - - - The key of the is the full path of the - source file and the value is . - - - - - Gets the default file extension of sources for this project. - - - The default file extension of sources for this project. - - - - - Gets a value indicating if this is a web project. - - - if this is a web project; otherwise, - . - - - If the url of a web project has been mapped to a local path - (using the <webmap> element), then this property will return - for a - project. - - - - - Gets the name of the VS.NET project. - - - - - Gets the path of the VS.NET project. - - - - - Gets the directory containing the VS.NET project. - - - - - Get the location of the project. - - - - - Gets or sets the unique identifier of the VS.NET project. - - - - - Groups a set of instances for a specific - culture. - - - - - Initializes a new instance - for the specified culture. - - A . - - - - Gets the intermediate build directory in which the satellite - assembly is built. - - The project build configuration. - - The intermediate build directory in which the satellite assembly - is built. - - - - - Gets a representing the path to the - intermediate file location of the satellite assembly. - - The project build configuration. - The project settings. - - A representing the path to the - intermediate file location of the satellite assembly. - - - - - Gets path of the satellite assembly, relative to the output - directory. - - The project settings. - - The path of the satellite assembly, relative to the output - directory. - - - - - Gets the of the - . - - - - - Gets the set of localized resources. - - - - - Verifies whether the specified XML fragment represents a valid project - that is supported by this . - - XML fragment representing the project file. - - The XML fragment is not supported by this . - -or- - The XML fragment does not represent a valid project (for this ). - - - - - Returns the Visual Studio product version of the specified project - XML fragment. - - The document element of the project. - - The Visual Studio product version of the specified project XML - fragment. - - - The product version could not be determined. - -or- - The product version is not supported. - - - - - Returns a for launching the compiler - for this project. - - The configuration to build. - The response file for the compiler. - - A for launching the compiler for - this project. - - - - - Returns the project location from the specified project XML fragment. - - XML fragment representing the project file. - - The project location of the specified project XML file. - - - The project location could not be determined. - -or- - The project location is invalid. - - - - - Returns a value indicating whether the project represented by the - specified XML fragment is supported by . - - XML fragment representing the project to check. - - if supports - the specified project; otherwise, . - - - - A project is identified as as C# project, if the XML fragment at - least has the following information: - - - - - ... - - - ]]> - - - - - - Gets the type of the project. - - - The type of the project. - - - - - Gets the default file extension of sources for this project. - - - For C# projects, the default file extension is ".cs". - - - - - Initializes a new instance of the - class with the given . - - The project of the configuration. - - - - Expands the given macro. - - The macro to expand. - - The expanded macro. - - - The macro is not supported. - -or- - The macro is not implemented. - -or- - The macro cannot be expanded. - - - Expansion of a given macro is not yet implemented. - - - - - Is called each time a regular expression match is found during a - operation. - - The resulting from a single regular expression match during a . - - The expanded . - - - - - Gets the project. - - - - - Gets the name of the configuration. - - - - - Get the directory in which intermediate build output will be stored - for this configuration. - - - - This is a directory relative to the project directory named - obj\<configuration name>. - - - .resx and .licx files will only be recompiled if the - compiled resource files in the are not - uptodate. - - - - - - Gets the output directory. - - - - - Gets the path for the output file. - - - - - Gets the path in which the output file will be created before its - copied to the actual output path. - - - - - Get the path of the output directory relative to the project - directory. - - - - - Gets the platform that the configuration targets. - - - The platform targeted by the configuration. - - - - - Gets the set of output files that is specific to the project - configuration. - - - The set of output files that is specific to the project - configuration. - - - The key of the case-insensitive is the - full path of the output file and the value is the path relative to - the output directory. - - - - - Gets the platform that the configuration targets. - - - The platform targeted by the configuration. - - - - - Gets the path in which the output file will be created before its - copied to the actual output path. - - - - - Gets a value indicating whether to register the project output for - use with COM components. - - - if the project output should be registered - for use with COM components; otherwise, . - - - - - Analyses Microsoft Visual Studio .NET 2003 (Everett) solution files. - - - - - Supports grouping of individual projects, and treating them as a solution. - - - - - Verifies whether the specified XML fragment represents a valid project - that is supported by this . - - XML fragment representing the project file. - - The XML fragment is not supported by this . - -or- - The XML fragment does not represent a valid project (for this ). - - - - - Returns the Visual Studio product version of the specified project - XML fragment. - - The document element of the project. - - The Visual Studio product version of the specified project XML - fragment. - - - The product version could not be determined. - -or- - The product version is not supported. - - - - - Prepares the project for being built. - - The solution configuration that is built. - - Ensures the configuration-level object directory exists and ensures - that none of the output files are marked read-only. - - - - - Returns a for launching the compiler - for this project. - - The configuration to build. - The response file for the compiler. - - A for launching the compiler for - this project. - - - - - Returns the project location from the specified project XML fragment. - - XML fragment representing the project file. - - The project location of the specified project XML file. - - - The project location could not be determined. - -or- - The project location is invalid. - - - - - Returns a value indicating whether the project represented by the - specified XML fragment is supported by . - - XML fragment representing the project to check. - - if supports - the specified project; otherwise, . - - - - A project is identified as as J# project, if the XML fragment at - least has the following information: - - - - - ... - - - ]]> - - - - - - Gets the type of the project. - - - The type of the project. - - - - - Gets the default file extension of sources for this project. - - - For J# projects, the default file extension is ".jsl". - - - - - Resolves an assembly reference. - - - The full path to the resolved assembly, or - if the assembly reference could not be resolved. - - - - Visual Studio .NET uses the following search mechanism : - - - - - The project directory. - - - - - The directories specified in the "ReferencePath" property, - which is stored in the .USER file. - - - - - The .NET Framework directory (see KB306149) - - - - - - The directories specified under the following registry - keys: - - - - - HKLM\SOFTWARE\Microsoft\.NETFramework\AssemblyFolders - - - - - HKCU\SOFTWARE\Microsoft\.NETFramework\AssemblyFolders - - - - - HKLM\SOFTWARE\Microsoft\VisualStudio\<major version>.<minor version>\AssemblyFolders - - - - - HKCU\SOFTWARE\Microsoft\VisualStudio\<major version>.<minor version>\AssemblyFolders - - - - - Future versions of Visual Studio .NET will also check - in: - - - - - HKLM\SOFTWARE\Microsoft\.NETFramework\AssemblyFoldersEx - - - - - HKCU\SOFTWARE\Microsoft\.NETFramework\AssemblyFoldersEx - - - - - - - - The HintPath. - - - - - - - - Gets the name of the referenced assembly. - - - The name of the referenced assembly, or if - the name could not be determined. - - - - - Gets the Visual Studio .NET AssemblyFolders registry key matching - the current target framework. - - - The Visual Studio .NET AssemblyFolders registry key matching the - current target framework. - - The current target framework is not supported. - - We use the target framework instead of the product version of the - containing project file to determine what registry key to scan, as - we don't want to use assemblies meant for uplevel framework versions. - - - - - Indentifies the different output types of a managed project. - - - Visual Studio .NET does not support modules. - - - - - A class library. - - - - - A console application. - - - - - A Windows program. - - - - - Gets the output path of the reference, without taking the "copy local" - setting into consideration. - - The solution configuration that is built. - - The output path of the reference. - - - - - Gets the complete set of output files for the referenced project. - - The solution configuration that is built. - The set of output files to be updated. - - The complete set of output files for the referenced project. - - - The key of the case-insensitive is the - full path of the output file and the value is the path relative to - the output directory. - - - - - Gets the complete set of assemblies that need to be referenced when - a project references this project. - - The solution configuration that is built. - - The complete set of assemblies that need to be referenced when a - project references this project. - - - - Apparently, there's some hack in VB.NET that allows a type to be used - that derives from a type in an assembly that is not referenced by the - project. - - - When building from the command line (using vbc), the following error - is reported "error BC30007: Reference required to assembly 'X' - containing the base class 'X'. Add one to your project". - - - Somehow VB.NET can workaround this issue, without actually adding a - reference to that assembly. I verified this with both VS.NET 2003 and - VS.NET 2005. - - - For now, we have no other option than to return all assembly - references of the referenced project if the parent is a VB.NET - project. - - - - - - Gets the timestamp of the reference. - - The solution configuration that is built. - - The timestamp of the reference. - - - - - Gets a value indicating whether the output file(s) of this reference - should be copied locally. - - - if the output file(s) of this reference - should be copied locally; otherwise, . - - - - - Gets a value indicating whether this reference represents a system - assembly. - - - as a project by itself can never be a - system assembly. - - - - - Gets a value indicating whether the reference is managed for the - specified configuration. - - The solution configuration that is built. - - . - - - - - Gets the path of the reference, without taking the "copy local" - setting into consideration. - - The solution configuration that is built. - - The output path of the reference. - - - - - Gets the complete set of output files for the referenced project. - - The solution configuration that is built. - The set of output files to be updated. - - The key of the case-insensitive is the - full path of the output file and the value is the path relative to - the output directory. - - - - - Gets the complete set of assemblies that need to be referenced when - a project references this component. - - The solution configuration that is built. - - The complete set of assemblies that need to be referenced when a - project references this component. - - - - - Gets the timestamp of the reference. - - The solution configuration that is built. - - The timestamp of the reference. - - - - - Removes wrapper assembly from build directory, if wrapper assembly - no longer exists in output directory or is not in sync with build - directory, to force rebuild. - - The project configuration. - - - - Gets a value indicating whether the output file(s) of this reference - should be copied locally. - - - if the reference wraps a Primary Interop - Assembly; otherwise, . - - - - - Gets a value indicating whether this reference represents a system - assembly. - - - as none of the system assemblies are wrappers - or Primary Interop Assemblies anyway. - - - - - Gets the name of the tool that should be used to create the - . - - - The name of the tool that should be used to create the - . - - - - - Gets the path of the wrapper assembly. - - - The path of the wrapper assembly. - - - The wrapper assembly is stored in the object directory of the - project. - - - - - Gets a value indicating whether the wrapper assembly has already been - created. - - - - - Gets the path of the Primary Interop Assembly. - - - The path of the Primary Interop Assembly, or - if not available. - - - - - Gets the hex version of the type library as defined in the definition - of the reference. - - - The hex version of the type library. - - - - - Gets the GUID of the type library as defined in the definition - of the reference. - - - The GUID of the type library. - - - - - Gets the locale of the type library in hex notation. - - - The locale of the type library. - - - - - Gets the name of the type library. - - - The name of the type library. - - - - - Gets the name of the referenced assembly. - - - The name of the referenced assembly, or if - the name could not be determined. - - - - - Gets the name of the tool that should be used to create the - . - - - The name of the tool that should be used to create the - . - - - - - Gets the path of the wrapper assembly. - - - The path of the wrapper assembly. - - - The wrapper assembly is stored in the object directory of the - project. - - - - - Gets the path of the Primary Interop Assembly. - - - The path of the Primary Interop Assembly, or - if not available. - - - - - Gets the hex version of the type library as defined in the definition - of the reference. - - - The hex version of the type library. - - - - The definition of the reference does not contain a "VersionMajor" attribute. - - -or - - The definition of the reference does not contain a "VersionMinor" attribute. - - - - - - Gets the GUID of the type library as defined in the definition - of the reference. - - - The GUID of the type library. - - - - - Gets the locale of the type library in hex notation. - - - The locale of the type library. - - - - - Specifies the type of the project. - - - - - A Visual Basic.NET project. - - - - - A Visual C# project. - - - - - A Visual C++ project. - - - - - A Visual J# project. - - - - - MSBuild project. - - - - - Specifies the result of the build. - - - - - The build failed. - - - - - The build succeeded. - - - - - The build succeeded and the output was updated. - - - - - Visual Studio.NET 2002 - - - - - Visual Studio.NET 2003 - - - - - Visual Studio 2005 - - - - - Indentifies the physical location of a managed project. - - - - - A local project. - - - - - A web project. - - - - - Contains a collection of elements. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Determines whether a with the specified - GUID is in the collection, using a case-insensitive lookup. - - The GUID to locate in the collection. - - if a with GUID - is found in the collection; otherwise, - . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - 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. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Remove items with the specified guid from the collection. - - The guid of the project to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Gets the with the specified GUID. - - The GUID of the to get. - - Performs a case-insensitive lookup. - - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Factory class for VS.NET projects. - - - - - Initializes a new instance of the - class. - - - - - Holds a case-insensitive list of cached projects. - - - The key of the is the path of the project - file (for web projects this can be a URL) and the value is a - instance. - - - - - Holds a case-insensitive list of cached project GUIDs. - - - The key of the is the path of the project - file (for web projects this can be a URL) and the value is the GUID - of the project. - - - - - Holds a case-insensitive list of cached project GUIDs. - - - The key of the is the path of the project - file (for web projects this can be a URL) and the value is the Xml - of the project. - - - - - Determines the output type of the project from its XML definition. - - The XML definition of the project settings. - - The output type of the project. - - - - The output type of the project is not set in the specified XML - definition. - - -or- - - The output type of the project is not supported. - - - - - - Gets the project GUID from the given - holding a <VisualStudioProject> node. - - The path of the project file. - The <VisualStudioProject> node from which the project GUID should be retrieved. - - The project GUID from specified <VisualStudioProject> node. - - - - - Gets the .ico file to use as application icon. - - - The .ico file to use as application icon, or - if no application icon should be used. - - - - - Gets the key file to use to sign ActiveX/COM wrappers. - - - The path of the key file to use to sign ActiveX/COM wrappers, - relative to the project root directory, or - if the wrapper assembly should not be signed using a key file. - - - - - Gets the key name to use to sign ActiveX/COM wrappers. - - - The name of the key container to use to sign ActiveX/COM wrappers, - or if the wrapper assembly should not be - signed using a key container. - - - - - Gets the output type of this project. - - - - - Designates when the command line should - be run. Possible values are "OnBuildSuccess", "Always" or - "OnOutputUpdated". - - - - - Contains commands to be run before a build takes place. - - - Valid commands are those in a .bat file. For more info see MSDN. - - - - - Contains commands to be ran after a build has taken place. - - - Valid commands are those in a .bat file. For more info see MSDN. - - - - - Analyses Microsoft Visual Studio .NET 2002 (Rainier) solution files. - - - - - Obtains a lifetime service object to control the lifetime policy for - this instance. - - - An object of type used to control the lifetime - policy for this instance. This is the current lifetime service object - for this instance if one exists; otherwise, a new lifetime service - object initialized with a lease that will never time out. - - - - - Gets the file name of the assembly with the given assembly name. - - The assembly name of the assembly of which the file name should be returned. - - The file name of the assembly with the given assembly name. - - - - - Compiles the resource file. - - The solution configuration that is built. - - A representing the compiled resource file. - - - - - Returns a representing the compiled resource - file. - - The solution configuration that is built. - - A representing the compiled resource file. - - - Calling this method does not force compilation of the resource file. - - - - - Gets a representing the physical location - of the resource file. - - - - - Gets a representing the logical location - of the resource file in the project. - - - When the resource file is not linked, this matches the - . - - - - - Gets a value indicating whether the resource is in fact a ResX file. - - - if the resource is a ResX file; otherwise, - . - - - - - Factory class for VS.NET solutions. - - - - - Initializes a new instance of the - class. - - - - - Verifies whether the specified XML fragment represents a valid project - that is supported by this . - - XML fragment representing the project file. - - The XML fragment is not supported by this . - -or- - The XML fragment does not represent a valid project (for this ). - - - - - Returns the Visual Studio product version of the specified project - XML fragment. - - The document element of the project. - - The Visual Studio product version of the specified project XML - fragment. - - - The product version could not be determined. - -or- - The product version is not supported. - - - This method is called from the ctor, and - at that time we're not sure the XML that is passed in, is indeed a - valid Visual Basic project. - - - - - Returns the project location from the specified project XML fragment. - - XML fragment representing the project file. - - The project location of the specified project XML file. - - - The project location could not be determined. - -or- - The project location is invalid. - - - - - Returns a for launching the compiler - for this project. - - The configuration to build. - The response file for the compiler. - - A for launching the compiler for - this project. - - - - - Returns a value indicating whether the project represented by the - specified XML fragment is supported by . - - XML fragment representing the project to check. - - if supports the - specified project; otherwise, . - - - - A project is identified as as Visual Basic project, if the XML - fragment at least has the following information: - - - - - ... - - - ]]> - - - - - - Gets the type of the project. - - - The type of the project. - - - - - Gets the default file extension of sources for this project. - - - For VB projects, the default file extension is ".vb". - - - - - A mapping from properties in the .vcproj file to command line arguments. - - - - - Initializes a new instance of the - class. - - - - - Gets the argument string corresponding with a configuration property - named with value . - An ignore mask can be used to eliminate some arguments from the search. - - The name of the configuration property. - The value of the configuration property. - Specify any groups that needs to be ignored. - - The argument string corresponding with a configuration property - named with value , - or if no corresponding argument exists. - - - - - Creates a mapping between configuration properties for the Visual - C++ compiler and corresponding command-line arguments. - - - A mapping between configuration properties for the Visual C++ - compiler and corresponding command-line arguments. - - - - The following configuration properties are processed by - : - - - - Category - Property - - - General - Addtional Include Directories (/I[path]) - - - General - Resolve #using References (/AI[path]) - - - Preprocessor - Preprocessor Definitions (/D[macro]) - - - Code Generation - Enable C++ Exceptions (/EHsc) - - - Precompiled Headers - Create/Use Precompiled Header - - - Precompiled Headers - Create/Use PCH Through File - - - Precompiled Headers - Precompiled Header File - - - Output Files - Assembler Output - - - Output Files - ASM List Location - - - Browse Information - Enable Browse Information - - - Browse Information - Browse File - - - Advanced - Force Includes (/FI[name]) - - - Advanced - Force #using (/FU[name]) - - - Advanced - Undefine Preprocessor Definitions (/U[macro]) - - - - - - - Creates a mapping between configuration properties for the Visual - C++ linker and corresponding command-line arguments. - - - A mapping between configuration properties for the Visual C++ - linker and corresponding command-line arguments. - - - - The following configuration properties are processed by - : - - - - Category - Property - - - General - Output File (/OUT:[file]) - - - General - Additional Library Directories (/LIBPATH:[dir]) - - - Input - Additional Dependencies - - - Input - Add Module to Assembly (/ASSEMBLYMODULE:file) - - - Input - Embed Managed Resource File (/ASSEMBLYRESOURCE:file) - - - Debugging - Generate Debug Info (/DEBUG) - - - Debugging - Generate Program Database File (/PDB:name) - - - Debugging - Generate Map File (/MAP) - - - Debugging - Map File Name (/MAP:[filename]) - - - System - Heap Reserve Size (/HEAP:reserve) - - - System - Heap Commit Size (/HEAP:reserve, commit) - - - System - Stack Reserve Size (/STACK:reserve) - - - System - Stack Commit Size (/STACK:reserve, commit) - - - - The following configuration properties are ignored: - - - - Category - Property - - - General - Show Progress (/VERBOSE, /VERBOSE:LIB) - - - General - Suppress Startup Banner (/NOLOGO) - - - - Support for the following configuration properties still needs to - be implemented: - - - - Category - Property - - - General - Ignore Import Library - - - General - Register Output - - - Input - Delay Loaded DLLs (/DELAYLOAD:[dll_name]) - - - Embedded IDL - MIDL Commands (/MIDL:[file]) - - - - - - - Gets the name of the command-line argument. - - - The name of the command-line argument. - - - - - Represents a command-line arguments of which the trailing backslashes - in the value should be duplicated. - - - - - Represents a command-line argument of which the value should be - quoted, and of which trailing backslahes should be duplicated. - - - - - Gets the string that the configuration setting should match in - order for the command line argument to be set. - - - - - Allow us to assign an argument to a specific group. - - - - - The argument is not assigned to any group. - - - - - The argument is ignored when the optimization level is set to - Minimum Size (1) or Maximum Size (2). - - - - - Resolves an assembly reference. - - - The full path to the resolved assembly, or - if the assembly reference could not be resolved. - - - - - Is called each time a regular expression match is found during a - operation. - - The resulting from a single regular expression match during a . - - The expanded . - - The macro is not supported. - Expansion of a given macro is not yet implemented. - - - - Gets the name of the referenced assembly. - - - The name of the referenced assembly, or if - the name could not be determined. - - - - - A single build configuration for a Visual C++ project or for a specific - file in the project. - - - - - Expands the given macro. - - The macro to expand. - - The expanded macro. - - - The macro is not supported. - -or- - The macro is not implemented. - -or- - The macro cannot be expanded. - - - - - Gets the value of a given setting for a specified tool. - - The name of the tool. - The name of the setting. - - The value of a setting for the specified tool, or - if the setting is not defined for the specified tool. - - - An empty setting value, which is used as a means to override the - project default, will be returned as a empty . - - - - - Gets the value of a given setting for a specified tool. - - The name of the tool. - The name of the setting. - The value to return if setting is not defined. - - The value of a setting for the specified tool, or - if the setting is not defined for - the specified tool. - - - An empty setting value, which is used as a means to override the - project default, will be returned as a empty . - - - - - Gets the intermediate directory, specified relative to project - directory. - - - The intermediate directory, specified relative to project directory. - - - - - Gets a comma-separated list of directories to scan for assembly - references. - - - A comma-separated list of directories to scan for assembly - references, or if no additional directories - should scanned. - - - - - Gets the name of the configuration, including the platform it - targets. - - - Tthe name of the configuration, including the platform it targets. - - - - - Gets the output directory. - - - - - Gets the path in which the output file will be created before its - copied to the actual output path. - - - For Visual C++ projects, the output file will be immediately - created in the output path. - - - - - Gets the name of the configuration. - - - The name of the configuration. - - - - - Gets the platform that the configuration targets. - - - The platform targeted by the configuration. - - - - - Represents the configuration of a file. - - - - - Expands the given macro. - - The macro to expand. - - The expanded macro. - - - The macro is not supported. - -or- - The macro is not implemented. - -or- - The macro cannot be expanded. - - - - - Gets the value of a given setting for a specified tool. - - The name of the tool. - The name of the setting. - The value to return if setting is not defined in both the file and project configuration. - - The value of a setting for the specified tool, or - if the setting is not defined in - both the file and project configuration. - - - - If the setting is not defined in the file configuration, then - the project level setting will be used. - - - An empty setting value, which is used as a means to override the - project default, will be returned as a empty . - - - - - - Gets a value indication whether the file should be excluded from - the build for this configuration. - - - if the file should be excluded from the - build for this configuration; otherwise, . - - - - - Gets the relative path of the file. - - - The path of the file relative to the project directory. - - - - - Get the path of the output directory relative to the project - directory. - - - - - Gets the intermediate directory, specified relative to project - directory. - - - The intermediate directory, specified relative to project directory. - - - - - Gets the path for the output file. - - - The path for the output file, or if there's - no output file for this configuration. - - - - - Gets a comma-separated list of directories to scan for assembly - references. - - - A comma-separated list of directories to scan for assembly - references, or if no additional directories - should scanned. - - - - - Visual C++ project. - - - - - Gets a value indicating whether building the project for the specified - build configuration results in managed output. - - The solution configuration that is built. - - if the project output for the specified build - configuration is either a Dynamic Library (dll) or an Application - (exe), and Managed Extensions are enabled; otherwise, - . - - - - - Verifies whether the specified XML fragment represents a valid project - that is supported by this . - - XML fragment representing the project file. - - The XML fragment is not supported by this . - -or- - The XML fragment does not represent a valid project (for this ). - - - - - Returns the Visual Studio product version of the specified project - XML fragment. - - The document element of the project. - - The Visual Studio product version of the specified project XML - fragment. - - - The product version could not be determined. - -or- - The product version is not supported. - - - - - Expands the given macro. - - The macro to expand. - - The expanded macro or if the macro is not - supported. - - - - - Build resource files for the given configuration. - - The resource files to build. - The project configuration. - The build configuration. - - TODO: refactor this as we should always get only one element in the - list. Each res file should be built - with its own file configuration. - - - - - Build Interface Definition Language files for the given - configuration. - - The IDL files to build. - The project configuration. - The build configuration. - - TODO: refactor this as we should always get only one element in the - list. Each IDL file should be built - with its own file configuration. - - - - - Merges the specified tool setting of - with . - - - The merge is suppressed when the flag $(noinherit) is defined in - . - - - - - Gets the absolute path to the object file or directory. - - The build configuration - - The absolute path to the object file or directory, or - - - We use an absolute path for the object file, otherwise - <cl> assumes a location relative to the output - directory - not the project directory. - - - - - Returns a value indicating whether the project represented by the - specified XML fragment is supported by . - - XML fragment representing the project to check. - - if supports the - specified project; otherwise, . - - - - A project is identified as as Visual C++ project, if the XML - fragment at least has the following information: - - - - - ]]> - - - - - - Removes leading and trailing quotes from the specified path. - - The path to clean. - - - - Returns the Visual Studio product version of the specified project - XML fragment. - - XML fragment representing the project to check. - - The Visual Studio product version of the specified project XML - fragment. - - - The product version could not be determined. - -or- - The product version is not supported. - - - - - Holds the files included in the project. - - - - For project files with no specific file configuration, the relative - path is added to the list. - - - For project files that have a specific file configuration, a - containing the - instance representing the file configurations is added. - - - - - - Gets the name of the Visual C++ project. - - - - - Gets the type of the project. - - - The type of the project. - - - - - Gets the path of the Visual C++ project. - - - - - Gets the directory containing the VS.NET project. - - - - - Get the location of the project. - - - . - - - For now, we only support local Visual C++ projects. - - - - - Get the directory in which intermediate build output that is not - specific to the build configuration will be stored. - - - This is a directory relative to the project directory, - named temp\. - - - - - Gets or sets the unique identifier of the Visual C++ project. - - - - - Represents a Visual C++ project configuration. - - - - - Expands the given macro. - - The macro to expand. - - The expanded macro. - - - The macro is not supported. - -or- - The macro is not implemented. - -or- - The macro cannot be expanded. - - - Expansion of a given macro is not yet implemented. - - - - - Gets the value of the specified attribute from the specified node. - - The node of which the attribute value should be retrieved. - The attribute of which the value should be returned. - - The value of the attribute with the specified name or - if the attribute does not exist or has no value. - - - - - Holds the output path for this build configuration. - - - Lazy initialized by . - - - - - Holds list of files to link in the order in which they are defined - in the project file. - - - - - Holds the C++ sources for each build configuration. - - - The key of the hashtable is a build configuration, and the - value is an ArrayList holding the C++ source files for that - build configuration. - - - - - Holds the resources for each build configuration. - - - The key of the hashtable is a build configuration, and the - value is an ArrayList holding the resources files for that - build configuration. - - - - - Holds the IDL files for each build configuration. - - - The key of the hashtable is a build configuration, and the - value is an ArrayList holding the IDL files for that build - configuration. - - - - - Tells the compiler which character set to use. - - - - - Gets a value indicating whether Managed Extensions for C++ are - enabled. - - - - - Gets a value indicating how MFC is used by the configuration. - - - - - Gets a value indicating how ATL is used by the configuration. - - - - - Gets the list of files to link in the order in which they are - defined in the project file. - - - - - Holds the C++ sources for each build configuration. - - - The key of the hashtable is a build configuration, and the - value is an ArrayList holding the C++ source files for that - build configuration. - - - - - Gets the resources for each build configuration. - - - The key of the hashtable is a build configuration, and the - value is an ArrayList holding the resources files for that - build configuration. - - - - - Get the IDL files for each build configuration. - - - The key of the hashtable is a build configuration, and the - value is an ArrayList holding the IDL files for that build - configuration. - - - - - Gets the target path for usage in macro expansion. - - - The target path, or a zero-length string if there's no output file - for this configuration. - - - - - Get the directory in which intermediate build output will be stored - for this configuration. - - - - This is a directory relative to the project directory named - obj\<configuration name>. - - - .resx and .licx files will only be recompiled if the - compiled resource files in the are not - uptodate. - - - - - - Get the path of the output directory relative to the project - directory. - - - - - Gets the intermediate directory, specified relative to project - directory. - - - The intermediate directory, specified relative to project directory. - - - - - Gets the absolute path for the output file. - - - The absolute path for the output file, or - if there's no output file for this configuration. - - - - - Gets a comma-separated list of directories to scan for assembly - references. - - - A comma-separated list of directories to scan for assembly - references, or if no additional directories - should scanned. - - - - - The type of output for a given configuration. - - - - - A Makefile. - - - - - Application (.exe). - - - - - Dynamic Library (.dll). - - - - - Static Library (.lib). - - - - - Utility. - - - - - Gets a instance representing the - absolute path to the import library to generate. - - - A representing the absolute path to the - import library to generate, or if no - import library must be generated. - - - - - Gets a value indicating whether the reference is managed for the - specified configuration. - - The build configuration of the reference. - - if the reference is managed for the - specified configuration; otherwise, . - - - - - Gets the name of the referenced assembly. - - - The name of the referenced assembly. - - - - - Gets the name of the tool that should be used to create the - . - - - The name of the tool that should be used to create the - . - - - - - Gets the path of the wrapper assembly. - - - The path of the wrapper assembly. - - - The wrapper assembly is stored in the object directory of the - project. - - - - - Gets the path of the Primary Interop Assembly. - - - The path of the Primary Interop Assembly, or - if not available. - - - - - Gets the hex version of the type library as defined in the definition - of the reference. - - - The hex version of the type library. - - The definition of the reference does not contain a "ControlVersion" attribute. - - - - Gets the GUID of the type library as defined in the definition - of the reference. - - - The GUID of the type library. - - - - - Gets the locale of the type library in hex notation. - - - The locale of the type library. - - -
            -
            diff --git a/bin/Nant/NAnt.VisualCppTasks.dll b/bin/Nant/NAnt.VisualCppTasks.dll deleted file mode 100644 index 95df6db62..000000000 Binary files a/bin/Nant/NAnt.VisualCppTasks.dll and /dev/null differ diff --git a/bin/Nant/NAnt.VisualCppTasks.xml b/bin/Nant/NAnt.VisualCppTasks.xml deleted file mode 100644 index d27da40f8..000000000 --- a/bin/Nant/NAnt.VisualCppTasks.xml +++ /dev/null @@ -1,1205 +0,0 @@ - - - - NAnt.VisualCppTasks - - - - - Compiles C/C++ programs using cl.exe, Microsoft's C/C++ compiler. - - - This task is intended for version 13.00.9466 of cl.exe. - - - Compiles helloworld.cpp for the Common Language Runtime. - - - - - - - ]]> - - - - - - Initializes a new instance of the class. - - - - - Compiles the sources. - - - - - Determines if the sources need to be compiled. - - - - - Determines whether the precompiled header file is up-to-date. - - - if no precompiled header file was specified; - otherwise, . - - - In order to determine accurately whether the precompile header file - is up-to-date, we'd need scan all the header files that are pulled - in. As this is not implemented right now, its safer to always - recompile. - - - - - Determines whether any file that are includes in the specified - source file has been updated after the obj was compiled. - - The source file to check. - The last write time of the compiled obj. - - The full path to the include file that was modified after the obj - was compiled, or if no include files were - modified since the obj was compiled. - - - - To determine what includes are defined in a source file, conditional - directives are not honored. - - - If a given include cannot be resolved to an existing file, then - it will be considered stable. - - - - - - Quotes an argument value and duplicates trailing backslahes. - - The argument value to quote. - - The quotes argument value. - - - - - Determines the file name of the OBJ file for the specified source - file. - - The source file for which the OBJ file should be determined. - The path of the object file. - - The file name of the OBJ file for the specified source file. - - - - - Directory where all output files are placed. - - - - - Specifies the path and/or name of the generated precompiled header - file - given either relative to or as an - absolute path. - - - - - The path of the boundary file when generating/using the - specified . If a precompiled header file is - not specified then this attribute is ignored. - - - - - The mode in which the specified (if any) is - used. The default is . - - - - - Specifies whether Managed Extensions for C++ should be enabled. - The default is . - - - - - Tells the compiler to use the specified character set. - - - - - Options to pass to the compiler. - - - - - The list of files to compile. - - - - - The list of directories in which to search for include files. - - - - - Directories that the compiler will search to resolve file references - passed to the #using directive. - - - - - Specifies metadata files to reference in this compilation as an - alternative to passing a file name to #using in source code. - - - - - Macro definitions to pass to cl.exe. - Each entry will generate a /D - - - - - Macro undefines (/U) to pass to cl.exe. - - - - - A name to override the default object file name; can be either a file - or directory name. The default is the output directory. - - - - - A name for the compiler-generated PDB file; can be either a file or - directory name. The default is the output directory. - - - - - Gets the filename of the external program to start. - - The filename of the external program. - - - - Gets the command-line arguments for the external program. - - - The command-line arguments for the external program. - - - - - Defines the supported modes for the use of precompiled header files. - - - - - Create a precompiled header file. - - - For further information on the use of this option - see the Microsoft documentation on the C++ compiler flag /Yc. - - - - - Automatically create a precompiled header file if necessary. - - - For further information on the use of this option - see the Microsoft documentation on the C++ compiler flag /YX. - - - - - Use a (previously generated) precompiled header file. - - - For further information on the use of this option - see the Microsoft documentation on the C++ compiler flag /Yu. - - - - - Run lib.exe, Microsoft's Library Manager. - - - Create a library. - - - - - - - ]]> - - - - - - Creates the library. - - - - - Determines if the sources need to be linked. - - - - - Options to pass to the compiler. - - - - - The output file. - - - - - The module definition file. - - - - - The list of files to combine into the output file. - - - - - Symbols to add to the symbol table. - - - - - Names of default libraries to ignore. - - - - - The list of additional library directories to search. - - - - - Gets the filename of the external program to start. - - The filename of the external program. - - - - Gets the command-line arguments for the external program. - - - The command-line arguments for the external program. - - - - - Links files using link.exe, Microsoft's Incremental Linker. - - - This task is intended for version 7.00.9466 of link.exe. - - - - Combine all object files in the current directory into helloworld.exe. - - - - - - - - ]]> - - - - - - Links the sources. - - - - - Determines if the output needs linking. - - - - - Quotes an argument value and duplicates trailing backslahes. - - The argument value to quote. - - The quotes argument value. - - - - - Options to pass to the compiler. - - - - - Create debugging information for the .exe file or DLL. The default is - . - - - - - The output file. - - - - - A user-specified name for the program database (PDB) that the linker - creates. The default file name for the PDB has the base name of the - and the extension .pdb. - - - - - Specified DLLs for delay loading. - - - - - The list of files to combine into the output file. - - - - - The list of additional library directories to search. - - - - - Link the specified modules into this assembly. - - - - - Embed the specified resources into this assembly. - - - - - Symbols to add to the symbol table. - - - - - Names of libraries that you want the linker to ignore when it - resolves external references. - - - - - Gets the filename of the external program to start. - - The filename of the external program. - - - - Gets the command-line arguments for the external program. - - - The command-line arguments for the external program. - - - - - Compiles messages using mc.exe, Microsoft's Win32 message compiler. - - - - Compile text.mc using the default options. - - - - ]]> - - - Compile text.mc, passing a path to store the header, the rc - file and some additonal options. - - - - ]]> - - - - - - Compiles the sources. - - - - - Determine if source files need re-building. - - - - - Options to pass to the compiler. - - - - - Path to store header file. The default is the project base directory. - - - - - Path to store RC file. The default is the project base directory. - - - - - Input filename. - - - - - Gets the filename of the external program to start. - - - The filename of the external program. - - - - - Gets the command-line arguments for the external program. - - - The command-line arguments for the external program. - - - - - This tasks allows you to run MIDL.exe. - - - - This task only supports a small subset of the MIDL.EXE command line - switches, but you can use the options element to specify any other - unsupported commands you want to specify. - - - - - - - - - - - - - ]]> - - - - - - This is where the work is done. - - - - - Check output files to see if we need rebuilding. - - if a rebuild is needed; otherwise, - . - - - - Check output files to see if we need rebuilding. - - - if a rebuild is needed; otherwise, - . - - - - - Writes the response file for midl.exe. - - - - - The /acf switch allows the user to supply an - explicit ACF file name. The switch also - allows the use of different interface names in - the IDL and ACF files. - - - - - The /align switch is functionally the same as the - MIDL /Zp option and is recognized by the MIDL compiler - solely for backward compatibility with MkTypLib. - - The alignment value can be 1, 2, 4, or 8. - - - - The /app_config switch selects application-configuration - mode, which allows you to use some ACF keywords in the - IDL file. With this MIDL compiler switch, you can omit - the ACF and specify an interface in a single IDL file. - - - - - The /char switch helps to ensure that the MIDL compiler - and C compiler operate together correctly for all char - and small types. - - Can be one of signed | unsigned | ascii7 - - - - The /client switch directs the MIDL compiler to generate - client-side C source files for an RPC interface - - can be one of stub | none - - - - The /cstub switch specifies the name of the client - stub file for an RPC interface. - - - - - Specifies the file name for the generated dlldata file for a proxy - DLL. The default file name Dlldata.c is used if - is not specified. - - - - - The /env switch selects the - environment in which the application runs. - - It can take the values win32 and win64 - - - - The /Oi switch directs the MIDL compiler to - use a fully-interpreted marshaling method. - The /Oic and /Oicf switches provide additional - performance enhancements. - - - If you specify the Oi attribute, you must set it to - one of the values: - - Oi="" - - Oi="c" - - Oi="f" - - Oi="cf" - - - - - Specifies a file name for the type library generated by the MIDL - compiler. - - - - - Specifies the name of the header file. - - - - - Specifies the name of the interface identifier file for a COM - interface, overriding the default name obtained by adding _i.c - to the IDL file name. - - - - - Specifies the name of the interface proxy file for a COM interface. - - - - - Name of .IDL file to process. - - - - - Additional options to pass to midl.exe. - - - - - Macro definitions to pass to mdil.exe. - Each entry will generate a /D - - - - - Macro undefines (/U) to pass to mdil. - - - - - The list of directories in which to search for include files. - - - - - Filename of program to execute - - - - - Gets the command-line arguments for the external program. - - - The command-line arguments for the external program. - - - - - Compiles resources using rc.exe, Microsoft's Win32 resource - compiler. - - - - Compile text.rc to text.res using the default options. - - - - ]]> - - - - - Compile text.rc, passing an additional option. - - - - ]]> - - - - - - Compile the resource file - - - - - Determines if the resource need compiling. - - - - - Check if a resource file has been updated. - - - - - - - Options to pass to the compiler. - - - - - Output file. - - - - - The resource file to compile. - - - - - Default language ID. - - - - - The list of directories in which to search for include files. - - - - - Macro definitions to pass to rc.exe. - Each entry will generate a /d - - - - - Filename of program to execute - - - - - Arguments of program to execute - - - - - Defines the character sets that can be used by the C++ compiler. - - - - - Have the compiler determine the character set. - - - - - Unicode character set. - - - - - Multi-byte character set. - - - - - Represents a library. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with - the specified name. - - is . - - - - The name of the library. - - - - - If then the element will be processed; - otherwise, skipped. The default is . - - - - - If then the element will be skipped; - otherwise, processed. The default is . - - - - - Contains a collection of elements. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - 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. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Represents a symbol. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with - the specified name. - - is . - - - - The name of the symbol. - - - - - If then the element will be processed; - otherwise, skipped. The default is . - - - - - If then the element will be skipped; - otherwise, processed. The default is . - - - - - Contains a collection of elements. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - 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. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Defines how to deal with backslashes in values of command line - arguments. - - - - - Does not perform any processing on backslashes. - - - - - Duplicates the trailing backslash. - - - - - Fixes the trailing backslash by replaces trailing double backslashes - with only one backslash and removing single trailing backslashes. - - - - - Removes all the trailing backslashes. - - - - - Groups a set of useful manipulation methods for - command-line arguments. - - - - - Performs backslash processing on the specified value using a given - method. - - The to process. - The to use. - - with backslashes processed using the given - . - - - - - Duplicates the trailing backslash. - - The input string to check and duplicate the trailing backslash if necessary. - The result string after being processed. - - Also duplicates trailing backslash in quoted value. - - - - - Fixes the trailing backslash. This function replaces the trailing double backslashes with - only one backslash. It also, removes the single trailing backslash. - - The input string. - The result string after being processed. - - - - Removes all the trailing backslashes from the input. - - The input string. - The result string without trailing backslashes. - - - - Quotes an argument value and processes backslashes using a given - . - - The argument value to quote. - The to use. - - The quoted argument value. - - - - diff --git a/bin/Nant/NAnt.Win32Tasks.dll b/bin/Nant/NAnt.Win32Tasks.dll deleted file mode 100644 index 55ff389bf..000000000 Binary files a/bin/Nant/NAnt.Win32Tasks.dll and /dev/null differ diff --git a/bin/Nant/NAnt.Win32Tasks.xml b/bin/Nant/NAnt.Win32Tasks.xml deleted file mode 100644 index 059eb79cd..000000000 --- a/bin/Nant/NAnt.Win32Tasks.xml +++ /dev/null @@ -1,690 +0,0 @@ - - - - NAnt.Win32Tasks - - - - - Groups a set of functions that convert Windows native filenames to - Cygwin POSIX-style pathnames and vice versa. - - - It can be used when a Cygwin program needs to pass a file name to a - native Windows program, or expects to get a file name from a native - Windows program. - - - - - Initializes a new instance of the - class with the specified and properties. - - The in which the class is used. - The set of properties to use for macro expansion. - - - - Gets the DOS (short) form of the specified path. - - The path to convert. - - The DOS (short) form of the specified path. - - cygpath could not be started. - could not be converted to a short form. - - - - Gets the Unix form of the specified path. - - The path to convert. - - The Unix form of the specified path. - - cygpath could not be started. - could not be converted to a Unix form. - - - - Gets the Windows form of the specified path. - - The path to convert. - - The Windows form of the specified path. - - cygpath could not be started. - could not be converted to a Windows form. - - - - Runs cygpath with the specified arguments and returns the result - as a . - - The arguments to pass to cygpath. - - The result of running cygpath with the specified arguments. - - - - - Factory method to return a new instance of ExecTask - - - - - - - Generates a Windows Forms Control that wraps ActiveX Controls defined - in an OCX. - - - - - ]]> - - - - - - Import the ActiveX control. - - - - - Determines whether the assembly needs to be created again. - - - if the assembly needs to be created again; - otherwise, . - - - - - Filename of the .ocx file. - - - - - Filename of the generated assembly. - - - - - Specifies the file containing the public key to use to sign the - resulting assembly. - - - The file containing the public key to use to sign the resulting - assembly. - - - - - Specifies the publisher's official public/private key pair with which - the resulting assembly should be signed with a strong name. - - - The keyfile to use to sign the resulting assembly with a strong name. - - See the Microsoft.NET Framework SDK documentation for details. - - - - Specifies the key container in which the public/private key pair - should be found that should be used to sign the resulting assembly - with a strong name. - - - The key container containing a public/private key pair that should - be used to sign the resulting assembly. - - - - - Specifies to sign the resulting control using delayed signing. - - - - - Determines whether C# source code for the Windows Form wrapper should - be generated. The default is . - - - - - Assembly to use for Runtime Callable Wrapper rather than generating - new one [.NET 1.1 or higher]. - - - - - Indicates whether aximp supports using an existing Runtime - Callable Wrapper for a given target framework. The default is - . - - - - - Gets the command-line arguments for the external program. - - - The command-line arguments for the external program. - - - - - Reads a value or set of values from the Windows Registry into one or - more NAnt properties. - - - Read a single value from the registry. - - - ]]> - - Read all the registry values in a key. - - - ]]> - - - - - - read the specified registry value - - - - - Returns the hive for a given key. - - - - - The hive for a given key. - - - - - Returns the key for a given registry hive. - - The registry hive to return the key for. - - The key for a given registry hive. - - - - - The property to set to the specified registry key value. - If this attribute is used then a single value will be read. - - - - - The prefix to use for the specified registry key values. - If this attribute is used then all registry values will be read and stored as properties with this prefix. - - - Registry values a, b, c will be turned into prefixa, prefixb, prefixc named properties - - - - - The registry key to read, including the path. - - - SOFTWARE\Microsoft\.NETFramework\sdkInstallRoot - - - - - Space separated list of registry hives to search for . - For a list of possible values, see . The - default is . - - - - - - - - Registers an assembly, or set of assemblies for use from COM clients. - - - - Refer to the Regasm - documentation for more information on the regasm tool. - - - - - Register types in a single assembly. - - - - ]]> - - - - - Register types of an assembly and generate a type library containing - definitions of accessible types defined within the assembly. - - - - ]]> - - - - - Register types of set of assemblies at once, while specifying a set - of reference assemblies. - - - - - - - - - - - - ]]> - - - - - - Updates the of the specified - . - - The of which the should be updated. - - - - Registers or unregisters a single assembly, or a group of assemblies. - - - - - The name of the file to register. This is provided as an alternate - to using the task's . - - - - - Registry file to export to instead of entering the types directly - into the registry. - - - - - Set the code base registry setting. - - - - - Only refer to already registered type libraries. - - - - - Export the assemblies to the specified type library and register it. - - - - - Unregister the assembly. The default is . - - - - - The set of assemblies to register, or unregister. - - - - - The set of assembly references. - - - - - Gets the working directory for the application. - - - The working directory for the application. - - - - - Gets the command line arguments for the external program. - - - The command line arguments for the external program. - - - - - Gets the filename of the external program to start. - - - The filename of the external program. - - - Override in derived classes to explicitly set the location of the - external tool. - - - - - Exports a .NET assembly to a type library that can be used from unmanaged - code (wraps Microsoft's tlbexp.exe). - - - - See the Microsoft.NET Framework SDK documentation for details. - - - - Export DotNetAssembly.dll to LegacyCOM.dll. - - - ]]> - - - - - - Exports the type library. - - - - - Determines whether the assembly needs to be exported to a type - library again. - - - if the assembly needs to be exported to a - type library; otherwise, . - - - - - Specifies the assembly for which to export a type library. - - - The assembly for which to export a type library. - - See the Microsoft.NET Framework SDK documentation for details. - - - - Specifies the name of the type library file to generate. - - - The name of the type library file to generate. - - See the Microsoft.NET Framework SDK documentation for details. - - - - Specifies the file used to determine capitalization of names in a - type library. - - - The file used to determine capitalization of names in a type library. - - See the Microsoft.NET Framework SDK documentation for details. - - - - Gets the command line arguments for the external program. - - - The command line arguments for the external program. - - - - - Imports a type library to a .NET assembly (wraps Microsoft's tlbimp.exe). - - - - This task lets you easily create interop assemblies. By default, it will - not reimport if the underlying COM TypeLib or reference has not changed. - - - See the Microsoft.NET Framework SDK documentation for details. - - - - Import LegacyCOM.dll to DotNetAssembly.dll. - - - ]]> - - - - - Generate an assembly named "Interop.MSVidCtlLib.dll" for the - MS Video Control 1.0 Type Library, transforming any [out, retval] - parameters of methods on dispinterfaces in the type library into - return values in the managed library. - - - - - - - - ]]> - - - - - - Imports the type library to a .NET assembly. - - - - - Returns the path of the type library, removing the identifier of - the type library from the specified string. - - The path from which to extract the path of the type library. - - The path of the type library without the type library identifier. - - - An example of a path which includes the identifier of the type - library (in this case "2") is - C:\WINDOWS\system32\msvidctl.dll\2. - - - - - Determines whether the type library needs to be imported again. - - - if the type library needs to be imported; - otherwise, . - - - - - Specifies the name of the output file. - - - The name of the output file. - - See the Microsoft.NET Framework SDK documentation for details. - - - - Specifies the namespace in which to produce the assembly. - - - The namespace in which to produce the assembly. - - See the Microsoft.NET Framework SDK documentation for details. - - - - Specifies the version number of the assembly to produce. - - - - The version number of the assembly to produce. - - - The version number should be in the format major.minor.build.revision. - - - See the Microsoft.NET Framework SDK documentation for details. - - - - - - Specifies whether the resulting assembly should be signed with a - strong name using delayed signing. The default is . - - - if the resulting assembly should be signed - with a strong name using delayed signing; otherwise, . - - See the Microsoft.NET Framework SDK documentation for details. - - - - Specifies whether a primary interop assembly should be produced for - the specified type library. The default is . - - - if a primary interop assembly should be - produced; otherwise, . - - See the Microsoft.NET Framework SDK documentation for details. - - - - Specifies the file containing the public key to use to sign the - resulting assembly. - - - The file containing the public key to use to sign the resulting - assembly. - - See the Microsoft.NET Framework SDK documentation for details. - - - - Specifies the publisher's official public/private key pair with which - the resulting assembly should be signed with a strong name. - - - The keyfile to use to sign the resulting assembly with a strong name. - - See the Microsoft.NET Framework SDK documentation for details. - - - - Specifies the key container in which the public/private key pair - should be found that should be used to sign the resulting assembly - with a strong name. - - - The key container containing a public/private key pair that should - be used to sign the resulting assembly. - - See the Microsoft.NET Framework SDK documentation for details. - - - - Specifies the assembly files to use to resolve references to types - defined outside the current type library. - - - The assembly files to use to resolve references to types defined - outside the current type library. - - See the Microsoft.NET Framework SDK documentation for details. - - - - Specifies whether a type library should not be imported if all - references within the current assembly or the reference assemblies - cannot be resolved. The default is . - - - if a type library should not be imported if - all references cannot be resolved; otherwise, . - - See the Microsoft.NET Framework SDK documentation for details. - - - - Specifies whether to import a COM style SafeArray as a managed - class type. The default is . - - - if a COM style SafeArray should be imported - as a managed class type; otherwise, - . - - See the Microsoft.NET Framework SDK documentation for details. - - - - Specifies how to transform the metadata [.NET 1.1 or higher]. - - - - - Specifies the source type library that gets passed to the type - library importer. - - - The source type library that gets passed to the type library - importer. - - See the Microsoft.NET Framework SDK documentation for details. - - - - Specifies whether interfaces should be produced without .NET Framework - security checks. The default is . - - - if interfaces without .NET Framework security - checks should be produced; otherwise, . - - See the Microsoft.NET Framework SDK documentation for details. - - - - Indicates whether tlbimp supports transforming metadata for - a given target framework. The default is . - - - - - Gets the command line arguments for the external program. - - - The command line arguments for the external program. - - - - diff --git a/bin/Nant/NAnt.exe b/bin/Nant/NAnt.exe deleted file mode 100644 index 289c87f5b..000000000 Binary files a/bin/Nant/NAnt.exe and /dev/null differ diff --git a/bin/Nant/NAnt.exe.config b/bin/Nant/NAnt.exe.config deleted file mode 100644 index 15162f9f6..000000000 --- a/bin/Nant/NAnt.exe.config +++ /dev/null @@ -1,1918 +0,0 @@ - - - - -
            -
            - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - - true - - - sn - - - lc - - - false - - - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - - true - - - sn - - - lc - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - true - true - true - true - true - true - - - true - true - true - true - true - true - true - true - - - true - - - true - true - true - true - - - true - true - - - sn - - - lc - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The Framework directory for .NET 3.5 does not exist. - - The Reference Assemblies directory for .NET 3.5 does not exist. - - - - ${path::combine(frameworkDirectoryV35,'csc.exe')} - true - true - true - true - true - true - true - - - ${path::combine(frameworkDirectoryV35,'vbc.exe')} - true - true - true - true - true - true - true - true - - - true - - - true - true - true - true - - - true - true - - - ${path::combine(sdkInstallRoot, 'bin/al.exe')} - - - sn - - - lc - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The .NET Framework 1.1 SDK is not installed. - - - - true - true - true - - - cfresgen - - - sn - - - lc - - - - - - - - - - - - - - - - - - - - - - - - - - - The .NET Framework 2.0 SDK is not installed. - - - - true - true - true - true - true - true - true - true - true - - - true - true - true - true - true - true - true - true - true - - - true - true - - - sn - - - lc - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - true - true - true - true - true - true - true - true - - - true - true - true - true - true - true - true - true - true - - - true - - - true - true - true - true - - - true - true - - - sn - - - lc - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - - ${csc.tool} - true - true - true - ${csc.supportsdocgeneration} - true - true - true - true - - - mjs - true - - - ${mbas.tool} - true - - - ${resgen.tool} - true - - - sn - true - - - false - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - - gmcs - true - true - true - ${csc.supportsdocgeneration} - true - true - true - true - - - mjs - strict - - - vbnc} - true - - - ${resgen.tool} - true - ${resgen.supportsexternalfilereferences} - - - sn - true - - - false - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - - gmcs - true - linq - true - true - true - true - true - true - true - - - mjs - strict - - - vbnc - true - - - true - true - - - sn - true - - - false - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - smcs - true - true - true - true - true - true - true - true - - - true - true - - - sn - - - false - - - - - - - - - - - - - - - - - - - - - - - - - true - - - true - - - sn - - - false - - - true - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Unable to locate 'mono' module using pkg-config. Download the Mono development packages from http://www.mono-project.com/downloads/. - - - - - - - - - - - - - - - - true - - - ${path::combine(prefix, 'lib/mono/1.0/mcs.exe')} - true - true - true - ${csc.supportsdocgeneration} - true - true - true - true - - - mjs - true - - - ${path::combine(prefix, 'lib/mono/1.0/mbas.exe')} - true - - - ${resgen.tool} - true - - - sn - true - - - false - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Unable to locate 'mono' module using pkg-config. Download the Mono development packages from http://www.mono-project.com/downloads/. - - - - - - - - - - - - - - - - - - - - - true - - - gmcs - true - true - true - ${csc.supportsdocgeneration} - true - true - true - true - - - mjs - strict - - - vbnc - true - - - ${resgen.tool} - true - ${resgen.supportsexternalfilereferences} - - - sn - true - - - false - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Unable to locate 'mono' module using pkg-config. Download the Mono development packages from http://www.mono-project.com/downloads/. - - - - - - - - true - - - gmcs - true - linq - true - true - true - true - true - true - true - - - mjs - strict - - - vbnc - true - - - true - true - - - sn - true - - - false - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Unable to locate 'mono' module using pkg-config. Download the Mono development packages from http://www.mono-project.com/downloads/. - - - - - - - smcs - true - true - true - true - true - true - true - true - - - true - true - - - sn - - - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/bin/Nant/NAnt.xml b/bin/Nant/NAnt.xml deleted file mode 100644 index 286dda13f..000000000 --- a/bin/Nant/NAnt.xml +++ /dev/null @@ -1,78 +0,0 @@ - - - - NAnt - - - - - Stub used to created and launch real ConsoleDriver - class in Core assembly. - - - - - Entry point for executable - - Command Line arguments - The result of the real execution - - - - Constructs the privatebinpath. - - - - For the common version dir, we do not use the framework version - as defined in the NAnt configuration file but the CLR version - since the assemblies in that directory are not specific to a - certain family and the framwork version might differ between - families (eg. mono 1.0 == .NET 1.1). - - - The runtime framework. - The base directory of the domain. - - The privatebinpath. - - - - - Given an absolute directory and an absolute file name, returns a - relative file name. - - An absolute directory. - An absolute file name. - - A relative file name for the given absolute file name. - - - - - Helper class for invoking the application entry point in NAnt.Core - and passing the command-line arguments. - - - - - Initializes a new instance of the - class with the specified command-line arguments. - - The commandline arguments passed to NAnt.exe. - Directories relative to the base directory of the AppDomain to probe for missing assembly references. - - - - Invokes the application entry point in NAnt.Core. - - - - - Gets the status that the build process returned when it exited. - - - The code that the build process specified when it terminated. - - - - diff --git a/bin/Nant/NDoc.Documenter.NAnt.dll b/bin/Nant/NDoc.Documenter.NAnt.dll deleted file mode 100644 index 13cfe4170..000000000 Binary files a/bin/Nant/NDoc.Documenter.NAnt.dll and /dev/null differ diff --git a/bin/Nant/extensions/common/2.0/NAnt.MSBuild.dll b/bin/Nant/extensions/common/2.0/NAnt.MSBuild.dll deleted file mode 100644 index 2d5b8ab28..000000000 Binary files a/bin/Nant/extensions/common/2.0/NAnt.MSBuild.dll and /dev/null differ diff --git a/bin/Nant/extensions/common/2.0/NAnt.MSBuild.xml b/bin/Nant/extensions/common/2.0/NAnt.MSBuild.xml deleted file mode 100644 index 21354a756..000000000 --- a/bin/Nant/extensions/common/2.0/NAnt.MSBuild.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - NAnt.MSBuild - - - - - Functions to return information for MSBuild system. - - - - - - - - Test whether project is VS2005 project and could be built using <msbuild> - - The name or path of the project file (csproj, vbproj, ...). - - True, if it is msbuild project, False otherwise. - - - - - Initialize is guaranteed to be called by MSBuild at the start of the build - before any events are raised. - - - - - Analyses Microsoft Visual Studio .NET 2005 (Whidbey) solution files. - !! FOR NOW IT IS PLAIN COPY OF EVERETT (2003) !! - - - - diff --git a/bin/Nant/lib/common/neutral/ICSharpCode.SharpCvsLib.Console.dll b/bin/Nant/lib/common/neutral/ICSharpCode.SharpCvsLib.Console.dll deleted file mode 100644 index fcca99ee6..000000000 Binary files a/bin/Nant/lib/common/neutral/ICSharpCode.SharpCvsLib.Console.dll and /dev/null differ diff --git a/bin/Nant/lib/common/neutral/ICSharpCode.SharpCvsLib.dll b/bin/Nant/lib/common/neutral/ICSharpCode.SharpCvsLib.dll deleted file mode 100644 index fcd2d1add..000000000 Binary files a/bin/Nant/lib/common/neutral/ICSharpCode.SharpCvsLib.dll and /dev/null differ diff --git a/bin/Nant/lib/common/neutral/ICSharpCode.SharpZipLib.dll b/bin/Nant/lib/common/neutral/ICSharpCode.SharpZipLib.dll deleted file mode 100644 index e82d670c7..000000000 Binary files a/bin/Nant/lib/common/neutral/ICSharpCode.SharpZipLib.dll and /dev/null differ diff --git a/bin/Nant/lib/common/neutral/NUnitCore.dll b/bin/Nant/lib/common/neutral/NUnitCore.dll deleted file mode 100644 index 0f1873c1e..000000000 Binary files a/bin/Nant/lib/common/neutral/NUnitCore.dll and /dev/null differ diff --git a/bin/Nant/lib/mono/1.0/NDoc.Core.dll b/bin/Nant/lib/mono/1.0/NDoc.Core.dll deleted file mode 100644 index d360866d4..000000000 Binary files a/bin/Nant/lib/mono/1.0/NDoc.Core.dll and /dev/null differ diff --git a/bin/Nant/lib/mono/1.0/NDoc.Documenter.Msdn.dll b/bin/Nant/lib/mono/1.0/NDoc.Documenter.Msdn.dll deleted file mode 100644 index c0fc50d69..000000000 Binary files a/bin/Nant/lib/mono/1.0/NDoc.Documenter.Msdn.dll and /dev/null differ diff --git a/bin/Nant/lib/mono/1.0/NDoc.ExtendedUI.dll b/bin/Nant/lib/mono/1.0/NDoc.ExtendedUI.dll deleted file mode 100644 index d075d5d79..000000000 Binary files a/bin/Nant/lib/mono/1.0/NDoc.ExtendedUI.dll and /dev/null differ diff --git a/bin/Nant/lib/mono/1.0/nunit.core.dll b/bin/Nant/lib/mono/1.0/nunit.core.dll deleted file mode 100644 index df7f9051c..000000000 Binary files a/bin/Nant/lib/mono/1.0/nunit.core.dll and /dev/null differ diff --git a/bin/Nant/lib/mono/1.0/nunit.framework.dll b/bin/Nant/lib/mono/1.0/nunit.framework.dll deleted file mode 100644 index 5316687ad..000000000 Binary files a/bin/Nant/lib/mono/1.0/nunit.framework.dll and /dev/null differ diff --git a/bin/Nant/lib/mono/1.0/nunit.util.dll b/bin/Nant/lib/mono/1.0/nunit.util.dll deleted file mode 100644 index e9e479ebc..000000000 Binary files a/bin/Nant/lib/mono/1.0/nunit.util.dll and /dev/null differ diff --git a/bin/Nant/lib/mono/2.0/NDoc.Core.dll b/bin/Nant/lib/mono/2.0/NDoc.Core.dll deleted file mode 100644 index d360866d4..000000000 Binary files a/bin/Nant/lib/mono/2.0/NDoc.Core.dll and /dev/null differ diff --git a/bin/Nant/lib/mono/2.0/NDoc.Documenter.Msdn.dll b/bin/Nant/lib/mono/2.0/NDoc.Documenter.Msdn.dll deleted file mode 100644 index c0fc50d69..000000000 Binary files a/bin/Nant/lib/mono/2.0/NDoc.Documenter.Msdn.dll and /dev/null differ diff --git a/bin/Nant/lib/mono/2.0/NDoc.ExtendedUI.dll b/bin/Nant/lib/mono/2.0/NDoc.ExtendedUI.dll deleted file mode 100644 index d075d5d79..000000000 Binary files a/bin/Nant/lib/mono/2.0/NDoc.ExtendedUI.dll and /dev/null differ diff --git a/bin/Nant/lib/mono/2.0/nunit.core.dll b/bin/Nant/lib/mono/2.0/nunit.core.dll deleted file mode 100644 index a11e62341..000000000 Binary files a/bin/Nant/lib/mono/2.0/nunit.core.dll and /dev/null differ diff --git a/bin/Nant/lib/mono/2.0/nunit.framework.dll b/bin/Nant/lib/mono/2.0/nunit.framework.dll deleted file mode 100644 index 44704bd5e..000000000 Binary files a/bin/Nant/lib/mono/2.0/nunit.framework.dll and /dev/null differ diff --git a/bin/Nant/lib/mono/2.0/nunit.util.dll b/bin/Nant/lib/mono/2.0/nunit.util.dll deleted file mode 100644 index 8fff811df..000000000 Binary files a/bin/Nant/lib/mono/2.0/nunit.util.dll and /dev/null differ diff --git a/bin/Nant/lib/net/1.0/NDoc.Core.dll b/bin/Nant/lib/net/1.0/NDoc.Core.dll deleted file mode 100644 index be20f1245..000000000 Binary files a/bin/Nant/lib/net/1.0/NDoc.Core.dll and /dev/null differ diff --git a/bin/Nant/lib/net/1.0/NDoc.Documenter.Msdn.dll b/bin/Nant/lib/net/1.0/NDoc.Documenter.Msdn.dll deleted file mode 100644 index dc5b2fc58..000000000 Binary files a/bin/Nant/lib/net/1.0/NDoc.Documenter.Msdn.dll and /dev/null differ diff --git a/bin/Nant/lib/net/1.0/NDoc.ExtendedUI.dll b/bin/Nant/lib/net/1.0/NDoc.ExtendedUI.dll deleted file mode 100644 index ea29c6da7..000000000 Binary files a/bin/Nant/lib/net/1.0/NDoc.ExtendedUI.dll and /dev/null differ diff --git a/bin/Nant/lib/net/1.0/nunit.core.dll b/bin/Nant/lib/net/1.0/nunit.core.dll deleted file mode 100644 index 7b1916e07..000000000 Binary files a/bin/Nant/lib/net/1.0/nunit.core.dll and /dev/null differ diff --git a/bin/Nant/lib/net/1.0/nunit.framework.dll b/bin/Nant/lib/net/1.0/nunit.framework.dll deleted file mode 100644 index 6038b272f..000000000 Binary files a/bin/Nant/lib/net/1.0/nunit.framework.dll and /dev/null differ diff --git a/bin/Nant/lib/net/1.0/nunit.util.dll b/bin/Nant/lib/net/1.0/nunit.util.dll deleted file mode 100644 index a778921c7..000000000 Binary files a/bin/Nant/lib/net/1.0/nunit.util.dll and /dev/null differ diff --git a/bin/Nant/lib/net/1.1/NDoc.Core.dll b/bin/Nant/lib/net/1.1/NDoc.Core.dll deleted file mode 100644 index 84931f641..000000000 Binary files a/bin/Nant/lib/net/1.1/NDoc.Core.dll and /dev/null differ diff --git a/bin/Nant/lib/net/1.1/NDoc.Documenter.Msdn.dll b/bin/Nant/lib/net/1.1/NDoc.Documenter.Msdn.dll deleted file mode 100644 index bcda52743..000000000 Binary files a/bin/Nant/lib/net/1.1/NDoc.Documenter.Msdn.dll and /dev/null differ diff --git a/bin/Nant/lib/net/1.1/NDoc.ExtendedUI.dll b/bin/Nant/lib/net/1.1/NDoc.ExtendedUI.dll deleted file mode 100644 index 2132a5c4a..000000000 Binary files a/bin/Nant/lib/net/1.1/NDoc.ExtendedUI.dll and /dev/null differ diff --git a/bin/Nant/lib/net/1.1/nunit.core.dll b/bin/Nant/lib/net/1.1/nunit.core.dll deleted file mode 100644 index df7f9051c..000000000 Binary files a/bin/Nant/lib/net/1.1/nunit.core.dll and /dev/null differ diff --git a/bin/Nant/lib/net/1.1/nunit.framework.dll b/bin/Nant/lib/net/1.1/nunit.framework.dll deleted file mode 100644 index 5316687ad..000000000 Binary files a/bin/Nant/lib/net/1.1/nunit.framework.dll and /dev/null differ diff --git a/bin/Nant/lib/net/1.1/nunit.util.dll b/bin/Nant/lib/net/1.1/nunit.util.dll deleted file mode 100644 index e9e479ebc..000000000 Binary files a/bin/Nant/lib/net/1.1/nunit.util.dll and /dev/null differ diff --git a/bin/Nant/lib/net/2.0/NDoc.Core.dll b/bin/Nant/lib/net/2.0/NDoc.Core.dll deleted file mode 100644 index 84931f641..000000000 Binary files a/bin/Nant/lib/net/2.0/NDoc.Core.dll and /dev/null differ diff --git a/bin/Nant/lib/net/2.0/NDoc.Documenter.Msdn.dll b/bin/Nant/lib/net/2.0/NDoc.Documenter.Msdn.dll deleted file mode 100644 index bcda52743..000000000 Binary files a/bin/Nant/lib/net/2.0/NDoc.Documenter.Msdn.dll and /dev/null differ diff --git a/bin/Nant/lib/net/2.0/NDoc.ExtendedUI.dll b/bin/Nant/lib/net/2.0/NDoc.ExtendedUI.dll deleted file mode 100644 index 2132a5c4a..000000000 Binary files a/bin/Nant/lib/net/2.0/NDoc.ExtendedUI.dll and /dev/null differ diff --git a/bin/Nant/lib/net/2.0/nunit.core.dll b/bin/Nant/lib/net/2.0/nunit.core.dll deleted file mode 100644 index a11e62341..000000000 Binary files a/bin/Nant/lib/net/2.0/nunit.core.dll and /dev/null differ diff --git a/bin/Nant/lib/net/2.0/nunit.framework.dll b/bin/Nant/lib/net/2.0/nunit.framework.dll deleted file mode 100644 index 44704bd5e..000000000 Binary files a/bin/Nant/lib/net/2.0/nunit.framework.dll and /dev/null differ diff --git a/bin/Nant/lib/net/2.0/nunit.util.dll b/bin/Nant/lib/net/2.0/nunit.util.dll deleted file mode 100644 index 8fff811df..000000000 Binary files a/bin/Nant/lib/net/2.0/nunit.util.dll and /dev/null differ diff --git a/bin/Nant/log4net.dll b/bin/Nant/log4net.dll deleted file mode 100644 index f37728644..000000000 Binary files a/bin/Nant/log4net.dll and /dev/null differ diff --git a/bin/Nant/scvs.exe b/bin/Nant/scvs.exe deleted file mode 100644 index 34da1bc94..000000000 Binary files a/bin/Nant/scvs.exe and /dev/null differ diff --git a/bin/Newtonsoft.Json.dll b/bin/Newtonsoft.Json.dll deleted file mode 100644 index 782e9c0be..000000000 Binary files a/bin/Newtonsoft.Json.dll and /dev/null differ diff --git a/bin/Newtonsoft.Json.xml b/bin/Newtonsoft.Json.xml deleted file mode 100644 index 472cd5fea..000000000 --- a/bin/Newtonsoft.Json.xml +++ /dev/null @@ -1,4883 +0,0 @@ - - - - Newtonsoft.Json - - - - - Converts a binary value to and from a base 64 string value. - - - - - Converts an object to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Create a custom object - - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The calling serializer. - The object value. - - - - Creates an object which will then be populated by the serializer. - - Type of the object. - - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts an to and from its name string value. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Used to resolve references when serializing and deserializing JSON by the . - - - - - Resolves a reference to its object. - - The reference to resolve. - The object that - - - - Gets the reference for the sepecified object. - - The object to get a reference for. - The reference to the object. - - - - Determines whether the specified object is referenced. - - The object to test for a reference. - - true if the specified object is referenced; otherwise, false. - - - - - Adds a reference to the specified object. - - The reference. - The object to reference. - - - - Specifies reference handling options for the . - - - - - Do not preserve references when serializing types. - - - - - Preserve references when serializing into a JSON object structure. - - - - - Preserve references when serializing into a JSON array structure. - - - - - Preserve references when serializing. - - - - - Provides an interface to enable a class to return line and position information. - - - - - Gets a value indicating whether the class can return line information. - - - true if LineNumber and LinePosition can be provided; otherwise, false. - - - - - Gets the current line number. - - The current line number or 0 if no line information is available (for example, HasLineInfo returns false). - - - - Gets the current line position. - - The current line position or 0 if no line information is available (for example, HasLineInfo returns false). - - - - Instructs the how to serialize the collection. - - - - - Instructs the how to serialize the object. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Gets or sets the id. - - The id. - - - - Gets or sets the title. - - The title. - - - - Gets or sets the description. - - The description. - - - - Gets or sets a value that indicates whether to preserve object reference data. - - - true to keep object reference; otherwise, false. The default is false. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with a flag indicating whether the array can contain null items - - A flag indicating whether the array can contain null items. - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Gets or sets a value indicating whether null items are allowed in the collection. - - true if null items are allowed in the collection; otherwise, false. - - - - Specifies default value handling options for the . - - - - - Include null values when serializing and deserializing objects. - - - - - Ignore null values when serializing and deserializing objects. - - - - - Instructs the to use the specified when serializing the member or class. - - - - - Initializes a new instance of the class. - - Type of the converter. - - - - Gets the type of the converter. - - The type of the converter. - - - - Instructs the how to serialize the object. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified member serialization. - - The member serialization. - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Gets or sets the member serialization. - - The member serialization. - - - - Specifies the settings on a object. - - - - - Initializes a new instance of the class. - - - - - Gets or sets how reference loops (e.g. a class referencing itself) is handled. - - Reference loop handling. - - - - Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. - - Missing member handling. - - - - Gets or sets how objects are created during deserialization. - - The object creation handling. - - - - Gets or sets how null values are handled during serialization and deserialization. - - Null value handling. - - - - Gets or sets how null default are handled during serialization and deserialization. - - The default value handling. - - - - Gets or sets a collection that will be used during serialization. - - The converters. - - - - Gets or sets how object references are preserved by the serializer. - - The preserve references handling. - - - - Gets or sets how type name writing and reading is handled by the serializer. - - The type name handling. - - - - Gets or sets the contract resolver used by the serializer when - serializing .NET objects to JSON and vice versa. - - The contract resolver. - - - - Gets or sets the used by the serializer when resolving references. - - The reference resolver. - - - - Gets or sets the used by the serializer when resolving type names. - - The binder. - - - - Represents a reader that provides validation. - - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. - - - - - Initializes a new instance of the class with the specified . - - - - - Reads the next JSON token from the stream. - - true if the next token was read successfully; false if there are no more tokens to read. - - - - Skips the children of the current token. - - - - - Sets the current token. - - The new token. - - - - Sets the current token and value. - - The new token. - The value. - - - - Sets the state based on current token type. - - - - - Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - - - - - Releases unmanaged and - optionally - managed resources - - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - Changes the to Closed. - - - - - Gets the current reader state. - - The current reader state. - - - - Gets the quotation mark character used to enclose the value of a string. - - - - - Gets the type of the current Json token. - - - - - Gets the text value of the current Json token. - - - - - Gets The Common Language Runtime (CLR) type for the current Json token. - - - - - Gets the depth of the current token in the JSON document. - - The depth of the current token in the JSON document. - - - - Specifies the state of the reader. - - - - - The Read method has not been called. - - - - - The end of the file has been reached successfully. - - - - - Reader is at a property. - - - - - Reader is at the start of an object. - - - - - Reader is in an object. - - - - - Reader is at the start of an array. - - - - - Reader is in an array. - - - - - The Close method has been called. - - - - - Reader has just read a value. - - - - - Reader is at the start of a constructor. - - - - - Reader in a constructor. - - - - - An error occurred that prevents the read operation from continuing. - - - - - The end of the file has been reached successfully. - - - - - Initializes a new instance of the class that - validates the content returned from the given . - - The to read from while validating. - - - - Reads the next JSON token from the stream. - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Sets an event handler for receiving schema validation errors. - - - - - Gets the text value of the current Json token. - - - - - - Gets the depth of the current token in the JSON document. - - The depth of the current token in the JSON document. - - - - Gets the quotation mark character used to enclose the value of a string. - - - - - - Gets the type of the current Json token. - - - - - - Gets The Common Language Runtime (CLR) type for the current Json token. - - - - - - Gets or sets the schema. - - The schema. - - - - Gets the used to construct this . - - The specified in the constructor. - - - - Represents a collection of objects. - - The type of token - - - - Gets the with the specified key. - - - - - - Compares tokens to determine whether they are equal. - - - - - Determines whether the specified objects are equal. - - The first object of type to compare. - The second object of type to compare. - - true if the specified objects are equal; otherwise, false. - - - - - Returns a hash code for the specified object. - - The for which a hash code is to be returned. - A hash code for the specified object. - The type of is a reference type and is null. - - - - Specifies the member serialization options for the . - - - - - All members are serialized by default. Members can be excluded using the . - - - - - Only members must be marked with the are serialized. - - - - - Specifies how object creation is handled by the . - - - - - Reuse existing objects, create new objects when needed. - - - - - Only reuse existing objects. - - - - - Always create new objects. - - - - - Converts a to and from the ISO 8601 date format (e.g. 2008-04-12T12:53Z). - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Gets or sets the date time styles used when converting a date to and from JSON. - - The date time styles used when converting a date to and from JSON. - - - - Gets or sets the date time format used when converting a date to and from JSON. - - The date time format used when converting a date to and from JSON. - - - - Gets or sets the culture used when converting a date to and from JSON. - - The culture used when converting a date to and from JSON. - - - - Converts a to and from a JavaScript date constructor (e.g. new Date(52231943)). - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Specifies whether a DateTime object represents a local time, a Coordinated Universal Time (UTC), or is not specified as either local time or UTC. - - - - - The time represented is local time. - - - - - The time represented is UTC. - - - - - The time represented is not specified as either local time or Coordinated Universal Time (UTC). - - - - - Preserves the DateTimeKind field of a date when a DateTime object is converted to a string and the string is then converted back to a DateTime object. - - - - - Converts an to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The calling serializer. - The value. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The calling serializer. - The object value. - - - - Checks if the attributeName is a namespace attribute. - - Attribute name to test. - The attribute name prefix if it has one, otherwise an empty string. - True if attribute name is for a namespace attribute, otherwise false. - - - - Determines whether this instance can convert the specified value type. - - Type of the value. - - true if this instance can convert the specified value type; otherwise, false. - - - - - Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produces multiple root elements. - - The name of the deserialize root element. - - - - Converts a object to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The calling serializer. - The value. - - - - Determines whether this instance can convert the specified value type. - - Type of the value. - - true if this instance can convert the specified value type; otherwise, false. - - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The calling serializer. - The object value. - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. - - - - - Initializes a new instance of the class with the specified . - - The TextReader containing the XML data to read. - - - - Sets the current token and value. - - The new token. - The value. - - - - Reads the next JSON token from the stream. - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Changes the state to closed. - - - - - Gets a value indicating whether the class can return line information. - - - true if LineNumber and LinePosition can be provided; otherwise, false. - - - - - Gets the current line number. - - - The current line number or 0 if no line information is available (for example, HasLineInfo returns false). - - - - - Gets the current line position. - - - The current line position or 0 if no line information is available (for example, HasLineInfo returns false). - - - - - Instructs the to always serialize the member with the specified name. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified name. - - Name of the property. - - - - Gets or sets the null value handling used when serializing this property. - - The null value handling. - - - - Gets or sets the default value handling used when serializing this property. - - The default value handling. - - - - Gets or sets the reference loop handling used when serializing this property. - - The reference loop handling. - - - - Gets or sets whether this property's value is serialized as a reference. - - Whether this property's value is serialized as a reference. - - - - Gets or sets the name of the property. - - The name of the property. - - - - Gets or sets a value indicating whether this property is required. - - - true if this property is required; otherwise, false. - - - - - Instructs the not to serialize the public field or public read/write property value. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. - - - - - Creates an instance of the JsonWriter class. - - - - - Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. - - - - - Closes this stream and the underlying stream. - - - - - Writes the beginning of a Json object. - - - - - Writes the end of a Json object. - - - - - Writes the beginning of a Json array. - - - - - Writes the end of an array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the end constructor. - - - - - Writes the property name of a name/value pair on a Json object. - - The name of the property. - - - - Writes the end of the current Json object or array. - - - - - Writes the current token. - - The to read the token from. - - - - Writes the specified end token. - - The end token to write. - - - - Writes indent characters. - - - - - Writes the JSON value delimiter. - - - - - Writes an indent space. - - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON without changing the writer's state. - - The raw JSON to write. - - - - Writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes out a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes out the given white space. - - The string of white space characters. - - - - Gets the top. - - The top. - - - - Gets the state of the writer. - - - - - Indicates how the output is formatted. - - - - - Creates an instance of the JsonWriter class using the specified . - - The TextWriter to write to. - - - - Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. - - - - - Closes this stream and the underlying stream. - - - - - Writes the beginning of a Json object. - - - - - Writes the beginning of a Json array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the specified end token. - - The end token to write. - - - - Writes the property name of a name/value pair on a Json object. - - The name of the property. - - - - Writes indent characters. - - - - - Writes the JSON value delimiter. - - - - - Writes an indent space. - - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes out a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes out the given white space. - - The string of white space characters. - - - - Gets or sets how many IndentChars to write for each level in the hierarchy when is set to Formatting.Indented. - - - - - Gets or sets which character to use to quote attribute values. - - - - - Gets or sets which character to use for indenting when is set to Formatting.Indented. - - - - - Gets or sets a value indicating whether object names will be surrounded with quotes. - - - - - The exception thrown when an error occurs while reading Json text. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. - - - - The exception thrown when an error occurs while reading Json text. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. - - - - Gets the line number indicating where the error occurred. - - The line number indicating where the error occurred. - - - - Gets the line position indicating where the error occurred. - - The line position indicating where the error occurred. - - - - Raw JSON content. - - - - - Initializes a new instance of the class. - - The content. - - - - Determines whether the specified is equal to the current . - - The to compare with the current . - - true if the specified is equal to the current ; otherwise, false. - - The parameter is null. - - - - Serves as a hash function for a particular type. - - - A hash code for the current . - - - - - Returns a that represents the current . - - - A that represents the current . - - - - - Creates an instance of with the content of the reader's current token. - - The reader. - An instance of with the content of the reader's current token. - - - - Gets the raw JSON string. - - The raw JSON string. - - - - Represents a collection of . - - - - - Provides methods for converting between common language runtime types and JSON types. - - - - - Represents JavaScript's boolean value true as a string. This field is read-only. - - - - - Represents JavaScript's boolean value false as a string. This field is read-only. - - - - - Represents JavaScript's null as a string. This field is read-only. - - - - - Represents JavaScript's undefined as a string. This field is read-only. - - - - - Represents JavaScript's positive infinity as a string. This field is read-only. - - - - - Represents JavaScript's negative infinity as a string. This field is read-only. - - - - - Represents JavaScript's NaN as a string. This field is read-only. - - - - - Converts the to it's JavaScript string representation. - - The value to convert. - A Json string representation of the . - - - - Converts the to it's JavaScript string representation. - - The value to convert. - A Json string representation of the . - - - - Converts the to it's JavaScript string representation. - - The value to convert. - A Json string representation of the . - - - - Converts the to it's JavaScript string representation. - - The value to convert. - A Json string representation of the . - - - - Converts the to it's JavaScript string representation. - - The value to convert. - A Json string representation of the . - - - - Converts the to it's JavaScript string representation. - - The value to convert. - A Json string representation of the . - - - - Converts the to it's JavaScript string representation. - - The value to convert. - A Json string representation of the . - - - - Converts the to it's JavaScript string representation. - - The value to convert. - A Json string representation of the . - - - - Converts the to it's JavaScript string representation. - - The value to convert. - A Json string representation of the . - - - - Converts the to it's JavaScript string representation. - - The value to convert. - A Json string representation of the . - - - - Converts the to it's JavaScript string representation. - - The value to convert. - A Json string representation of the . - - - - Converts the to it's JavaScript string representation. - - The value to convert. - A Json string representation of the . - - - - Converts the to it's JavaScript string representation. - - The value to convert. - A Json string representation of the . - - - - Converts the to it's JavaScript string representation. - - The value to convert. - A Json string representation of the . - - - - Converts the to it's JavaScript string representation. - - The value to convert. - A Json string representation of the . - - - - Converts the to it's JavaScript string representation. - - The value to convert. - A Json string representation of the . - - - - Converts the to it's JavaScript string representation. - - The value to convert. - A Json string representation of the . - - - - Converts the to it's JavaScript string representation. - - The value to convert. - A Json string representation of the . - - - - Converts the to it's JavaScript string representation. - - The value to convert. - The string delimiter character. - A Json string representation of the . - - - - Converts the to it's JavaScript string representation. - - The value to convert. - A Json string representation of the . - - - - Serializes the specified object to a JSON string. - - The object to serialize. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string. - - The object to serialize. - Indicates how the output is formatted. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a collection of . - - The object to serialize. - A collection converters used while serializing. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using a collection of . - - The object to serialize. - Indicates how the output is formatted. - A collection converters used while serializing. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using a collection of . - - The object to serialize. - Indicates how the output is formatted. - The used to serialize the object. - If this is null, default serialization settings will be is used. - - A JSON string representation of the object. - - - - - Deserializes the specified object to a Json object. - - The object to deserialize. - The deserialized object from the Json string. - - - - Deserializes the specified object to a Json object. - - The object to deserialize. - The of object being deserialized. - The deserialized object from the Json string. - - - - Deserializes the specified object to a Json object. - - The type of the object to deserialize. - The object to deserialize. - The deserialized object from the Json string. - - - - Deserializes the specified JSON to the given anonymous type. - - - The anonymous type to deserialize to. This can't be specified - traditionally and must be infered from the anonymous type passed - as a parameter. - - The object to deserialize. - The anonymous type object. - The deserialized anonymous type from the JSON string. - - - - Deserializes the JSON string to the specified type. - - The type of the object to deserialize. - The object to deserialize. - Converters to use while deserializing. - The deserialized object from the JSON string. - - - - Deserializes the JSON string to the specified type. - - The type of the object to deserialize. - The object to deserialize. - - The used to deserialize the object. - If this is null, default serialization settings will be is used. - - The deserialized object from the JSON string. - - - - Deserializes the JSON string to the specified type. - - The object to deserialize. - The type of the object to deserialize. - Converters to use while deserializing. - The deserialized object from the JSON string. - - - - Deserializes the JSON string to the specified type. - - The object to deserialize. - The type of the object to deserialize. - - The used to deserialize the object. - If this is null, default serialization settings will be is used. - - The deserialized object from the JSON string. - - - - Serializes the XML node to a JSON string. - - The node to serialize. - A JSON string of the XmlNode. - - - - Deserializes the XmlNode from a JSON string. - - The JSON string. - The deserialized XmlNode - - - - Deserializes the XmlNode from a JSON string nested in a root elment. - - The JSON string. - The name of the root element to append when deserializing. - The deserialized XmlNode - - - - The exception thrown when an error occurs during Json serialization or deserialization. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. - - - - Serializes and deserializes objects into and from the JSON format. - The enables you to control how objects are encoded into JSON. - - - - - Initializes a new instance of the class. - - - - - Creates a new instance using the specified . - - The settings to be applied to the . - A new instance using the specified . - - - - Populates the JSON values onto the target object. - - The that contains the JSON structure to reader values from. - The target object to populate values onto. - - - - Populates the JSON values onto the target object. - - The that contains the JSON structure to reader values from. - The target object to populate values onto. - - - - Deserializes the Json structure contained by the specified . - - The that contains the JSON structure to deserialize. - The being deserialized. - - - - Deserializes the Json structure contained by the specified - into an instance of the specified type. - - The containing the object. - The of object being deserialized. - The instance of being deserialized. - - - - Deserializes the Json structure contained by the specified - into an instance of the specified type. - - The containing the object. - The of object being deserialized. - The instance of being deserialized. - - - - Serializes the specified and writes the Json structure - to a Stream using the specified . - - The used to write the Json structure. - The to serialize. - - - - Serializes the specified and writes the Json structure - to a Stream using the specified . - - The used to write the Json structure. - The to serialize. - - - - Gets or sets the used by the serializer when resolving references. - - - - - Gets or sets the used by the serializer when resolving type names. - - - - - Gets or sets how type name writing and reading is handled by the serializer. - - - - - Gets or sets how object references are preserved by the serializer. - - - - - Get or set how reference loops (e.g. a class referencing itself) is handled. - - - - - Get or set how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. - - - - - Get or set how null values are handled during serialization and deserialization. - - - - - Get or set how null default are handled during serialization and deserialization. - - - - - Gets or sets how objects are created during deserialization. - - The object creation handling. - - - - Gets a collection that will be used during serialization. - - Collection that will be used during serialization. - - - - Gets or sets the contract resolver used by the serializer when - serializing .NET objects to JSON and vice versa. - - - - - Contains the LINQ to JSON extension methods. - - - - - Returns a collection of tokens that contains the ancestors of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains the ancestors of every node in the source collection. - - - - Returns a collection of tokens that contains the descendants of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains the descendants of every node in the source collection. - - - - Returns a collection of child properties of every object in the source collection. - - An of that contains the source collection. - An of that contains the properties of every object in the source collection. - - - - Returns a collection of child values of every object in the source collection with the given key. - - An of that contains the source collection. - The token key. - An of that contains the values of every node in the source collection with the given key. - - - - Returns a collection of child values of every object in the source collection. - - An of that contains the source collection. - An of that contains the values of every node in the source collection. - - - - Returns a collection of converted child values of every object in the source collection with the given key. - - The type to convert the values to. - An of that contains the source collection. - The token key. - An that contains the converted values of every node in the source collection with the given key. - - - - Returns a collection of converted child values of every object in the source collection. - - The type to convert the values to. - An of that contains the source collection. - An that contains the converted values of every node in the source collection. - - - - Converts the value. - - The type to convert the value to. - A cast as a of . - A converted value. - - - - Converts the value. - - The source collection type. - The type to convert the value to. - A cast as a of . - A converted value. - - - - Returns a collection of child tokens of every array in the source collection. - - The source collection type. - An of that contains the source collection. - An of that contains the values of every node in the source collection. - - - - Returns a collection of converted child tokens of every array in the source collection. - - An of that contains the source collection. - The type to convert the values to. - The source collection type. - An that contains the converted values of every node in the source collection. - - - - Returns the input typed as . - - An of that contains the source collection. - The input typed as . - - - - Returns the input typed as . - - The source collection type. - An of that contains the source collection. - The input typed as . - - - - Represents a JSON constructor. - - - - - Represents a token that can contain other tokens. - - - - - Represents an abstract JSON token. - - - - - Compares the values of two tokens, including the values of all descendant tokens. - - The first to compare. - The second to compare. - true if the tokens are equal; otherwise false. - - - - Adds the specified content immediately after this token. - - A content object that contains simple content or a collection of content objects to be added after this token. - - - - Adds the specified content immediately before this token. - - A content object that contains simple content or a collection of content objects to be added before this token. - - - - Returns a collection of the ancestor tokens of this token. - - A collection of the ancestor tokens of this token. - - - - Returns a collection of the sibling tokens after this token, in document order. - - A collection of the sibling tokens after this tokens, in document order. - - - - Returns a collection of the sibling tokens before this token, in document order. - - A collection of the sibling tokens before this token, in document order. - - - - Gets the with the specified key converted to the specified type. - - The type to convert the token to. - The token key. - The converted token value. - - - - Returns a collection of the child tokens of this token, in document order. - - An of containing the child tokens of this , in document order. - - - - Returns a collection of the child tokens of this token, in document order, filtered by the specified type. - - The type to filter the child tokens on. - A containing the child tokens of this , in document order. - - - - Returns a collection of the child values of this token, in document order. - - The type to convert the values to. - A containing the child values of this , in document order. - - - - Removes this token from its parent. - - - - - Replaces this token with the specified token. - - The value. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Returns the indented JSON for this token. - - - The indented JSON for this token. - - - - - Returns the JSON for this token using the given formatting and converters. - - Indicates how the output is formatted. - A collection of which will be used when writing the token. - The JSON for this token using the given formatting and converters. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Creates an for this token. - - An that can be used to read this token and its descendants. - - - - Creates a from an object. - - The object that will be used to create . - A with the value of the specified object - - - - Creates a from an object using the specified . - - The object that will be used to create . - The that will be used when reading the object. - A with the value of the specified object - - - - Creates a from a . - - An positioned at the token to read into this . - - An that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Gets a comparer that can compare two tokens for value equality. - - A that can compare two nodes for value equality. - - - - Gets or sets the parent. - - The parent. - - - - Gets the root of this . - - The root of this . - - - - Gets the node type for this . - - The type. - - - - Gets a value indicating whether this token has childen tokens. - - - true if this token has child values; otherwise, false. - - - - - Gets the next sibling token of this node. - - The that contains the next sibling token. - - - - Gets the previous sibling token of this node. - - The that contains the previous sibling token. - - - - Gets the with the specified key. - - The with the specified key. - - - - Get the first child token of this token. - - A containing the first child token of the . - - - - Get the last child token of this token. - - A containing the last child token of the . - - - - Returns a collection of the child tokens of this token, in document order. - - - An of containing the child tokens of this , in document order. - - - - - Returns a collection of the child values of this token, in document order. - - The type to convert the values to. - - A containing the child values of this , in document order. - - - - - Returns a collection of the descendant tokens for this token in document order. - - An containing the descendant tokens of the . - - - - Adds the specified content as children of this . - - The content to be added. - - - - Adds the specified content as the first children of this . - - The content to be added. - - - - Creates an that can be used to add tokens to the . - - An that is ready to have content written to it. - - - - Replaces the children nodes of this token with the specified content. - - The content. - - - - Removes the child nodes from this token. - - - - - Gets a value indicating whether this token has childen tokens. - - - true if this token has child values; otherwise, false. - - - - - Get the first child token of this token. - - - A containing the first child token of the . - - - - - Get the last child token of this token. - - - A containing the last child token of the . - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified name and content. - - The constructor name. - The contents of the constructor. - - - - Initializes a new instance of the class with the specified name and content. - - The constructor name. - The contents of the constructor. - - - - Initializes a new instance of the class with the specified name. - - The constructor name. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Loads an from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Gets or sets the name of this constructor. - - The constructor name. - - - - Gets the node type for this . - - The type. - - - - Gets the with the specified key. - - The with the specified key. - - - - Represents a collection of objects. - - The type of token - - - - An empty collection of objects. - - - - - Initializes a new instance of the struct. - - The enumerable. - - - - Returns an enumerator that iterates through the collection. - - - A that can be used to iterate through the collection. - - - - - Returns an enumerator that iterates through a collection. - - - An object that can be used to iterate through the collection. - - - - - Gets the with the specified key. - - - - - - Represents a JSON object. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified content. - - The contents of the object. - - - - Initializes a new instance of the class with the specified content. - - The contents of the object. - - - - Gets an of this object's properties. - - An of this object's properties. - - - - Gets a the specified name. - - The property name. - A with the specified name or null. - - - - Gets an of this object's property values. - - An of this object's property values. - - - - Loads an from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - - - Creates a from an object. - - The object that will be used to create . - A with the values of the specified object - - - - Creates a from an object. - - The object that will be used to create . - The that will be used to read the object. - A with the values of the specified object - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Adds the specified property name. - - Name of the property. - The value. - - - - Removes the property with the specified name. - - Name of the property. - true if item was successfully removed; otherwise, false. - - - - Tries the get value. - - Name of the property. - The value. - true if a value was successfully retrieved; otherwise, false. - - - - Returns an enumerator that iterates through the collection. - - - A that can be used to iterate through the collection. - - - - - Gets the node type for this . - - The type. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets or sets the with the specified property name. - - - - - - Gets the number of elements contained in the . - - - The number of elements contained in the . - - - - Represents a JSON array. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified content. - - The contents of the array. - - - - Initializes a new instance of the class with the specified content. - - The contents of the array. - - - - Loads an from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - - - Creates a from an object. - - The object that will be used to create . - A with the values of the specified object - - - - Creates a from an object. - - The object that will be used to create . - The that will be used to read the object. - A with the values of the specified object - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Determines the index of a specific item in the . - - The object to locate in the . - - The index of if found in the list; otherwise, -1. - - - - - Inserts an item to the at the specified index. - - The zero-based index at which should be inserted. - The object to insert into the . - - is not a valid index in the . - The is read-only. - - - - Removes the item at the specified index. - - The zero-based index of the item to remove. - - is not a valid index in the . - The is read-only. - - - - Adds an item to the . - - The object to add to the . - The is read-only. - - - - Removes all items from the . - - The is read-only. - - - - Determines whether the contains a specific value. - - The object to locate in the . - - true if is found in the ; otherwise, false. - - - - - Removes the first occurrence of a specific object from the . - - The object to remove from the . - - true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . - - The is read-only. - - - - Gets the node type for this . - - The type. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets or sets the at the specified index. - - - - - - Gets the number of elements contained in the . - - - The number of elements contained in the . - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. - - - - - Initializes a new instance of the class. - - The token to read from. - - - - Reads the next JSON token from the stream. - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. - - - - - Initializes a new instance of the class writing to the given . - - The container being written to. - - - - Initializes a new instance of the class. - - - - - Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. - - - - - Closes this stream and the underlying stream. - - - - - Writes the beginning of a Json object. - - - - - Writes the beginning of a Json array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the end. - - The token. - - - - Writes the property name of a name/value pair on a Json object. - - The name of the property. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Gets the token being writen. - - The token being writen. - - - - Represents a JSON property. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class. - - The property name. - - - - Initializes a new instance of the class. - - The property name. - The property content. - - - - Initializes a new instance of the class. - - The property name. - The property content. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Loads an from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Gets the property name. - - The property name. - - - - Gets or sets the property value. - - The property value. - - - - Gets the node type for this . - - The type. - - - - Specifies the type of token. - - - - - No token type has been set. - - - - - A JSON object. - - - - - A JSON array. - - - - - A JSON constructor. - - - - - A JSON object property. - - - - - A comment. - - - - - An integer value. - - - - - A float value. - - - - - A string value. - - - - - A boolean value. - - - - - A null value. - - - - - An undefined value. - - - - - A date value. - - - - - A raw JSON value. - - - - - Represents a value in JSON (string, integer, date, etc). - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Creates a comment with the given value. - - The value. - A comment with the given value. - - - - Creates a string with the given value. - - The value. - A string with the given value. - - - - Creates a of raw JSON with the given value. - - The value. - A of raw JSON with the given value. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Gets a value indicating whether this token has childen tokens. - - - true if this token has child values; otherwise, false. - - - - - Gets the node type for this . - - The type. - - - - Gets or sets the underlying token value. - - The underlying token value. - - - - Contains the JSON schema extension methods. - - - - - Determines whether the is valid. - - The source to test. - The schema to test with. - - true if the specified is valid; otherwise, false. - - - - - Validates the specified . - - The source to test. - The schema to test with. - - - - Validates the specified . - - The source to test. - The schema to test with. - The validation event handler. - - - - Returns detailed information about the schema exception. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. - - - - Gets the line number indicating where the error occurred. - - The line number indicating where the error occurred. - - - - Gets the line position indicating where the error occurred. - - The line position indicating where the error occurred. - - - - Resolves from an id. - - - - - Initializes a new instance of the class. - - - - - Gets a for the specified id. - - The id. - A for the specified id. - - - - Gets or sets the loaded schemas. - - The loaded schemas. - - - - Specifies undefined schema Id handling options for the . - - - - - Do not infer a schema Id. - - - - - Use the .NET type name as the schema Id. - - - - - Use the assembly qualified .NET type name as the schema Id. - - - - - Returns detailed information related to the . - - - - - Gets the associated with the validation event. - - The JsonSchemaException associated with the validation event. - - - - Gets the text description corresponding to the validation event. - - The text description. - - - - Represents the callback method that will handle JSON schema validation events and the . - - - - - Resolves member mappings for a type, camel casing property names. - - - - - Used by to resolves a for a given . - - - - - Used by to resolves a for a given . - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Initializes a new instance of the class. - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Gets the serializable members for the type. - - The type to get serializable members for. - The serializable members for the type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates properties for the given . - - The contract to create properties for. - Properties for the given . - - - - Creates a for the given . - - The member's declaring types . - The member to create a for. - A created for the given . - - - - Resolves the name of the property. - - Name of the property. - Name of the property. - - - - Gets or sets the default members search flags. - - The default members search flags. - - - - Resolves the name of the property. - - Name of the property. - The property name camel cased. - - - - The default serialization binder used when resolving and loading classes from type names. - - - - - When overridden in a derived class, controls the binding of a serialized object to a type. - - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - The type of the object the formatter creates a new instance of. - - - - - Contract details for a used by the . - - - - - Contract details for a used by the . - - - - - Gets the underlying type for the contract. - - The underlying type for the contract. - - - - Gets or sets whether this type contract is serialized as a reference. - - Whether this type contract is serialized as a reference. - - - - Gets or sets the method called immediately after deserialization of the object. - - The method called immediately after deserialization of the object. - - - - Gets or sets the method called during deserialization of the object. - - The method called during deserialization of the object. - - - - Gets or sets the method called after serialization of the object graph. - - The method called after serialization of the object graph. - - - - Gets or sets the method called before serialization of the object. - - The method called before serialization of the object. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Maps a JSON property to a .NET member. - - - - - Gets the name of the property. - - The name of the property. - - - - Gets the member. - - The member. - - - - Gets a value indicating whether this is ignored. - - true if ignored; otherwise, false. - - - - Gets a value indicating whether this is readable. - - true if readable; otherwise, false. - - - - Gets a value indicating whether this is writable. - - true if writable; otherwise, false. - - - - Gets the member converter. - - The member converter. - - - - Gets the default value. - - The default value. - - - - Gets a value indicating whether this is required. - - true if required; otherwise, false. - - - - Gets a value indicating whether this property preserves object references. - - - true if this instance is reference; otherwise, false. - - - - - Gets the property null value handling. - - The null value handling. - - - - Gets the property default value handling. - - The default value handling. - - - - Gets the property reference loop handling. - - The reference loop handling. - - - - A collection of objects. - - - - - When implemented in a derived class, extracts the key from the specified element. - - The element from which to extract the key. - The key for the specified element. - - - - Adds a object. - - The property to add to the collection. - - - - Tries to get the closest matching object. - First attempts to get an exact case match of propertyName and then - a case insensitive match. - - Name of the property. - A matching property if found. - A flag indicating whether a match was found. - - - - Tries to get a property by property name. - - The name of the property to get. - Type property name string comparison. - A matching property if found. - A flag indicating whether a match was found. - - - - Specifies missing member handling options for the . - - - - - Ignore a missing member and do not attempt to deserialize it. - - - - - Throw a when a missing member is encountered during deserialization. - - - - - Specifies null value handling options for the . - - - - - Include null values when serializing and deserializing objects. - - - - - Ignore null values when serializing and deserializing objects. - - - - - Specifies reference loop handling options for the . - - - - - Throw a when a loop is encountered. - - - - - Ignore loop references and do not serialize. - - - - - Serialize loop references. - - - - - An in-memory representation of a JSON Schema. - - - - - Initializes a new instance of the class. - - - - - Reads a from the specified . - - The containing the JSON Schema to read. - The object representing the JSON Schema. - - - - Reads a from the specified . - - The containing the JSON Schema to read. - The to use when resolving schema references. - The object representing the JSON Schema. - - - - Load a from a string that contains schema JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - - - Parses the specified json. - - The json. - The resolver. - A populated from the string that contains JSON. - - - - Writes this schema to a . - - A into which this method will write. - - - - Writes this schema to a using the specified . - - A into which this method will write. - The resolver used. - - - - Returns a that represents the current . - - - A that represents the current . - - - - - Gets or sets the id. - - - - - Gets or sets the title. - - - - - Gets or sets whether the object is optional. - - - - - Gets or sets whether the object is read only. - - - - - Gets or sets whether the object is visible to users. - - - - - Gets or sets whether the object is transient. - - - - - Gets or sets the description of the object. - - - - - Gets or sets the types of values allowed by the object. - - The type. - - - - Gets or sets the pattern. - - The pattern. - - - - Gets or sets the minimum length. - - The minimum length. - - - - Gets or sets the maximum length. - - The maximum length. - - - - Gets or sets the maximum decimals. - - The maximum decimals. - - - - Gets or sets the minimum. - - The minimum. - - - - Gets or sets the maximum. - - The maximum. - - - - Gets or sets the minimum number of items. - - The minimum number of items. - - - - Gets or sets the maximum number of items. - - The maximum number of items. - - - - Gets or sets the of items. - - The of items. - - - - Gets or sets the of properties. - - The of properties. - - - - Gets or sets the of additional properties. - - The of additional properties. - - - - Gets or sets a value indicating whether additional properties are allowed. - - - true if additional properties are allowed; otherwise, false. - - - - - Gets or sets the required property if this property is present. - - The required property if this property is present. - - - - Gets or sets the identity. - - The identity. - - - - Gets or sets the a collection of valid enum values allowed. - - A collection of valid enum values allowed. - - - - Gets or sets a collection of options. - - A collection of options. - - - - Gets or sets disallowed types. - - The disallow types. - - - - Gets or sets the default value. - - The default value. - - - - Gets or sets the extend . - - The extended . - - - - Gets or sets the format. - - The format. - - - - Generates a from a specified . - - - - - Generate a from the specified type. - - The type to generate a from. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - The used to resolve schema references. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - Specify whether the generated root will be nullable. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - The used to resolve schema references. - Specify whether the generated root will be nullable. - A generated from the specified type. - - - - Gets or sets how undefined schemas are handled by the serializer. - - - - - Gets or sets the contract resolver. - - The contract resolver. - - - - The value types allowed by the . - - - - - No type specified. - - - - - String type. - - - - - Float type. - - - - - Integer type. - - - - - Boolean type. - - - - - Object type. - - - - - Array type. - - - - - Null type. - - - - - Any type. - - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Gets or sets the object member serialization. - - The member object serialization. - - - - Gets the object's properties. - - The object's properties. - - - - Specifies type name handling options for the . - - - - - Do not include the .NET type name when serializing types. - - - - - Include the .NET type name when serializing into a JSON object structure. - - - - - Include the .NET type name when serializing into a JSON array structure. - - - - - Always include the .NET type name when serializing. - - - - - Converts the value to the specified type. - - The type to convert the value to. - The value to convert. - The converted type. - - - - Converts the value to the specified type. - - The type to convert the value to. - The value to convert. - The culture to use when converting. - The converted type. - - - - Converts the value to the specified type. - - The value to convert. - The culture to use when converting. - The type to convert the value to. - The converted type. - - - - Converts the value to the specified type. - - The type to convert the value to. - The value to convert. - The converted value if the conversion was successful or the default value of T if it failed. - - true if initialValue was converted successfully; otherwise, false. - - - - - Converts the value to the specified type. - - The type to convert the value to. - The value to convert. - The culture to use when converting. - The converted value if the conversion was successful or the default value of T if it failed. - - true if initialValue was converted successfully; otherwise, false. - - - - - Converts the value to the specified type. - - The value to convert. - The culture to use when converting. - The type to convert the value to. - The converted value if the conversion was successful or the default value of T if it failed. - - true if initialValue was converted successfully; otherwise, false. - - - - - Converts the value to the specified type. If the value is unable to be converted, the - value is checked whether it assignable to the specified type. - - The type to convert or cast the value to. - The value to convert. - The converted type. If conversion was unsuccessful, the initial value is returned if assignable to the target type - - - - Converts the value to the specified type. If the value is unable to be converted, the - value is checked whether it assignable to the specified type. - - The type to convert or cast the value to. - The value to convert. - The culture to use when converting. - The converted type. If conversion was unsuccessful, the initial value is returned if assignable to the target type - - - - Converts the value to the specified type. If the value is unable to be converted, the - value is checked whether it assignable to the specified type. - - The value to convert. - The culture to use when converting. - The type to convert or cast the value to. - - The converted type. If conversion was unsuccessful, the initial value - is returned if assignable to the target type. - - - - - Converts the value to the specified type. If the value is unable to be converted, the - value is checked whether it assignable to the specified type. - - The type to convert the value to. - The value to convert. - The converted value if the conversion was successful or the default value of T if it failed. - - true if initialValue was converted successfully or is assignable; otherwise, false. - - - - - Converts the value to the specified type. If the value is unable to be converted, the - value is checked whether it assignable to the specified type. - - The type to convert the value to. - The value to convert. - The culture to use when converting. - The converted value if the conversion was successful or the default value of T if it failed. - - true if initialValue was converted successfully or is assignable; otherwise, false. - - - - - Converts the value to the specified type. If the value is unable to be converted, the - value is checked whether it assignable to the specified type. - - The value to convert. - The culture to use when converting. - The type to convert the value to. - The converted value if the conversion was successful or the default value of T if it failed. - - true if initialValue was converted successfully or is assignable; otherwise, false. - - - - - Parses the specified enum member name, returning it's value. - - Name of the enum member. - - - - - Parses the specified enum member name, returning it's value. - - Name of the enum member. - If set to true ignore case. - - - - - Gets a dictionary of the names and values of an Enum type. - - - - - - Gets a dictionary of the names and values of an Enum type. - - - - - - Gets a dictionary of the names and values of an Enum type. - - The enum type to get names and values for. - - - - - Gets the maximum valid value of an Enum type. Flags enums are ORed. - - The type of the returned value. Must be assignable from the enum's underlying value type. - The enum type to get the maximum value for. - - - - - Specifies the type of Json token. - - - - - This is returned by the if a method has not been called. - - - - - An object start token. - - - - - An array start token. - - - - - An object property name. - - - - - A constructor end token. - - - - - A comment. - - - - - Raw JSON. - - - - - An interger. - - - - - A float. - - - - - A string. - - - - - A boolean. - - - - - A null token. - - - - - An undefined token. - - - - - An object end token. - - - - - An array end token. - - - - - A constructor start token. - - - - - A Date. - - - - - Specifies the state of the . - - - - - An exception has been thrown, which has left the in an invalid state. - You may call the method to put the in the Closed state. - Any other method calls results in an being thrown. - - - - - The method has been called. - - - - - An object is being written. - - - - - A array is being written. - - - - - A constructor is being written. - - - - - A property is being written. - - - - - A write method has not been called. - - - - - Specifies formatting options for the . - - - - - No special formatting is applied. This is the default. - - - - - Causes child objects to be indented according to the and settings. - - - - - Builds a string. Unlike StringBuilder this class lets you reuse it's internal buffer. - - - - - Determines whether the collection is null or empty. - - The collection. - - true if the collection is null or empty; otherwise, false. - - - - - Determines whether the collection is null or empty. - - The collection. - - true if the collection is null or empty; otherwise, false. - - - - - Determines whether the collection is null, empty or its contents are uninitialized values. - - The list. - - true if the collection is null or empty or its contents are uninitialized values; otherwise, false. - - - - - Makes a slice of the specified list in between the start and end indexes. - - The list. - The start index. - The end index. - A slice of the list. - - - - Makes a slice of the specified list in between the start and end indexes, - getting every so many items based upon the step. - - The list. - The start index. - The end index. - The step. - A slice of the list. - - - - Group the collection using a function which returns the key. - - The source collection to group. - The key selector. - A Dictionary with each key relating to a list of objects in a list grouped under it. - - - - Adds the elements of the specified collection to the specified generic IList. - - The list to add to. - The collection of elements to add. - - - - Gets the type of the typed collection's items. - - The type. - The type of the typed collection's items. - - - - Tests whether the list's items are their unitialized value. - - The list. - Whether the list's items are their unitialized value - - - - Gets the member's underlying type. - - The member. - The underlying type of the member. - - - - Determines whether the member is an indexed property. - - The member. - - true if the member is an indexed property; otherwise, false. - - - - - Determines whether the property is an indexed property. - - The property. - - true if the property is an indexed property; otherwise, false. - - - - - Gets the member's value on the object. - - The member. - The target object. - The member's value on the object. - - - - Sets the member's value on the target object. - - The member. - The target. - The value. - - - - Determines whether the specified MemberInfo can be read. - - The MemberInfo to determine whether can be read. - - true if the specified MemberInfo can be read; otherwise, false. - - - - - Determines whether the specified MemberInfo can be set. - - The MemberInfo to determine whether can be set. - - true if the specified MemberInfo can be set; otherwise, false. - - - - - Determines whether the string contains white space. - - The string to test for white space. - - true if the string contains white space; otherwise, false. - - - - - Determines whether the string is all white space. Empty string will return false. - - The string to test whether it is all white space. - - true if the string is all white space; otherwise, false. - - - - - Ensures the target string ends with the specified string. - - The target. - The value. - The target string with the value string at the end. - - - - Perform an action if the string is not null or empty. - - The value. - The action to perform. - - - - Indents the specified string. - - The string to indent. - The number of characters to indent by. - - - - - Indents the specified string. - - The string to indent. - The number of characters to indent by. - The indent character. - - - - - Numbers the lines. - - The string to number. - - - - - Nulls an empty string. - - The string. - Null if the string was null, otherwise the string unchanged. - - - diff --git a/bin/Rhino.Mocks.dll b/bin/Rhino.Mocks.dll deleted file mode 100644 index 4b6904b6f..000000000 Binary files a/bin/Rhino.Mocks.dll and /dev/null differ diff --git a/bin/Rhino.Mocks.xml b/bin/Rhino.Mocks.xml deleted file mode 100644 index 7518b3ef4..000000000 --- a/bin/Rhino.Mocks.xml +++ /dev/null @@ -1,5226 +0,0 @@ - - - - Rhino.Mocks.Partial - - - - - Interface for constraints - - - - - determains if the object pass the constraints - - - - - And operator for constraints - - - - - Not operator for constraints - - - - - Or operator for constraints - - - - - Allow overriding of || or && - - - - - - - Allow overriding of || or && - - - - - - - Gets the message for this constraint - - - - - - Initializes a new constraint object. - - The expected object, The actual object is passed in as a parameter to the method - - - - Evaluate this constraint. - - The actual object that was passed in the method call to the mock. - True when the constraint is met, else false. - - - - Checks if the properties of the object - are the same as the properies of the object. - - The expected object - The actual object - True when both objects have the same values, else False. - - - - - - - - - This is the real heart of the beast. - - - - Used by CheckReferenceType to check all properties of the reference type. - - The expected object - The actual object - True when both objects have the same values, else False. - - - - Used by CheckReferenceType to check all fields of the reference type. - - The expected object - The actual object - True when both objects have the same values, else False. - - - - Checks the items of both collections - - The expected collection - - True if both collections contain the same items in the same order. - - - - Builds a propertyname from the Stack _properties like 'Order.Product.Price' - to be used in the error message. - - A nested property name. - - - - Rhino.Mocks uses this property to generate an error message. - - - A message telling the tester why the constraint failed. - - - - - Constrain that the public field has a specified value - - - - - Constrain that the public field matches another constraint. - - - - - Creates a new instance. - - Name of the public field. - Constraint to place on the public field value. - - - - Creates a new instance, specifying a disambiguating - for the public field. - - The type that declares the public field, used to disambiguate between public fields. - Name of the public field. - Constraint to place on the public field value. - - - - Determines if the object passes the constraint. - - - - - Gets the message for this constraint - - - - - - Creates a new instance. - - Name of the public field. - Expected value. - - - - Creates a new instance, specifying a disambiguating - for the public field. - - The type that declares the public field, used to disambiguate between public fields. - Name of the public field. - Expected value. - - - - Constrain that the property has a specified value - - - - - Constrain that the property matches another constraint. - - - - - Creates a new instance. - - Name of the property. - Constraint to place on the property value. - - - - Creates a new instance, specifying a disambiguating - for the property. - - The type that declares the property, used to disambiguate between properties. - Name of the property. - Constraint to place on the property value. - - - - Determines if the object passes the constraint. - - - - - Gets the message for this constraint - - - - - - Creates a new instance. - - Name of the property. - Expected value. - - - - Creates a new instance, specifying a disambiguating - for the property. - - The type that declares the property, used to disambiguate between properties. - Name of the property. - Expected value. - - - - Constrain that the parameter must be of the specified type - - - - - Creates a new instance. - - Type. - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Constraint that determines whether an object is the same object as another. - - - - - Creates a new instance. - - Obj. - - - - Determines if the object passes the constraints. - - - - - Gets the message for this constraint. - - - - - Evaluate a parameter using constraints - - - - - Create new instance - - - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - A constraint based on lambda expression, we are using Expression{T} - because we want to be able to get good error reporting on that. - - - - - Initializes a new instance of the class. - - The expr. - - - - determains if the object pass the constraints - - - - - - - Gets the message for this constraint - - - - - - Constrain that the list contains the same items as the parameter list - - - - - Creates a new instance. - - In list. - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Constrain that the parameter is one of the items in the list - - - - - Creates a new instance. - - In list. - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Constrain that the object is inside the parameter list - - - - - Creates a new instance. - - In list. - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Applies another AbstractConstraint to the collection count. - - - - - Creates a new instance. - - The constraint that should be applied to the collection count. - - - - Determines if the parameter conforms to this constraint. - - - - - Gets the message for this constraint. - - - - - Applies another AbstractConstraint to a specific list element. - - - - - Creates a new instance. - - The zero-based index of the list element. - The constraint that should be applied to the list element. - - - - Determines if the parameter conforms to this constraint. - - - - - Gets the message for this constraint - - - - - - Applies another AbstractConstraint to a specific generic keyed list element. - - - - - Creates a new instance. - - The key of the list element. - The constraint that should be applied to the list element. - - - - Determines if the parameter conforms to this constraint. - - - - - Gets the message for this constraint - - - - - - Constrains that all elements are in the parameter list - - - - - Initializes a new instance of the class. - - The these. - - - - determains if the object pass the constraints - - - - - - - Gets the message for this constraint - - - - - - Combines two constraints, constraint pass if either is fine. - - - - - Creates a new instance. - - C1. - C2. - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Negate a constraint - - - - - Creates a new instance. - - C1. - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Combines two constraints - - - - - - Creates a new instance. - - C1. - C2. - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Constrain the argument to validate according to regex pattern - - - - - Creates a new instance. - - Pattern. - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Constraint that evaluate whatever an argument contains the specified string. - - - - - Creates a new instance. - - Inner string. - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Constraint that evaluate whatever an argument ends with the specified string - - - - - Creates a new instance. - - End. - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Constraint that evaluate whatever an argument start with the specified string - - - - - Creates a new instance. - - Start. - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Constraint that evaluate whatever an object equals another - - - - - Creates a new instance. - - Obj. - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Constraint that always returns true - - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Constraint that evaluate whatever a comparable is greater than another - - - - - Creates a new instance. - - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Central location for constraints - - - - - Evaluate a greater than constraint for . - - The object the parameter should be greater than - - - - Evaluate a less than constraint for . - - The object the parameter should be less than - - - - Evaluate a less than or equal constraint for . - - The object the parameter should be less than or equal to - - - - Evaluate a greater than or equal constraint for . - - The object the parameter should be greater than or equal to - - - - Evaluate an equal constraint for . - - The object the parameter should equal to - - - - Evaluate a not equal constraint for . - - The object the parameter should not equal to - - - - Evaluate a same as constraint. - - The object the parameter should the same as. - - - - Evaluate a not same as constraint. - - The object the parameter should not be the same as. - - - - A constraints that accept anything - - - - - - A constraint that accept only nulls - - - - - - A constraint that accept only non null values - - - - - - A constraint that accept only value of the specified type - - - - - A constraint that accept only value of the specified type - - - - - Evaluate a parameter using a predicate - - The predicate to use - - - - Provides access to the constraintes defined in the class to be used in context - with the syntax. - - The type of the argument - - - - Evaluate a greater than constraint for . - - The object the parameter should be greater than - - - - Evaluate a less than constraint for . - - The object the parameter should be less than - - - - Evaluate a less than or equal constraint for . - - The object the parameter should be less than or equal to - - - - Evaluate a greater than or equal constraint for . - - The object the parameter should be greater than or equal to - - - - Evaluate an equal constraint for . - - The object the parameter should equal to - - - - Evaluate a not equal constraint for . - - The object the parameter should not equal to - - - - Evaluate a same as constraint. - - The object the parameter should the same as. - - - - Evaluate a not same as constraint. - - The object the parameter should not be the same as. - - - - Throws NotSupportedException. Don't use Equals to define constraints. Use Equal instead. - - - - - - - Serves as a hash function for a particular type. - - - A hash code for the current . - - - - - A constraints that accept anything - - - - - - A constraint that accept only nulls - - - - - - A constraint that accept only non null values - - - - - - A constraint that accept only value of the specified type. - The check is performed on the type that has been defined - as the argument type. - - - - - Central location for constraints about lists and collections - - - - - Determines whether the specified obj is in the paramter. - The parameter must be IEnumerable. - - Obj. - - - - - Determains whatever the parameter is in the collection. - - - - - Determains that the parameter collection is identical to the specified collection - - - - - Determines that the parameter collection has the specified number of elements. - - The constraint that should be applied to the collection count. - - - - Determines that an element of the parameter collections conforms to another AbstractConstraint. - - The zero-based index of the list element. - The constraint which should be applied to the list element. - - - - Determines that an element of the parameter collections conforms to another AbstractConstraint. - - The key of the element. - The constraint which should be applied to the element. - - - - Determines that all elements of the specified collection are in the the parameter collection - - The collection to compare against - The constraint which should be applied to the list parameter. - - - - Provides access to the constraintes defined in the class to be used in context - with the syntax. - - - - - Determines whether the specified object is in the paramter. - The parameter must be IEnumerable. - - Obj. - - - - - Determains whatever the parameter is in the collection. - - - - - Determains that the parameter collection is identical to the specified collection - - - - - Determines that the parameter collection has the specified number of elements. - - The constraint that should be applied to the collection count. - - - - Determines that an element of the parameter collections conforms to another AbstractConstraint. - - The zero-based index of the list element. - The constraint which should be applied to the list element. - - - - Determines that all elements of the specified collection are in the the parameter collection - - The collection to compare against - The constraint which should be applied to the list parameter. - - - - Throws NotSupportedException. Don't use Equals to define constraints. Use Equal instead. - - - - - - - Serves as a hash function for a particular type. - - - A hash code for the current . - - - - - Provides a dummy field to pass as out or ref argument. - - - - - - Dummy field to satisfy the compiler. Used for out and ref arguments. - - - - - Central location for constraints for object's properties - - - - - Constrains the parameter to have property with the specified value - - Name of the property. - Expected value. - - - - - Constrains the parameter to have property with the specified value. - - The type that declares the property, used to disambiguate between properties. - Name of the property. - Expected value. - - - - - Constrains the parameter to have a property satisfying a specified constraint. - - Name of the property. - Constraint for the property. - - - - Constrains the parameter to have a property satisfying a specified constraint. - - The type that declares the property, used to disambiguate between properties. - Name of the property. - Constraint for the property. - - - - Determines whether the parameter has the specified property and that it is null. - - Name of the property. - - - - - Determines whether the parameter has the specified property and that it is null. - - The type that declares the property, used to disambiguate between properties. - Name of the property. - - - - - Determines whether the parameter has the specified property and that it is not null. - - Name of the property. - - - - - Determines whether the parameter has the specified property and that it is not null. - - The type that declares the property, used to disambiguate between properties. - Name of the property. - - - - - constraints the parameter to have the exact same property values as the expected object. - - An object, of the same type as the parameter, whose properties are set with the expected values. - An instance of the constraint that will do the actual check. - - The parameter's public property values and public field values will be matched against the expected object's - public property values and public field values. The first mismatch will be reported and no further matching is done. - The matching is recursive for any property or field that has properties or fields of it's own. - Collections are supported through IEnumerable, which means the constraint will check if the actual and expected - collection contain the same values in the same order, where the values contained by the collection can have properties - and fields of their own that will be checked as well because of the recursive nature of this constraint. - - - - - Central location for constraints for object's public fields - - - - - Constrains the parameter to have a public field with the specified value - - Name of the public field. - Expected value. - - - - - Constrains the parameter to have a public field with the specified value. - - The type that declares the public field, used to disambiguate between public fields. - Name of the public field. - Expected value. - - - - - Constrains the parameter to have a public field satisfying a specified constraint. - - Name of the public field. - Constraint for the public field. - - - - Constrains the parameter to have a public field satisfying a specified constraint. - - The type that declares the public field, used to disambiguate between public fields. - Name of the public field. - Constraint for the public field. - - - - Determines whether the parameter has the specified public field and that it is null. - - Name of the public field. - - - - - Determines whether the parameter has the specified public field and that it is null. - - The type that declares the public field, used to disambiguate between public fields. - Name of the public field. - - - - - Determines whether the parameter has the specified public field and that it is not null. - - Name of the public field. - - - - - Determines whether the parameter has the specified public field and that it is not null. - - The type that declares the public field, used to disambiguate between public fields. - Name of the public field. - - - - - Central location for all text related constraints - - - - - Constrain the argument to starts with the specified string - - - - - Constrain the argument to end with the specified string - - - - - Constrain the argument to contain the specified string - - - - - Constrain the argument to validate according to regex pattern - - - - - Provides access to the constraintes defined in the class to be used in context - with the syntax. - - - - - Constrain the argument to starts with the specified string - - - - - - Constrain the argument to end with the specified string - - - - - Constrain the argument to contain the specified string - - - - - Constrain the argument to validate according to regex pattern - - - - - Throws NotSupportedException. Don't use Equals to define constraints. Use Equal instead. - - - - - - - Serves as a hash function for a particular type. - - - A hash code for the current . - - - - - An expectaton violation was detected. - - - - - Creates a new instance. - - Message. - - - - Serialization constructor - - - - - Signals that an object was call on a mock repostiroy which doesn't - belong to this mock repository or not a mock - - - - - Creates a new instance. - - Message. - - - - Serialization constructor - - - - - Abstract class that holds common information for - expectations. - - - - - Interface to validate that a method call is correct. - - - - - Validate the arguments for the method. - This method can be called numerous times, so be careful about side effects - - The arguments with which the method was called - - - - Add an actual method call to this expectation - - - - - Returns the return value or throw the exception and setup any output / ref parameters - that has been set. - - - - - Allow to set the return value in the future, if it was already set. - - - - - Builds the verification failure message. - - - - - - Gets the error message. - - - - - - Range of expected calls - - - - - Number of call actually made for this method - - - - - If this expectation is still waiting for calls. - - - - - The return value for a method matching this expectation - - - - - Gets or sets the exception to throw on a method matching this expectation. - - - - - Gets a value indicating whether this instance's action is staisfied. - A staisfied instance means that there are no more requirements from - this method. A method with non void return value must register either - a return value or an exception to throw. - - - - - Gets the method this expectation is for. - - - - - Gets or sets what special condtions there are for this method - repeating. - - - - - Gets a value indicating whether this expectation was satisfied - - - - - Specify whatever this expectation has a return value set - You can't check ReturnValue for this because a valid return value include null. - - - - - An action to execute when the method is matched. - - - - - Set the out / ref parameters for the method call. - The indexing is zero based and ignores any non out/ref parameter. - It is possible not to pass all the parameters. This method can be called only once. - - - - - Documentation Message - - - - - Gets the invocation for this expectation - - The invocation. - - - - Occurs when the exceptation is match on a method call - - - - - Number of actuall calls made that passed this expectation - - - - - Range of expected calls that should pass this expectation. - - - - - The return value for a method matching this expectation - - - - - The exception to throw on a method matching this expectation. - - - - - The method this expectation is for. - - - - - The return value for this method was set - - - - - Whether this method will repeat - unlimited number of times. - - - - - A delegate that will be run when the - expectation is matched. - - - - - The arguments that matched this expectation. - - - - - Documentation message - - - - - The method originalInvocation - - - - - Get the hash code - - - - - Add an actual actualMethodCall call to this expectation - - - - - Builds the verification failure message. - - - - - - Allow to set the return value in the future, if it was already set. - - - - - Returns the return value or throw the exception and setup output / ref parameters - - - - - Validate the arguments for the method on the child methods - - The arguments with which the method was called - - - - Creates a new instance. - - The originalInvocation for this method, required because it contains the generic type infromation - - - - Creates a new instance. - - Expectation. - - - - Validate the arguments for the method on the child methods - - The arguments with which the method was called - - - - Determines if this object equal to obj - - - - - The error message for these arguments - - - - - Asserts that the delegate has the same parameters as the expectation's method call - - - - - Setter for the outpur / ref parameters for this expecataion. - Can only be set once. - - - - - Specify whatever this expectation has a return value set - You can't check ReturnValue for this because a valid return value include null. - - - - - Gets the method this expectation is for. - - - - - Gets the originalInvocation for this expectation - - The originalInvocation. - - - - Gets or sets what special condtions there are for this method - - - - - Range of expected calls - - - - - Number of call actually made for this method - - - - - If this expectation is still waiting for calls. - - - - - Gets a value indicating whether this expectation was satisfied - - - - - The return value for a method matching this expectation - - - - - An action to execute when the method is matched. - - - - - Gets or sets the exception to throw on a method matching this expectation. - - - - - Gets a value indicating whether this instance's action is staisfied. - A staisfied instance means that there are no more requirements from - this method. A method with non void return value must register either - a return value or an exception to throw or an action to execute. - - - - - Documentation message - - - - - Occurs when the exceptation is match on a method call - - - - - Gets the error message. - - - - - - Expectation that matchs any arguments for the method. - - - - - Creates a new instance. - - Invocation for this expectation - - - - Creates a new instance. - - Expectation. - - - - Validate the arguments for the method. - - The arguments with which the method was called - - - - Determines if the object equal to expectation - - - - - Get the hash code - - - - - Gets the error message. - - - - - - Summary description for ArgsEqualExpectation. - - - - - Creates a new instance. - - Expected args. - The invocation for this expectation - - - - Validate the arguments for the method. - - The arguments with which the method was called - - - - Determines if the object equal to expectation - - - - - Get the hash code - - - - - Gets the error message. - - - - - - Get the expected args. - - - - - Call a specified callback to verify the expectation - - - - - Creates a new instance. - - Expectation. - Callback. - - - - Creates a new instance. - - Invocation for this expectation - Callback. - - - - Validate the arguments for the method on the child methods - - The arguments with which the method was called - - - - Determines if the object equal to expectation - - - - - Get the hash code - - - - - Gets the error message. - - - - - - Expect the method's arguments to match the contraints - - - - - Creates a new instance. - - Invocation for this expectation - Constraints. - - - - Creates a new instance. - - Expectation. - Constraints. - - - - Validate the arguments for the method. - - The arguments with which the method was called - - - - Determines if the object equal to expectation - - - - - Get the hash code - - - - - Gets the error message. - - - - - - ExpectationsList - - - - - Dictionary - - - - - Dictionary class - - - - - Create a new instance of ProxyStateDictionary - - - - - Operation on a remoting proxy - - - It is not possible to directly communicate to a real proxy via transparent proxy. - Transparent proxy impersonates a user type and only methods of that user type are callable. - The only methods that are guaranteed to exist on any transparent proxy are methods defined - in Object: namely ToString(), GetHashCode(), and Equals()). - - These three methods are the only way to tell the real proxy to do something. - Equals() is the most suitable of all, since it accepts an arbitrary object parameter. - The RemotingProxy code is built so that if it is compared to an IRemotingProxyOperation, - transparentProxy.Equals(operation) will call operation.Process(realProxy). - This way we can retrieve a real proxy from transparent proxy and perform - arbitrary operation on it. - - - - - Implementation of IInvocation based on remoting proxy - - Some methods are marked NotSupported since they either don't make sense - for remoting proxies, or they are never called by Rhino Mocks - - - - Generates remoting proxies and provides utility functions - - - - - Create the proxy using remoting - - - - - Check whether an object is a transparent proxy with a RemotingProxy behind it - - Object to check - true if the object is a transparent proxy with a RemotingProxy instance behind it, false otherwise - We use Equals() method to communicate with the real proxy behind the object. - See IRemotingProxyOperation for more details - - - - Retrieve a mocked object from a transparent proxy - - Transparent proxy with a RemotingProxy instance behind it - Mocked object associated with the proxy - We use Equals() method to communicate with the real proxy behind the object. - See IRemotingProxyOperation for more details - - - - Allows to call a method and immediatly get it's options. - - - - - Interface to allows to call a method and immediatly get it's options. - - - - - Get the method options for the call - - The method call should go here, the return value is ignored - - - - Creates a new instance. - - - - - Get the method options for the call - - The method call should go here, the return value is ignored - - - - Allows to call a method and immediatly get it's options. - Set the expected number for the call to Any() - - - - - Creates a new instance. - - Proxy. - Mocked instance. - - - - Get the method options for the call - - The method call should go here, the return value is ignored - - - - This class is reponsible for taking a delegate and creating a wrapper - interface around it, so it can be mocked. - - - - - The scope for all the delegate interfaces create by this mock repositroy. - - - - - Gets a type with an "Invoke" method suitable for use as a target of the - specified delegate type. - - - - - - - Raise events for all subscribers for an event - - - - - Raise events for all subscribers for an event - - - - - Raise the event - - - - - The most common form for the event handler signature - - - - - Create an event raise for the specified event on this instance. - - - - - Creates a new instance of EventRaiser - - - - - Raise the event - - - - - The most common signature for events - Here to allow intellisense to make better guesses about how - it should suggest parameters. - - - - - Allows to define what would happen when a method - is called. - - - - - Allows to define what would happen when a method - is called. - - - - - Set the return value for the method. - - The object the method will return - IRepeat that defines how many times the method will return this value - - - - Allow to override this return value in the future - - IRepeat that defines how many times the method will return this value - - - - Throws the specified exception when the method is called. - - Exception to throw - - - - Ignores the arguments for this method. Any argument will be matched - againt this method. - - - - - Add constraints for the method's arguments. - - - - - Set a callback method for the last call - - - - - Set a delegate to be called when the expectation is matched. - The delegate return value will be returned from the expectation. - - - - - Set a delegate to be called when the expectation is matched. - The delegate return value will be returned from the expectation. - - - - - Set a delegate to be called when the expectation is matched. - The delegate return value will be returned from the expectation. - - - - - Set a delegate to be called when the expectation is matched. - The delegate return value will be returned from the expectation. - - - - - Set a delegate to be called when the expectation is matched. - The delegate return value will be returned from the expectation. - - - - - Set a delegate to be called when the expectation is matched. - The delegate return value will be returned from the expectation. - - - - - Set a delegate to be called when the expectation is matched. - The delegate return value will be returned from the expectation. - - - - - Set a delegate to be called when the expectation is matched. - The delegate return value will be returned from the expectation. - - - - - Set a delegate to be called when the expectation is matched. - The delegate return value will be returned from the expectation. - - - - - Set a delegate to be called when the expectation is matched. - The delegate return value will be returned from the expectation. - - - - - Set a delegate to be called when the expectation is matched. - The delegate return value will be returned from the expectation. - - - - - Set a delegate to be called when the expectation is matched. - The delegate return value will be returned from the expectation. - - - - - Set a delegate to be called when the expectation is matched - and allow to optionally modify the invocation as needed - - - - - Call the original method on the class, bypassing the mocking layers. - - - - - - Call the original method on the class, optionally bypassing the mocking layers. - - - - - - Use the property as a simple property, getting/setting the values without - causing mock expectations. - - - - - Expect last (property) call as property setting, ignore the argument given - - - - - - Expect last (property) call as property setting with a given argument. - - - - - - - Get an event raiser for the last subscribed event. - - - - - Set the parameter values for out and ref parameters. - This is done using zero based indexing, and _ignoring_ any non out/ref parameter. - - - - - Documentation message for the expectation - - Message - - - - Better syntax to define repeats. - - - - - Allows to specify the number of time for method calls - - - - - Repeat the method twice. - - - - - Repeat the method once. - - - - - Repeat the method at least once, then repeat as many time as it would like. - - - - - Repeat the method any number of times. - This has special affects in that this method would now ignore orderring. - - - - - Set the range to repeat an action. - - Min. - Max. - - - - Set the amount of times to repeat an action. - - - - - This method must not appear in the replay state. - This has special affects in that this method would now ignore orderring. - - - - - Creates a new instance. - - the repository for this expectation - the recorder for this proxy - the proxy for this expectation - Expectation. - - - - Add constraints for the method's arguments. - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a delegate to be called when the expectation is matched. - The delegate return value will be returned from the expectation. - - - - - Set a delegate to be called when the expectation is matched. - The delegate return value will be returned from the expectation. - - - - - Set the return value for the method. - - The object the method will return - IRepeat that defines how many times the method will return this value - - - - Set the return value for the method, but allow to override this return value in the future - - IRepeat that defines how many times the method will return this value - - - - Throws the specified exception when the method is called. - - Exception to throw - - - - Ignores the arguments for this method. Any argument will be matched - againt this method. - - - - - Call the original method on the class, bypassing the mocking layers. - - - - - - Call the original method on the class, optionally bypassing the mocking layers - - - - - - Use the property as a simple property, getting/setting the values without - causing mock expectations. - - - - - Expect last (property) call as property setting, ignore the argument given - - - - - - Expect last (property) call as property setting with a given argument. - - - - - - - Gets the event raiser for the last event - - - - - Set the parameter values for out and ref parameters. - This is done using zero based indexing, and _ignoring_ any non out/ref parameter. - - - - - Repeat the method twice. - - - - - Repeat the method once. - - - - - Repeat the method at least once, then repeat as many time as it would like. - - - - - This method must not appear in the replay state. - - - - - Documentation message for the expectation - - Message - - - - Repeat the method any number of times. - - - - - Set the range to repeat an action. - - Min. - Max. - - - - Set the amount of times to repeat an action. - - - - - Better syntax to define repeats. - - - - - This class will provide hash code for hashtables without needing - to call the GetHashCode() on the object, which may very well be mocked. - This class has no state so it is a singelton to avoid creating a lot of objects - that does the exact same thing. See flyweight patterns. - - - - - Get the hash code for a proxy object without calling GetHashCode() - on the object. - - - - - Compares two instances of mocked objects - - - - - Compare two mocked objects - - - - - The next hash code value for a mock object. - This is safe for multi threading. - - - - - The sole instance of - - - - - Doesn't log anything, just makes happy noises - - - - - Log expectations - allows to see what is going on inside Rhino Mocks - - - - - Logs the expectation as is was recorded - - The invocation. - The expectation. - - - - Logs the expectation as it was recorded - - The invocation. - The expectation. - - - - Logs the unexpected method call. - - The invocation. - The message. - - - - Logs the expectation as is was recorded - - The invocation. - The expectation. - - - - Logs the expectation as it was recorded - - The invocation. - The expectation. - - - - Logs the unexpected method call. - - The invocation. - The message. - - - - This is a dummy type that is used merely to give DynamicProxy the proxy instance that - it needs to create IProxy's types. - - - - - Interface to find the repository of a mocked object - - - - - Return true if it should call the original method on the object - instead of pass it to the message chain. - - The method to call - - - - Register a method to be called on the object directly - - - - - Register a property on the object that will behave as a simple property - - - - - Check if the method was registered as a property method. - - - - - Do get/set on the property, according to need. - - - - - Do add/remove on the event - - - - - Get the subscribers of a spesific event - - - - - Gets the declaring type of the method, taking into acccount the possible generic - parameters that it was created with. - - - - - Clears the state of the object, remove original calls, property behavior, subscribed events, etc. - - - - - Get all the method calls arguments that were made against this object with the specificed - method. - - - Only method calls in replay mode are counted - - - - - Records the method call - - - - - The unique hash code of this mock, which is not related - to the value of the GetHashCode() call on the object. - - - - - Gets the repository. - - - - - Gets the implemented types by this mocked object - - The implemented. - - - - Gets or sets the constructor arguments. - - The constructor arguments. - - - - Create a new instance of - - - - - Return true if it should call the original method on the object - instead of pass it to the message chain. - - The method to call - - - - Register a method to be called on the object directly - - - - - Register a property on the object that will behave as a simple property - Return true if there is already a value for the property - - - - - Check if the method was registered as a property method. - - - - - Do get/set on the property, according to need. - - - - - Do add/remove on the event - - - - - Get the subscribers of a spesific event - - - - - Gets the declaring type of the method, taking into acccount the possible generic - parameters that it was created with. - - - - - Get all the method calls arguments that were made against this object with the specificed - method. - - - - - Only method calls in replay mode are counted - - - - - Records the method call - - - - - - - Clears the state of the object, remove original calls, property behavior, subscribed events, etc. - - - - - The unique hash code of this proxy, which is not related - to the value of the GetHashCode() call on the object. - - - - - Gets the repository. - - - - - Gets or sets the constructor arguments. - - The constructor arguments. - - - - Gets the implemented types by this mocked object - - The implemented. - - - - Range for expected method calls - - - - - Creates a new instance. - - Min. - Max. - - - - Return the string representation of this range. - - - - - Gets or sets the min. - - - - - - Gets or sets the max. - - - - - - Records all the expectations for a mock and - return a ReplayDynamicMockState when Replay() - is called. - - - - - Records all the expectations for a mock - - - - - Different actions on this mock - - - - - Add a method call for this state' mock. - - The invocation for this method - The method that was called - The arguments this method was called with - - - - Verify that this mock expectations have passed. - - - - - Verify that we can move to replay state and move - to the reply state. - - - - - Gets a mock state that match the original mock state of the object. - - - - - Get the options for the last method call - - - - - Set the exception to throw when Verify is called. - This is used to report exception that may have happened but where caught in the code. - This way, they are reported anyway when Verify() is called. - - - - - This method is called to indicate that a property behavior call. - This is done so we generate good error message in the common case of people using - Stubbed properties with Return(). - - - - - Gets the matching verify state for this state - - - - - Get the options for the last method call - - - - - Get the options for the last method call - - - - - Set the exception to throw when Verify is called. - This is used to report exception that may have happened but where caught in the code. - This way, they are reported anyway when Verify() is called. - - - - - This method is called to indicate that a property behavior call. - This is done so we generate good error message in the common case of people using - Stubbed properties with Return(). - - - - - Creates a new instance. - - Repository. - The proxy that generates the method calls - - - - Add a method call for this state' mock. - - The invocation for this method - The method that was called - The arguments this method was called with - - - - Verify that we can move to replay state and move - to the reply state. - - - - - Verify that we can move to replay state and move - to the reply state. - - - - - Verify that this mock expectations have passed. - - - - - Gets a mock state that match the original mock state of the object. - - - - - Asserts the previous method is closed (had an expectation set on it so we can replay it correctly) - - - - - Gets the last expectation. - - - - - Gets the total method calls count. - - - - - Get the options for the last method call - - - - - Gets the matching verify state for this state - - - - - Creates a new instance. - - Repository. - The proxy that generates the method calls - - - - Verify that we can move to replay state and move - to the reply state. - - - - - Gets a mock state that match the original mock state of the object. - - - - - Records all the expectations for a mock and - return a ReplayPartialMockState when Replay() - is called. - - - - - Creates a new instance. - - Repository. - The proxy that generates the method calls - - - - Verify that we can move to replay state and move - to the reply state. - - - - - Gets a mock state that match the original mock state of the object. - - - - - Options for special repeat option - - - - - This method can be called only as many times as the IMethodOptions.Expect allows. - - - - - This method should never be called - - - - - This method can be call any number of times - - - - - This method will call the original method - - - - - This method will call the original method, bypassing the mocking layer - - - - - This method will simulate simple property behavior - - - - - Validate all expectations on a mock and ignores calls to - any method that was not setup properly. - - - - - Validate all expectations on a mock - - - - - The repository for this state - - - - - The proxy object for this state - - - - - Get the options for the last method call - - - - - Creates a new instance. - - The previous state for this method - - - - Add a method call for this state' mock. - - The invocation for this method - The method that was called - The arguments this method was called with - - - - Add a method call for this state' mock. - This allows derived method to cleanly get a the setupresult behavior while adding - their own. - - The invocation for this method - The method that was called - The arguments this method was called with - - - - Set the exception to throw when Verify is called. - This is used to report exception that may have happened but where caught in the code. - This way, they are reported anyway when Verify() is called. - - - - - not relevant - - - - - Verify that this mock expectations have passed. - - - - - Verify that we can move to replay state and move - to the reply state. - - - - - Gets a mock state that match the original mock state of the object. - - - - - Get the options for the last method call - - - - - Gets the matching verify state for this state - - - - - Creates a new instance. - - The previous state for this method - - - - Add a method call for this state' mock. - - The invocation for this method - The method that was called - The arguments this method was called with - - - - Gets a mock state that match the original mock state of the object. - - - - - Validate all expectations on a mock and ignores calls to - any method that was not setup properly. - - - - - Creates a new instance. - - The previous state for this method - - - - Add a method call for this state' mock. - - The invocation for this method - The method that was called - The arguments this method was called with - - - - Gets a mock state that match the original mock state of the object. - - - - - Summary description for RhinoInterceptor. - - - - - Creates a new instance. - - - - - Intercept a method call and direct it to the repository. - - - - - Behave like a stub, all properties and events acts normally, methods calls - return default values by default (but can use expectations to set them up), etc. - - - - - Initializes a new instance of the class. - - The proxy that generates the method calls - Repository. - - - - We don't care much about expectations here, so we will remove the exepctation if - it is not closed. - - - - - Verify that we can move to replay state and move - to the reply state. - - - - - - Validate expectations on recorded methods, but in general completely ignoring them. - Similar to except that it would return a - when BackToRecord is called. - - - - - Initializes a new instance of the class. - - The previous state for this method - - - - Add a method call for this state' mock. - - The invocation for this method - The method that was called - The arguments this method was called with - - - - Gets a mock state that match the original mock state of the object. - - - - - Rudimetry implementation that simply logs methods calls as text. - - - - - Initializes a new instance of the class. - - The writer. - - - - Logs the expectation as is was recorded - - The invocation. - The expectation. - - - - Logs the expectation as it was recorded - - The invocation. - The expectation. - - - - Logs the unexpected method call. - - The invocation. - The message. - - - - Write rhino mocks log info to the trace - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - if set to true [log recorded]. - if set to true [log replayed]. - if set to true [log unexpected]. - - - - Logs the expectation as is was recorded - - The invocation. - The expectation. - - - - Logs the expectation as it was recorded - - The invocation. - The expectation. - - - - Logs the unexpected method call. - - The invocation. - The message. - - - - Writes log information as stack traces about rhino mocks activity - - - - - Allows to redirect output to a different location. - - - - - Logs the expectation as is was recorded - - The invocation. - The expectation. - - - - Logs the expectation as it was recorded - - The invocation. - The expectation. - - - - Logs the unexpected method call. - - The invocation. - The message. - - - - Validate arguments for methods - - - - - Validate that the passed argument is not null. - - The object to validate - The name of the argument - - If the obj is null, an ArgumentNullException with the passed name - is thrown. - - - - - Validate that the arguments are equal. - - Expected args. - Actual Args. - - - - Validate that the two argument are equals, including validation for - when the arguments are collections, in which case it will validate their values. - - - - - This method is safe for use even if any of the objects is a mocked object - that override equals. - - - - - Throw an object already verified when accessed - - - - - Create a new instance of VerifiedMockState - - The previous mock state, used to get the initial record state - - - - Add a method call for this state' mock. - - The invocation for this method - The method that was called - The arguments this method was called with - - - - Verify that this mock expectations have passed. - - - - - Verify that we can move to replay state and move - to the reply state. - - - - - Gets a mock state that match the original mock state of the object. - - - - - Get the options for the last method call - - - - - Set the exception to throw when Verify is called. - This is used to report exception that may have happened but where caught in the code. - This way, they are reported anyway when Verify() is called. - - - - - not relevant - - - - - Gets the matching verify state for this state - - - - - Get the options for the last method call - - - - - Records the actions on all the mocks created by a repository. - - - - - Records the specified call with the specified args on the mocked object. - - - - - Get the expectation for this method on this object with this arguments - - - - - This check the methods that were setup using the SetupResult.For() - or LastCall.Repeat.Any() and that bypass the whole expectation model. - - - - - Gets the all expectations for a mocked object and method combination, - regardless of the expected arguments / callbacks / contraints. - - Mocked object. - Method. - List of all relevant expectation - - - - Gets the all expectations for proxy. - - Mocked object. - List of all relevant expectation - - - - Removes all the repeatable expectations for proxy. - - Mocked object. - - - - Replaces the old expectation with the new expectation for the specified proxy/method pair. - This replace ALL expectations that equal to old expectations. - - Proxy. - Method. - Old expectation. - New expectation. - - - - Adds the recorder and turn it into the active recorder. - - Recorder. - - - - Moves to previous recorder. - - - - - Gets the recorded expectation or null. - - - - - Gets the next expected calls string. - - - - - Moves to parent recorder. - - - - - Set the expectation so it can repeat any number of times. - - - - - Removes the expectation from the recorder - - - - - Clear the replayer to call (and all its chain of replayers) - This also removes it from the list of expectations, so it will never be considered again - - - - - Get the expectation for this method on this object with this arguments - - - - - Gets a value indicating whether this instance has expectations that weren't satisfied yet. - - - true if this instance has expectations; otherwise, false. - - - - - Marker interface used to indicate that this is a partial mock. - - - - - Options for CallOriginalMethod - - - - - No expectation is created, the method will be called directly - - - - - Normal expectation is created, but when the method is later called, it will also call the original method - - - - - Base class for method recorders, handle delegating to inner recorder if needed. - - - - - List of the expected actions on for this recorder - The legal values are: - * Expectations - * Method Recorders - - - - - The current recorder. - - - - - The current replayer; - - - - - The parent recorder of this one, may be null. - - - - - This contains a list of all the replayers that should be ignored - for a spesific method call. A replayer gets into this list by calling - ClearReplayerToCall() on its parent. This list is Clear()ed on each new invocation. - - - - - All the repeatable methods calls. - - - - - Counts the recursion depth of the current expectation search stack - - - - - Creates a new instance. - - - - - Creates a new instance. - - Parent recorder. - Repeatable methods - - - - Records the specified call with the specified args on the mocked object. - - - - - Get the expectation for this method on this object with this arguments - - - - - Gets the all expectations for a mocked object and method combination, - regardless of the expected arguments / callbacks / contraints. - - Mocked object. - Method. - List of all relevant expectation - - - - Gets the all expectations for proxy. - - Mocked object. - List of all relevant expectation - - - - Replaces the old expectation with the new expectation for the specified proxy/method pair. - This replace ALL expectations that equal to old expectations. - - Proxy. - Method. - Old expectation. - New expectation. - - - - Remove the all repeatable expectations for proxy. - - Mocked object. - - - - Set the expectation so it can repeat any number of times. - - - - - Removes the expectation from the recorder - - - - - Adds the recorder and turn it into the active recorder. - - Recorder. - - - - Moves to previous recorder. - - - - - Moves to parent recorder. - - - - - Gets the recorded expectation or null. - - - - - Clear the replayer to call (and all its chain of replayers). - This also removes it from the list of expectations, so it will never be considered again - - - - - Get the expectation for this method on this object with this arguments - - - - - Gets the next expected calls string. - - - - - Handles the real getting of the recorded expectation or null. - - - - - Handle the real execution of this method for the derived class - - - - - Handle the real execution of this method for the derived class - - - - - Handle the real execution of this method for the derived class - - - - - Handle the real execution of this method for the derived class - - - - - Handle the real execution of this method for the derived class - - - - - Handle the real execution of this method for the derived class - - - - - Should this replayer be considered valid for this call? - - - - - This check the methods that were setup using the SetupResult.For() - or LastCall.Repeat.Any() and that bypass the whole expectation model. - - - - - Gets a value indicating whether this instance has expectations that weren't satisfied yet. - - - true if this instance has expectations; otherwise, false. - - - - - Handle the real execution of this method for the derived class - - - - - Ordered collection of methods, methods must arrive in specified order - in order to pass. - - - - - Unordered collection of method records, any expectation that exist - will be matched. - - - - - The parent recorder we have redirected to. - Useful for certain edge cases in orderring. - See: FieldProblem_Entropy for the details. - - - - - Creates a new instance. - - Parent recorder. - Repeatable methods - - - - Creates a new instance. - - - - - Records the specified call with the specified args on the mocked object. - - Mocked object. - Method. - Expectation. - - - - Get the expectation for this method on this object with this arguments - - Invocation for this method - Mocked object. - Method. - Args. - True is the call was recorded, false otherwise - - - - Gets the all expectations for a mocked object and method combination, - regardless of the expected arguments / callbacks / contraints. - - Mocked object. - Method. - List of all relevant expectation - - - - Gets the all expectations for proxy. - - Mocked object. - List of all relevant expectation - - - - Replaces the old expectation with the new expectation for the specified proxy/method pair. - This replace ALL expectations that equal to old expectations. - - Proxy. - Method. - Old expectation. - New expectation. - - - - Handle the real execution of this method for the derived class - - - - - Handles the real getting of the recorded expectation or null. - - - - - Handle the real execution of this method for the derived class - - - - - Gets the next expected calls string. - - - - - Create an exception for an unexpected method call. - - - - - Gets a value indicating whether this instance has expectations that weren't satisfied yet. - - - true if this instance has expectations; otherwise, false. - - - - - Creates a new instance. - - Parent recorder. - Repetable methods - - - - Creates a new instance. - - - - - Handles the real getting of the recorded expectation or null. - - - - - Get the expectation for this method on this object with this arguments - - - - - Gets the next expected calls string. - - - - - Hold an expectation for a method call on an object - - - - - Creates a new instance. - - Proxy. - Method. - Expectation. - - - - Determains if the object equal to this instance - - Obj. - - - - - Gets the hash code. - - - - - - Gets the proxy. - - - - - - Gets the method. - - - - - - Gets the expectation. - - - - - - Holds a pair of mocked object and a method - and allows to compare them against each other. - This allows us to have a distinction between mockOne.MyMethod() and - mockTwo.MyMethod()... - - - - - Creates a new instance. - - Proxy. - Method. - - - - Determains whatever obj equals to this instance. - ProxyMethodPairs are equals when they point to the same /instance/ of - an object, and to the same method. - - Obj. - - - - - Gets the hash code. - - - - - - Gets the proxy. - - - - - - Gets the method. - - - - - - Change the recorder from ordered to unordered and vice versa - - - - - Creates a new instance. - - - - - Disposes this instance. - - - - - Utility class for dealing with messing generics scenarios. - - - - - There are issues with trying to get this to work correctly with open generic types, since this is an edge case, - I am letting the runtime handle it. - - - - - Gets the real type, including de-constructing and constructing the type of generic - methods parameters. - - The type. - The invocation. - - - - - Because we need to support complex types here (simple generics were handled above) we - need to be aware of the following scenarios: - List[T] and List[Foo[T]] - - - - - Utility class for working with method calls. - - - - - Return the string representation of a method call and its arguments. - - The method - The method arguments - Invocation of the method, used to get the generics arguments - Delegate to format the parameter - The string representation of this method call - - - - Return the string representation of a method call and its arguments. - - The invocation of the method, used to get the generic parameters - The method - The method arguments - The string representation of this method call - - - - Delegate to format the argument for the string representation of - the method call. - - - - - Utility to get the default value for a type - - - - - The default value for a type. - Null for reference types and void - 0 for value types. - First element for enums - Note that we need to get the value even for opened generic types, such as those from - generic methods. - - Type. - The invocation. - the default value - - - - Defines constraints and return values for arguments of a mock. - Only use Arg inside a method call on a mock that is recording. - Example: - ExpectCall( - mock.foo( - Arg<int>.Is.GreaterThan(2), - Arg<string>.Is.Anything - )); - Use Arg.Text for string specific constraints - Use Arg<ListClass>.List for list specific constraints - - - - - - Register the predicate as a constraint for the current call. - - The predicate. - default(T) - - Allow you to use code to create constraints - - demo.AssertWasCalled(x => x.Bar(Arg{string}.Matches(a => a.StartsWith("b") && a.Contains("ba")))); - - - - - - Define a complex constraint for this argument by passing several constraints - combined with operators. (Use Is in simple cases.) - Example: Arg<string>.Matches(Is.Equal("Hello") || Text.EndsWith("u")); - - Constraints using Is, Text and List - Dummy to satisfy the compiler - - - - Define a Ref argument. - - Constraints for this argument - value returned by the mock - - - - - Define a out parameter. Use it together with the keyword out and use the - Dummy field available by the return value. - Example: mock.foo( out Arg<string>.Out("hello").Dummy ); - - - - - - - Define a simple constraint for this argument. (Use Matches in simple cases.) - Example: - Arg<int>.Is.Anthing - Arg<string>.Is.Equal("hello") - - - - - Define Constraints on list arguments. - - - - - Use the Arg class (without generic) to define Text constraints - - - - - Evaluate an equal constraint for . - - The object the parameter should equal to - - - - Define constraints on text arguments. - - - - - Used to manage the static state of the Arg<T> class"/> - - - - - Resets the static state - - - - - Returns return values for the out and ref parameters - Note: the array returned has the size of the number of out and ref - argument definitions - - - - - - Returns the constraints for all arguments. - Out arguments have an Is.Anything constraint and are also in the list. - - - - - - What should BackToRecord clear - - - - - Retain all expectations and behaviors and return to mock - - - - - All expectations - - - - - Event subscribers for this instance - - - - - Methods that should be forwarded to the base class implementation - - - - - Properties that should behave like properties - - - - - Remove all the behavior of the object - - - - - This delegate is compatible with the System.Func{T,R} signature - We have to define our own to get compatability with 2.0 - - - - - This class defines a lot of method signatures, which we will use - to allow compatability on net-2.0 - - - - - dummy - - - - - dummy - - - - - dummy - - - - - dummy - - - - - dummy - - - - - dummy - - - - - dummy - - - - - dummy - - - - - dummy - - - - - dummy - - - - - dummy - - - - - dummy - - - dummy - - - - - dummy - - - - - dummy - - - - - dummy - - - - - dummy - - - - - dummy - - - - - dummy - - - - - dummy - - - - - dummy - - - - - dummy - - - - - Allows expectations to be set on methods that should never be called. - For methods with void return value, you need to use LastCall or - DoNotExpect.Call() with a delegate. - - - - - Sets LastCall.Repeat.Never() on /any/ proxy on /any/ repository on the current thread. - This method if not safe for multi threading scenarios. - - - - - Accepts a delegate that will execute inside the method which - LastCall.Repeat.Never() will be applied to. - It is expected to be used with anonymous delegates / lambda expressions and only one - method should be called. - - - IService mockSrv = mocks.CreateMock(typeof(IService)) as IService; - DoNotExpect.Call(delegate{ mockSrv.Stop(); }); - ... - - - - - Allows to set expectation on methods that has return values. - For methods with void return value, you need to use LastCall - - - - - The method options for the last call on /any/ proxy on /any/ repository on the current thread. - This method if not safe for multi threading scenarios, use . - - - - - Accepts a delegate that will execute inside the method, and then return the resulting - instance. - It is expected to be used with anonymous delegates / lambda expressions and only one - method should be called. - - - IService mockSrv = mocks.CreateMock(typeof(IService)) as IService; - Expect.Call(delegate{ mockSrv.Start(); }).Throw(new NetworkException()); - ... - - - - - Get the method options for the last method call on the mockInstance. - - - - - A delegate that can be used to get better syntax on Expect.Call(delegate { foo.DoSomething(); }); - - - - - Allows to set various options for the last method call on - a specified object. - If the method has a return value, it's recommended to use Expect - - - - - Allows to get an interface to work on the last call. - - The mocked object - Interface that allows to set options for the last method call on this object - - - - Set the return value for the method. - - The object the method will return - IRepeat that defines how many times the method will return this value - - - - Set the return value for the method. This overload is needed for LastCall.Return(null) - - The object the method will return - IRepeat that defines how many times the method will return this value - - - - Throws the specified exception when the method is called. - - Exception to throw - - - - Ignores the arguments for this method. Any argument will be matched - againt this method. - - - - - Add constraints for the method's arguments. - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Call the original method on the class, bypassing the mocking layers, for the last call. - - - - - Call the original method on the class, optionally bypassing the mocking layers, for the last call. - - - - - Set a delegate to be called when the expectation is matched. - The delegate return value will be returned from the expectation. - - - - - Gets an interface that will raise the last event when called. - - - - - Set the parameter values for out and ref parameters. - This is done using zero based indexing, and _ignoring_ any non out/ref parameter. - - - - - Documentation message for the expectation - - Message - - - - Use the property as a simple property, getting/setting the values without - causing mock expectations. - - - - - Better syntax to define repeats. - - - - - This is a data structure that is used by - to pass - the current method to the relevant delegate - - - - - Initializes a new instance of the class. - - The invocation. - - - - Gets the args for this method invocation - - - - - Gets or sets the return value for this method invocation - - The return value. - - - - Accessor for the current mocker - - - - - The current mocker - - - - - Creates proxied instances of types. - - - Adds optional new usage: - using(mockRepository.Record()) { - Expect.Call(mock.Method()).Return(retVal); - } - using(mockRepository.Playback()) { - // Execute code - } - N.B. mockRepository.ReplayAll() and mockRepository.VerifyAll() - calls are taken care of by Record/Playback - - - - - This is a map of types to ProxyGenerators. - - - - - This is used to record the last repository that has a method called on it. - - - - - this is used to get to the last proxy on this repository. - - - - - For mock delegates, maps the proxy instance from intercepted invocations - back to the delegate that was originally returned to client code, if any. - - - - - All the proxies in the mock repositories - - - - - This is here because we can't put it in any of the recorders, since repeatable methods - have no orderring, and if we try to handle them using the usual manner, we would get into - wierd situations where repeatable method that was defined in an orderring block doesn't - exists until we enter this block. - - - - - Creates a new instance. - - - - - Move the repository to ordered mode - - - - - Move the repository to un-ordered mode - - - - - Creates a mock for the specified type. - - Type. - Arguments for the class' constructor, if mocking a concrete class - - - - Creates a strict mock for the specified type. - - Type. - Arguments for the class' constructor, if mocking a concrete class - - - - Creates a remoting mock for the specified type. - - Type. - Arguments for the class' constructor, if mocking a concrete class - - - - Creates a strict remoting mock for the specified type. - - Type. - Arguments for the class' constructor, if mocking a concrete class - - - - Creates a remoting mock for the specified type. - - - Arguments for the class' constructor, if mocking a concrete class - - - - - Creates a strict remoting mock for the specified type. - - - Arguments for the class' constructor, if mocking a concrete class - - - - - Creates a mock from several types, with strict semantics. - Only may be a class. - - - - - Creates a strict mock from several types, with strict semantics. - Only may be a class. - - - - - Creates a mock from several types, with strict semantics. - Only may be a class. - - The main type to mock. - Extra interface types to mock. - Arguments for the class' constructor, if mocking a concrete class. - - - - Creates a strict mock from several types, with strict semantics. - Only may be a class. - - The main type to mock. - Extra interface types to mock. - Arguments for the class' constructor, if mocking a concrete class. - - - - Creates a mock from several types, with dynamic semantics. - Only may be a class. - - The main type to mock. - Extra interface types to mock. - - - - Creates a mock from several types, with dynamic semantics. - Only may be a class. - - The main type to mock. - Extra interface types to mock. - Arguments for the class' constructor, if mocking a concrete class. - - - - Creates a dynamic mock for the specified type. - - Type. - Arguments for the class' constructor, if mocking a concrete class - - - - Creates a dynamic mock for the specified type. - - Type. - Arguments for the class' constructor, if mocking a concrete class - - - - Creates a dynamic mock for the specified type. - - - Arguments for the class' constructor, if mocking a concrete class - - - - - Creates a mock object that defaults to calling the class methods. - - Type. - Arguments for the class' constructor. - - - - Creates a mock object that defaults to calling the class methods. - - Type. - Extra interface types to mock. - - - - Creates a mock object that defaults to calling the class methods. - - Type. - Extra interface types to mock. - Arguments for the class' constructor. - - - - Creates a mock object using remoting proxies - - Type to mock - must be MarshalByRefObject - Mock object - Proxy mock can mock non-virtual methods, but not static methods - Creates the mock state for this proxy - - - - Cause the mock state to change to replay, any further call is compared to the - ones that were called in the record state. - - the object to move to replay state - - - - Cause the mock state to change to replay, any further call is compared to the - ones that were called in the record state. - - the object to move to replay state - - - - - Move the mocked object back to record state. - Will delete all current expectations! - - - - - Move the mocked object back to record state. - Optionally, can delete all current expectations, but allows more granularity about how - it would behave with regard to the object state. - - - - - Verify that all the expectations for this object were fulfilled. - - the object to verify the expectations for - - - - Get the method options for the last call on - mockedInstance. - - The mock object - Method options for the last call - - - - Maps an invocation proxy back to the mock object instance that was originally - returned to client code which might have been a delegate to this proxy. - - The mock object proxy from the intercepted invocation - The mock object - - - - This is provided to allow advance extention functionality, where Rhino Mocks standard - functionality is not enough. - - The type to mock - Delegate that create the first state of the mocked object (usualy the record state). - Additional types to be implemented, this can be only interfaces - optional arguments for the constructor - - - - - Method: GetMockedObject - Get an IProxy from a mocked object instance, or throws if the - object is not a mock object. - - - - - Method: GetMockedObjectOrNull - Get an IProxy from a mocked object instance, or null if the - object is not a mock object. - - - - - Pops the recorder. - - - - - Pushes the recorder. - - New recorder. - - - - All the mock objects in this repository will be moved - to record state. - - - - - All the mock objects in this repository will be moved - to record state. - - - - - Replay all the mocks from this repository - - - - - Verify all the mocks from this repository - - - - - Gets the proxy generator for a specific type. Having a single ProxyGenerator - with multiple types linearly degrades the performance so this implementation - keeps one ProxyGenerator per type. - - - - - Set the exception to be thrown when verified is called. - - - - - Creates a mock for the spesified type. - - Arguments for the class' constructor, if mocking a concrete class - - - - Creates a strict mock for the spesified type. - - Arguments for the class' constructor, if mocking a concrete class - - - - Creates a dynamic mock for the specified type. - - Arguments for the class' constructor, if mocking a concrete class - - - - Creates a mock object from several types. - - - - - Creates a strict mock object from several types. - - - - - Create a mock object from several types with dynamic semantics. - - - - - Create a mock object from several types with partial semantics. - - - - - Create a mock object from several types with strict semantics. - - Extra interface types to mock. - Arguments for the class' constructor, if mocking a concrete class - - - - Create a strict mock object from several types with strict semantics. - - Extra interface types to mock. - Arguments for the class' constructor, if mocking a concrete class - - - - Create a mock object from several types with dynamic semantics. - - Extra interface types to mock. - Arguments for the class' constructor, if mocking a concrete class - - - - Create a mock object from several types with partial semantics. - - Extra interface types to mock. - Arguments for the class' constructor, if mocking a concrete class - - - - Create a mock object with from a class that defaults to calling the class methods - - Arguments for the class' constructor, if mocking a concrete class - - - - Create a stub object, one that has properties and events ready for use, and - can have methods called on it. It requires an explicit step in order to create - an expectation for a stub. - - The arguments for constructor. - - - - Create a stub object, one that has properties and events ready for use, and - can have methods called on it. It requires an explicit step in order to create - an expectation for a stub. - - The type. - The arguments for constructor. - - - - - Generates a stub without mock repository - - The arguments for constructor. - - - - - Generates the stub without mock repository - - The type. - The arguments for constructor. - - - - Returns true if the passed mock is currently in replay mode. - - The mock to test. - True if the mock is in replay mode, false otherwise. - - - - Generate a mock object without needing the mock repository - - - - - Determines whether the specified proxy is a stub. - - The proxy. - - - - Register a call on a prperty behavior - - - - - - - - - - - - - - - - Gets the recorder. - - - - - - Gets the replayer for this repository. - - - - - - Gets the last proxy which had a method call. - - - - - Delegate: CreateMockState - This is used internally to cleanly handle the creation of different - RecordMockStates. - - - - - Used for [assembly: InternalsVisibleTo(RhinoMocks.StrongName)] - Used for [assembly: InternalsVisibleTo(RhinoMocks.NormalName)] - - - - - Strong name for the Dynamic Proxy assemblies. Used for InternalsVisibleTo specification. - - - - - Normal name for dynamic proxy assemblies. Used for InternalsVisibleTo specification. - - - - - Logs all method calls for methods - - - - - A set of extension methods that adds Arrange Act Assert mode to Rhino Mocks - - - - - Create an expectation on this mock for this action to occur - - - The mock. - The action. - - - - - Reset all expectations on this mock object - - - The mock. - - - - Reset the selected expectation on this mock object - - - The mock. - The options to reset the expectations on this mock. - - - - Cause the mock state to change to replay, any further call is compared to the - ones that were called in the record state. - - the mocked object to move to replay state - - - - Gets the mock repository for this specificied mock object - - - The mock. - - - - - Create an expectation on this mock for this action to occur - - - - The mock. - The action. - - - - - Tell the mock object to perform a certain action when a matching - method is called. - Does not create an expectation for this method. - - - The mock. - The action. - - - - - Tell the mock object to perform a certain action when a matching - method is called. - Does not create an expectation for this method. - - - - The mock. - The action. - - - - - Gets the arguments for calls made on this mock object and the method that was called - in the action. - - - The mock. - The action. - - - Here we will get all the arguments for all the calls made to DoSomething(int) - - var argsForCalls = foo54.GetArgumentsForCallsMadeOn(x => x.DoSomething(0)) - - - - - - Gets the arguments for calls made on this mock object and the method that was called - in the action and matches the given constraints - - - The mock. - The action. - The setup constraints. - - - Here we will get all the arguments for all the calls made to DoSomething(int) - - var argsForCalls = foo54.GetArgumentsForCallsMadeOn(x => x.DoSomething(0)) - - - - - - Asserts that a particular method was called on this mock object - - - The mock. - The action. - - - - Asserts that a particular method was called on this mock object that match - a particular constraint set. - - - The mock. - The action. - The setup constraints. - - - - Asserts that a particular method was NOT called on this mock object - - - The mock. - The action. - - - - Asserts that a particular method was NOT called on this mock object that match - a particular constraint set. - - - The mock. - The action. - The setup constraints. - - - - Finds the approprite implementation type of this item. - This is the class or an interface outside of the rhino mocks. - - The mocked obj. - - - - - Verifies all expectations on this mock object - - The mock object. - - - - Gets the event raiser for the event that was called in the action passed - - The type of the event source. - The mock object. - The event subscription. - - - - - Raise the specified event using the passed arguments. - The even is extracted from the passed labmda - - The type of the event source. - The mock object. - The event subscription. - The sender. - The instance containing the event data. - - - - Raise the specified event using the passed arguments. - The even is extracted from the passed labmda - - The type of the event source. - The mock object. - The event subscription. - The args. - - - - Fake type that disallow creating it. - Should have been System.Type, but we can't use it. - - - - - Setup method calls to repeat any number of times. - - - - - Get the method options and set the last method call to repeat - any number of times. - This also means that the method would transcend ordering - - - - - Get the method options for the last method call on the mockInstance and set it - to repeat any number of times. - This also means that the method would transcend ordering - - - - - Allows easier access to MockRepository, works closely with Mocker.Current to - allow access to a context where the mock repository is automatially verified at - the end of the code block. - - - - - Initialize a code block where Mocker.Current is initialized. - At the end of the code block, all the expectation will be verified. - This overload will create a new MockRepository. - - The code that will be executed under the mock context - - - - Initialize a code block where Mocker.Current is initialized. - At the end of the code block, all the expectation will be verified. - This overload will create a new MockRepository. - - The mock repository to use, at the end of the code block, VerifyAll() will be called on the repository. - The code that will be executed under the mock context - - - - Create a FluentMocker - - The mock repository to use. - - - - A method with no arguments and no return value that will be called under the mock context. - - - - - FluentMocker implements some kind of fluent interface attempt - for saying "With the Mocks [mocks], Expecting (in same order) [things] verify [that]." - - - - - Interface to verify previously defined expectations - - - - - Verifies if a piece of code - - - - - Defines unordered expectations - - A delegate describing the expectations - an IMockVerifier - - - - Defines ordered expectations - - A delegate describing the expectations - an IMockVerifier - - - - Verifies previously defined expectations - - - - diff --git a/bin/SharpArch.Core.NHibernateValidator.dll b/bin/SharpArch.Core.NHibernateValidator.dll deleted file mode 100644 index 0a203bdf3..000000000 Binary files a/bin/SharpArch.Core.NHibernateValidator.dll and /dev/null differ diff --git a/bin/SharpArch.Core.NHibernateValidator.pdb b/bin/SharpArch.Core.NHibernateValidator.pdb deleted file mode 100644 index d37e386a6..000000000 Binary files a/bin/SharpArch.Core.NHibernateValidator.pdb and /dev/null differ diff --git a/bin/SharpArch.Core.dll b/bin/SharpArch.Core.dll deleted file mode 100644 index 6f1297a62..000000000 Binary files a/bin/SharpArch.Core.dll and /dev/null differ diff --git a/bin/SharpArch.Core.pdb b/bin/SharpArch.Core.pdb deleted file mode 100644 index 86917f56a..000000000 Binary files a/bin/SharpArch.Core.pdb and /dev/null differ diff --git a/bin/SharpArch.Data.dll b/bin/SharpArch.Data.dll deleted file mode 100644 index b16de4ffe..000000000 Binary files a/bin/SharpArch.Data.dll and /dev/null differ diff --git a/bin/SharpArch.Data.pdb b/bin/SharpArch.Data.pdb deleted file mode 100644 index 13eadf1e4..000000000 Binary files a/bin/SharpArch.Data.pdb and /dev/null differ diff --git a/bin/SharpArch.Testing.MbUnit.dll b/bin/SharpArch.Testing.MbUnit.dll deleted file mode 100644 index fdb608efd..000000000 Binary files a/bin/SharpArch.Testing.MbUnit.dll and /dev/null differ diff --git a/bin/SharpArch.Testing.MbUnit.pdb b/bin/SharpArch.Testing.MbUnit.pdb deleted file mode 100644 index 397d871b1..000000000 Binary files a/bin/SharpArch.Testing.MbUnit.pdb and /dev/null differ diff --git a/bin/SharpArch.Testing.NUnit.dll b/bin/SharpArch.Testing.NUnit.dll deleted file mode 100644 index d3398ed5b..000000000 Binary files a/bin/SharpArch.Testing.NUnit.dll and /dev/null differ diff --git a/bin/SharpArch.Testing.NUnit.pdb b/bin/SharpArch.Testing.NUnit.pdb deleted file mode 100644 index 838c0217d..000000000 Binary files a/bin/SharpArch.Testing.NUnit.pdb and /dev/null differ diff --git a/bin/SharpArch.Testing.dll b/bin/SharpArch.Testing.dll deleted file mode 100644 index 0ac9c1a99..000000000 Binary files a/bin/SharpArch.Testing.dll and /dev/null differ diff --git a/bin/SharpArch.Testing.pdb b/bin/SharpArch.Testing.pdb deleted file mode 100644 index b3cd51671..000000000 Binary files a/bin/SharpArch.Testing.pdb and /dev/null differ diff --git a/bin/SharpArch.Wcf.dll b/bin/SharpArch.Wcf.dll deleted file mode 100644 index a68bf6c26..000000000 Binary files a/bin/SharpArch.Wcf.dll and /dev/null differ diff --git a/bin/SharpArch.Wcf.pdb b/bin/SharpArch.Wcf.pdb deleted file mode 100644 index 8144bd857..000000000 Binary files a/bin/SharpArch.Wcf.pdb and /dev/null differ diff --git a/bin/SharpArch.WcfClient.Castle.dll b/bin/SharpArch.WcfClient.Castle.dll deleted file mode 100644 index 3f4c8d91a..000000000 Binary files a/bin/SharpArch.WcfClient.Castle.dll and /dev/null differ diff --git a/bin/SharpArch.WcfClient.Castle.pdb b/bin/SharpArch.WcfClient.Castle.pdb deleted file mode 100644 index 86a062e5a..000000000 Binary files a/bin/SharpArch.WcfClient.Castle.pdb and /dev/null differ diff --git a/bin/SharpArch.Web.Castle.dll b/bin/SharpArch.Web.Castle.dll deleted file mode 100644 index 42e510296..000000000 Binary files a/bin/SharpArch.Web.Castle.dll and /dev/null differ diff --git a/bin/SharpArch.Web.Castle.pdb b/bin/SharpArch.Web.Castle.pdb deleted file mode 100644 index 0a53f5a42..000000000 Binary files a/bin/SharpArch.Web.Castle.pdb and /dev/null differ diff --git a/bin/SharpArch.Web.dll b/bin/SharpArch.Web.dll deleted file mode 100644 index e7271c13f..000000000 Binary files a/bin/SharpArch.Web.dll and /dev/null differ diff --git a/bin/SharpArch.Web.pdb b/bin/SharpArch.Web.pdb deleted file mode 100644 index 397296046..000000000 Binary files a/bin/SharpArch.Web.pdb and /dev/null differ diff --git a/bin/System.Data.SQLite.DLL b/bin/System.Data.SQLite.DLL deleted file mode 100644 index 080c74cd5..000000000 Binary files a/bin/System.Data.SQLite.DLL and /dev/null differ diff --git a/bin/System.Web.Abstractions.dll b/bin/System.Web.Abstractions.dll deleted file mode 100644 index 317242e72..000000000 Binary files a/bin/System.Web.Abstractions.dll and /dev/null differ diff --git a/bin/System.Web.Mvc.dll b/bin/System.Web.Mvc.dll deleted file mode 100644 index fb8836398..000000000 Binary files a/bin/System.Web.Mvc.dll and /dev/null differ diff --git a/bin/System.Web.Mvc.xml b/bin/System.Web.Mvc.xml deleted file mode 100644 index 55f2a73b6..000000000 --- a/bin/System.Web.Mvc.xml +++ /dev/null @@ -1,8178 +0,0 @@ - - - - System.Web.Mvc - - - - - 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 info. - The context. - - - - Loads the specified controller context. - - The controller context. - The temp data provider. - - - - Saves the specified controller context. - - The controller context. - The temp data provider. - - - - Adds an element with the provided key and value to the . - - The object to use as the key of the element to add. - The object to use as the value of the element to add. - - is null. - - - An element with the same key already exists in the . - - - The is read-only. - - - - - Removes all items from the . - - - The is read-only. - - - - - Determines whether the contains an element with the specified key. - - The key to locate in the . - - true if the contains an element with the key; otherwise, false. - - - is null. - - - - - Determines whether the specified value contains value. - - The value. - - true if the specified value contains value; otherwise, false. - - - - - Gets the enumerator. - - The enumerator. - - - - Populates a with the data needed to serialize the target object. - - The to populate with data. - The destination (see ) for this serialization. - - The caller does not have the required permission. - - - - - Removes the element with the specified key from the . - - The key of the element to remove. - - true if the element is successfully removed; otherwise, false. This method also returns false if was not found in the original . - - - is null. - - - The is read-only. - - - - - Gets the value associated with the specified key. - - The key whose value to get. - When this method returns, the value associated with the specified key, if the key is found; otherwise, the default value for the type of the parameter. This parameter is passed uninitialized. - - true if the object that implements contains an element with the specified key; otherwise, false. - - - is null. - - - - - Returns an enumerator that iterates through the collection. - - - A that can be used to iterate through the collection. - - - - - Copies to the given array at the specified index location. - - The array. - The index. - - - - Adds the specified key value pair. - - The key value pair. - - - - Determines whether [contains] [the specified key value pair]. - - The key value pair. - - true if [contains] [the specified key value pair]; otherwise, false. - - - - - Removes the specified key value pair. - - The key value pair. - - - - - Returns an enumerator that iterates through a collection. - - - An object that can be used to iterate through the collection. - - - - - Populates a with the data needed to serialize the target object. - - The to populate with data. - The destination (see ) for this serialization. - - The caller does not have the required permission. - - - - - Gets the number of elements contained in the . - - - - The number of elements contained in the . - - - - - Gets an containing the keys of the . - - - - An containing the keys of the object that implements . - - - - - Gets an containing the values in the . - - - - An containing the values in the object that implements . - - - - - Gets or sets the with the specified key. - - - - - - Gets an containing the keys of the . - - - - An containing the keys of the object that implements . - - - - - Gets an containing the values in the . - - - - An containing the values in the object that implements . - - - - - Gets a value indicating whether the is read-only. - - - true if the is read-only; otherwise, false. - - - - - Defines the methods required for a controller. - - - - - Executes the specified request context. - - The request context. - - - - Represents support for rendering HTML in AJAX scenarios within a view. - - - - - Initializes a new instance of the class. - - The view context. - The view data container. - - - - Initializes a new instance of the class. - - The view context. - The view data container. - The route collection. - - - - Gets the collection of routes. - - The route collection. - - - - Gets the current . - - The view context. - - - - Gets the current . - - The view data. - - - - Gets the current . - - The view data container. - - - - Binds a model to a posted file. - - - - - Defines the methods required for a model binder. - - - - - Binds the model to a value. - - The controller context. - The binding context. - The bounded value. - - - - Binds the model. - - The controller context. - The binding context. - The bound value. - - - - Attribute that represents the name of an action method. - - - - - Attribute that affects the selection of an action method. - - - - - Determines whether the action name is valid within specified controller context. - - The controller context. - The name of the action. - The method info. - - true if the action name is valid within specified controller context; otherwise, false. - - - - - Initializes a new instance of the class. - - The name. - - - - Determines whether the action name is valid within specified controller context. - - The controller context. - The name of the action. - The method info. - - true if the action name is valid within specified controller context; otherwise, false. - - - - - Gets the name of the action. - - The name. - - - - Attribute used to provide details on how model binding to a parameter should occur. - - - - - Determines whether [is property allowed] [the specified property name]. - - Name of the property. - - true if [is property allowed] [the specified property name]; otherwise, false. - - - - - A comma delimited block list of property names for which binding is not allowed. - - The exclude list. - - - - A comma delimited allow list of property names for which binding is allowed. - - The include list. - - - - Gets or sets the prefix to use when binding to an action argument or model property. - - The prefix. - - - - Class used to send JavaScript content to the response. - - - - - Encapsulates the result of an action method and is used to perform a - framework-level operation on the action method's behalf. - - - - - Enables processing of the result of an action method by a custom type that inherits from . - - The context within which the result is executed. - - - - Enables processing of the result of an action method by a custom type that inherits from . - - The context within which the result is executed. - - - - Gets or sets the script. - - The script. - - - - Provides the context for the ActionExecuting method of an . - - - - - Encapsulates information about an HTTP request that matches a defined Route and Controller. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The controller context. - - - - Initializes a new instance of the class. - - The HTTP context. - The route data. - The controller. - - - - Initializes a new instance of the class. - - The request context. - The controller. - - - - Gets or sets the controller. - - The controller. - - - - Gets or sets the HTTP context. - - The HTTP context. - - - - Gets or sets the request context. - - The request context. - - - - Gets or sets the route data. - - The route data. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The controller context. - The action descriptor. - The action parameters. - - - - Gets or sets the action descriptor. - - The action descriptor. - - - - Gets or sets the action parameters. - - The action parameters. - - - - Gets or sets the result. - - The result. - - - - Base class used to supply the model to the view and then render the view to the response. - - - - - When called by the action invoker, renders the view to the response. - - The context within which the result is executed. - - - - When overridden, returns the used to render the view. - - The context. - The view engine. - - - - Gets or sets the for this result. - - The temp data. - - - - Gets or sets the that is rendered to the response. - - The view. - - - - Gets or sets the view data for this result. - - The view data. - - - - Gets or sets the view engines () associated with this result. - - The view engine collection. - - - - Gets or sets the name of the view to be rendered. - - The name of the view. - - - - Represents the information needed to build a strongly typed view page. - - The type of the model. - - - - Represents the information needed to build a view page. - - - - - Defines the methods required for a view data dictionary. - - - - - Gets or sets the view data. - - The view data. - - - - Instantiates and initializes the Ajax, Html, and Url properties. - - - - - Raises the event at the beginning of page initialization. - - An that contains the event data. - - - - Initializes the object and calls on the child controls of the to render. - - The that receives the page content. - - - - Renders the view page to the response. - - The view context. - - - - Sets the view data. - - The view data. - - - - Returns an containing methods useful for AJAX scenarios. - - The ajax. - - - - Returns an containing methods useful for rendering HTML elements. - - The HTML. - - - - Gets or sets the master location. - - The master location. - - - - Convenience property used to access the Model property of the - - The model. - - - - Gets the temp data. - - The temp data. - - - - Gets or sets the URL. - - The URL. - - - - Gets or sets the view context. - - The view context. - - - - Gets or sets the view data. - - The view data. - - - - Gets the writer. - - The writer. - - - - Instantiates and initializes the Ajax, Html, and Url properties. - - - - - Sets the view data. - - The view data. - - - - Returns an containing methods useful for AJAX scenarios. - - The ajax. - - - - Returns an containing methods useful for rendering HTML elements. - - The HTML. - - - - Convenience property used to access the Model property of the - - The model. - - - - Gets or sets the view data. - - The view data. - - - - Creates an object that implement the IHttpHandler interface and gives it the request context. - - - - - Gets the HTTP handler. - - The request context. - The HTTP handler. - - - - Gets the HTTP handler. - - The request context. - The HTTP handler. - - - - Defines the methods required for a view engine. - - - - - Finds the partial view. - - The controller context. - Partial name of the view. - if set to true [use cache]. - The partial view. - - - - Finds the view. - - The controller context. - Name of the view. - Name of the master. - if set to true [use cache]. - The page view. - - - - Releases the view. - - The controller context. - The view. - - - - Represents a list of items that allows more than one item to be selected. - - - - - Initializes a new instance of the class. - - The items. - - - - Initializes a new instance of the class. - - The items. - The selected values. - - - - Initializes a new instance of the class. - - The items. - The data value field. - The data text field. - - - - Initializes a new instance of the class. - - The items. - The data value field. - The data text field. - The selected values. - - - - Returns an enumerator that iterates through the collection. - - - A that can be used to iterate through the collection. - - - - - Returns an enumerator that iterates through a collection. - - - An object that can be used to iterate through the collection. - - - - - Gets the data text field. - - The data text field. - - - - Gets the data value field. - - The data value field. - - - - Gets the items. - - The items. - - - - Gets the selected values. - - The selected values. - - - - Represents support for HTML in an application. - - - - - Writes an opening form tag to the response while returning a - instance. Can be used in a using block, in which case it renders the closing form tag at the end of the - using block. - - The HTML helper. - - An instance. - - - - - Writes an opening form tag to the response while returning a - instance. Can be used in a using block, in which case it renders the closing form tag at the end of the - using block. - - The HTML helper. - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - - An instance. - - - - - Writes an opening form tag to the response while returning a - instance. Can be used in a using block, in which case it renders the closing form tag at the end of the - using block. - - The HTML helper. - An object containing the parameters for a route. - - An instance. - - - - - Writes an opening form tag to the response while returning a - instance. Can be used in a using block, in which case it renders the closing form tag at the end of the - using block. - - The HTML helper. - The name of the action. - The name of the controller. - - An instance. - - - - - Writes an opening form tag to the response while returning a - instance. Can be used in a using block, in which case it renders the closing form tag at the end of the - using block. - - The HTML helper. - The name of the action. - The name of the controller. - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - - An instance. - - - - - Writes an opening form tag to the response while returning a - instance. Can be used in a using block, in which case it renders the closing form tag at the end of the - using block. - - The HTML helper. - The name of the action. - The name of the controller. - An object containing the parameters for a route. - - An instance. - - - - - Writes an opening form tag to the response while returning a - instance. Can be used in a using block, in which case it renders the closing form tag at the end of the - using block. - - The HTML helper. - The name of the action. - The name of the controller. - The HTTP method for the form post, either Get or Post. - - An instance. - - - - - Writes an opening form tag to the response while returning a - instance. Can be used in a using block, in which case it renders the closing form tag at the end of the - using block. - - The HTML helper. - The name of the action. - The name of the controller. - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - The HTTP method for the form post, either Get or Post. - - An instance. - - - - - Writes an opening form tag to the response while returning a - instance. Can be used in a using block, in which case it renders the closing form tag at the end of the - using block. - - The HTML helper. - The name of the action. - The name of the controller. - An object containing the parameters for a route. - The HTTP method for the form post, either Get or Post. - - An instance. - - - - - Writes an opening form tag to the response while returning a - instance. Can be used in a using block, in which case it renders the closing form tag at the end of the - using block. - - The HTML helper. - The name of the action. - The name of the controller. - The HTTP method for the form post, either Get or Post. - An object containing the HTML attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - - An instance. - - - - - Writes an opening form tag to the response while returning a - instance. Can be used in a using block, in which case it renders the closing form tag at the end of the - using block. - - The HTML helper. - The name of the action. - The name of the controller. - The HTTP method for the form post, either Get or Post. - An object containing the HTML attributes for the element. - - An instance. - - - - - Writes an opening form tag to the response while returning a - instance. Can be used in a using block, in which case it renders the closing form tag at the end of the - using block. - - The HTML helper. - The name of the action. - The name of the controller. - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - The HTTP method for the form post, either Get or Post. - An object containing the HTML attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - - An instance. - - - - - Writes an opening form tag to the response while returning a - instance. Can be used in a using block, in which case it renders the closing form tag at the end of the - using block. - - The HTML helper. - The name of the action. - The name of the controller. - An object containing the parameters for a route. - The HTTP method for the form post, either Get or Post. - An object containing the HTML attributes for the element. - - An instance. - - - - - Writes an opening form tag to the response while returning a - instance. Can be used in a using block, in which case it renders the closing form tag at the end of the - using block. - - The HTML helper. - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - - An instance. - - - - - Writes an opening form tag to the response while returning a - instance. Can be used in a using block, in which case it renders the closing form tag at the end of the - using block. - - The HTML helper. - An object containing the parameters for a route. - - An instance. - - - - - Writes an opening form tag to the response while returning a - instance. Can be used in a using block, in which case it renders the closing form tag at the end of the - using block. - - The HTML helper. - The name of the route to use to obtain the form post URL. - - An instance. - - - - - Writes an opening form tag to the response while returning a - instance. Can be used in a using block, in which case it renders the closing form tag at the end of the - using block. - - The HTML helper. - The name of the route to use to obtain the form post URL. - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - - An instance. - - - - - Writes an opening form tag to the response while returning a - instance. Can be used in a using block, in which case it renders the closing form tag at the end of the - using block. - - The HTML helper. - The name of the route to use to obtain the form post URL. - An object containing the parameters for a route. - - An instance. - - - - - Writes an opening form tag to the response while returning a - instance. Can be used in a using block, in which case it renders the closing form tag at the end of the - using block. - - The HTML helper. - The name of the route to use to obtain the form post URL. - The HTTP method for the form post, either Get or Post. - - An instance. - - - - - Writes an opening form tag to the response while returning a - instance. Can be used in a using block, in which case it renders the closing form tag at the end of the - using block. - - The HTML helper. - The name of the route to use to obtain the form post URL. - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - The HTTP method for the form post, either Get or Post. - - An instance. - - - - - Writes an opening form tag to the response while returning a - instance. Can be used in a using block, in which case it renders the closing form tag at the end of the - using block. - - The HTML helper. - The name of the route to use to obtain the form post URL. - An object containing the parameters for a route. - The HTTP method for the form post, either Get or Post. - - An instance. - - - - - Writes an opening form tag to the response while returning a - instance. Can be used in a using block, in which case it renders the closing form tag at the end of the - using block. - - The HTML helper. - The name of the route to use to obtain the form post URL. - The HTTP method for the form post, either Get or Post. - An object containing the HTML attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - - An instance. - - - - - Writes an opening form tag to the response while returning a - instance. Can be used in a using block, in which case it renders the closing form tag at the end of the - using block. - - The HTML helper. - The name of the route to use to obtain the form post URL. - The HTTP method for the form post, either Get or Post. - An object containing the HTML attributes for the element. - - An instance. - - - - - Writes an opening form tag to the response while returning a - instance. Can be used in a using block, in which case it renders the closing form tag at the end of the - using block. - - The HTML helper. - The name of the route to use to obtain the form post URL. - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - The HTTP method for the form post, either Get or Post. - An object containing the HTML attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - - An instance. - - - - - Writes an opening form tag to the response while returning a - instance. Can be used in a using block, in which case it renders the closing form tag at the end of the - using block. - - The HTML helper. - The name of the route to use to obtain the form post URL. - An object containing the parameters for a route. - The HTTP method for the form post, either Get or Post. - An object containing the HTML attributes for the element. - - An instance. - - - - - Renders the closing form tag to the response. This provides an alternative way to end the form - to using a using block with and . - - The HTML helper. - - - - Represents support for rendering HTML controls in a strongly typed view. - - The type of the model. - - - - Represents support for rendering HTML controls in a view. - - - - - Name of a CSS input validation error. - - - - - Name of a CSS field validation error. - - - - - Name of the CSS validation error summary. - - - - - Initializes a new instance of the class. - - The view context. - The view data container. - - - - Initializes a new instance of the class. - - The view context. - The view data container. - The route collection. - - - - Returns the anti-forgery token. - - The anti-forgery token. - - - - Returns the anti-forgery token given the salt value. - - The salt. - The anti-forgery token. - - - - Returns the anti-forgery token given the salt value. - - The salt. - The cookie domain. - The cookie path. - The anti-forgery token. - - - - Encodes the specified attribute string. - - The value. - The encoded value. - - - - Encodes the specified attribute object. - - The value. - The encoded string. - - - - Encodes the specified value. - - The value. - The encoded string. - - - - Encodes the specified value. - - The value. - The encoded string. - - - - Evaluates the string. - - The key. - The evaluated string. - - - - Evaluates the boolean value. - - The key. - The evaluated boolean value. - - - - Generates the link. - - The request context. - The route collection. - The link text. - Name of the route. - The name of the action. - Name of the controller. - The route values. - The HTML attributes. - The link. - - - - Generates the link. - - The request context. - The route collection. - The link text. - Name of the route. - The name of the action. - Name of the controller. - The protocol. - Name of the host. - The fragment. - The route values. - The HTML attributes. - The link. - - - - Returns an anchor tag containing the virtual path for the specified route values. - - The request context. - The collection of routes. - The inner text of the anchor tag. - The name of the route used to return a virtual path. - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. - An object containing the HTML attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. - - - - - Returns an anchor tag containing the URL for the specified route values. - - The request context. - The collection of routes. - The inner text of the anchor tag. - The name of the route 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 (also known as anchor name). - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. - An object containing the HTML attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. - - - - - Gets the form method string. - - The method. - The form method string. - - - - Gets the input type string. - - Type of the input. - The input type string. - - - - Gets or sets the id attribute dot replacement. - - The id attribute dot replacement. - - - - Gets the route collection. - - The route collection. - - - - Gets the view context. - - The view context. - - - - Gets the view data. - - The view data. - - - - Gets the view data container. - - The view data container. - - - - Initializes a new instance of the class. - - The view context. - The view data container. - - - - Initializes a new instance of the class. - - The view context. - The view data container. - The route collection. - - - - Gets the view data. - - The view data. - - - - Responsible for selecting an action method to be executed. - - - - - Initializes a new instance of the class. - - Type of the controller. - - - - Finds the action method. - - The controller context. - The name of the action. - A reference to the action method information. - - - - Gets the type of the controller. - - The type of the controller. - - - - Gets the aliased methods. - - The aliased methods. - - - - Gets the non aliased methods. - - The non aliased methods. - - - - Collection of view engines available to the application. - - - - - Gets the engines. - - The engines. - - - - Defines the methods required for a controller factory. - - - - - Creates the controller. - - The request context. - Name of the controller. - The controller. - - - - Releases the controller. - - The controller. - - - - Container used for passing strongly typed data between a controller and a view. - - The type of the model. - - - - Container used for passing data between a controller and a view. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The model. - - - - Initializes a new instance of the class. - - The dictionary. - - - - Adds an item to the . - - The object to add to the . - - The is read-only. - - - - - Adds an element with the provided key and value to the . - - The object to use as the key of the element to add. - The object to use as the value of the element to add. - - is null. - - - An element with the same key already exists in the . - - - The is read-only. - - - - - Removes all items from the . - - - The is read-only. - - - - - Determines whether the contains a specific value. - - The object to locate in the . - - true if is found in the ; otherwise, false. - - - - - Determines whether the contains an element with the specified key. - - The key to locate in the . - - true if the contains an element with the key; otherwise, false. - - - is null. - - - - - Copies the elements of the to an , starting at a particular index. - - The one-dimensional that is the destination of the elements copied from . The 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 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 . - - - - - Evaluates the specified expression. - - The expression. - The evaluation. - - - - Evaluates the specified expression. - - The expression. - The format. - The evaluation. - - - - Returns an enumerator that iterates through the collection. - - - A that can be used to iterate through the collection. - - - - - Removes the first occurrence of a specific object from the . - - The object to remove from the . - - true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . - - - The is read-only. - - - - - Removes the element with the specified key from the . - - The key of the element to remove. - - true if the element is successfully removed; otherwise, false. This method also returns false if was not found in the original . - - - is null. - - - The is read-only. - - - - - Sets the model. - - The value. - This method will execute before the derived type's instance constructor executes. Derived types must be aware of this and should plan accordingly. For example, the logic in SetModel() should be simple enough so as not to depend on the "this" pointer referencing a fully constructed object. - - - - Gets the value associated with the specified key. - - The key whose value to get. - When this method returns, the value associated with the specified key, if the key is found; otherwise, the default value for the type of the parameter. This parameter is passed uninitialized. - - true if the object that implements contains an element with the specified key; otherwise, false. - - - is null. - - - - - Returns an enumerator that iterates through a collection. - - - An object that can be used to iterate through the collection. - - - - - Gets the number of elements contained in the . - - - - The number of elements contained in the . - - - - - Gets a value indicating whether the is read-only. - - - true if the is read-only; otherwise, false. - - - - - Gets an containing the keys of the . - - - - An containing the keys of the object that implements . - - - - - Gets or sets the model. - - The model. - - - - Gets the state of the model. - - The state of the model. - - - - Gets or sets the with the specified key. - - - - - - Gets an containing the values in the . - - - - An containing the values in the object that implements . - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The model. - - - - Initializes a new instance of the class. - - The view data dictionary. - - - - Sets the model. - - The value. - This method will execute before the derived type's instance constructor executes. Derived types must be aware of this and should plan accordingly. For example, the logic in SetModel() should be simple enough so as not to depend on the "this" pointer referencing a fully constructed object. - - - - Gets or sets the model. - - The model. - - - - Encapsulates information about the available action filters. - - - - - Gets the action filters. - - The action filters. - - - - Gets the authorization filters. - - The authorization filters. - - - - Gets the exception filters. - - The exception filters. - - - - Gets the result filters. - - The result filters. - - - - Represents an item in a dropdown list. - - - - - Gets or sets a value indicating whether this is selected. - - true if selected; otherwise, false. - - - - Gets or sets the text. - - The text. - - - - Gets or sets the value. - - The value. - - - - Encapsulates information that describes a controller, such as its name, type, and actions. - - - - - Finds the action. - - The controller context. - The name of the action. - The information about the action. - - - - Gets the canonical actions. - - A list of action descriptors for the controller. - - - - Returns an array of all of the custom attributes defined on this member, excluding named attributes, or an empty array if there are no custom attributes. - - When true, look up the hierarchy chain for the inherited custom attribute. - - An array of Objects representing custom attributes, or an empty array. - - - The custom attribute type cannot be loaded. - - - There is more than one attribute of type defined on this member. - - - - - Returns an array of custom attributes defined on this member, identified by type, or an empty array if there are no custom attributes of that type. - - The type of the custom attributes. - When true, look up the hierarchy chain for the inherited custom attribute. - - An array of Objects representing custom attributes, or an empty array. - - - The custom attribute type cannot be loaded. - - - There is more than one attribute of type defined on this member. - - - - - Indicates whether one or more instance of is defined on this member. - - The type of the custom attributes. - When true, look up the hierarchy chain for the inherited custom attribute. - - true if the is defined on this member; false otherwise. - - - - - Gets the name of the controller. - - The name of the controller. - - - - Gets the type of the controller. - - The type of the controller. - - - - Represents the base class for all MVC controllers. - - - - - Executes the specified request context. - - The request context. - - - - Executes the core. - - - - - Initializes the specified request context. - - The request context. - - - - Executes the specified request context. - - The request context. - - - - Gets or sets the controller context. - - The controller context. - - - - Gets or sets the temporary data. - - The temporary data. - - - - Gets or sets a value indicating whether the request is valid. - - true if the request is valid; otherwise, false. - - - - Gets or sets the value provider. - - The value provider. - - - - Gets or sets the view data. - - The view data. - - - - Caches a sequence of action method selections. - - - - - Gets the selector. - - Type of the controller. - A reference to the action method selector. - - - - Attribute that affects the selection of an action method. - - - - - Determines whether [is valid for request] [the specified controller context]. - - The controller context. - The method info. - - true if [is valid for request] [the specified controller context]; otherwise, false. - - - - - Defines the methods required for a result filter. - - - - - Called before an action result executes. - - The filter context. - - - - Called after an action result executes. - - The filter context. - - - - Provides a concreate implementation of a model binder. - - - - - Binds the model. - - The controller context. - The binding context. - The bound object. - - - - Binds the property. - - The controller context. - The binding context. - The property descriptor. - - - - Creates the model. - - The controller context. - The binding context. - Type of the model. - The model. - - - - Creates the name of the sub-index. - - The prefix. - The index. - The name of the sub-index. - - - - Creates the name of the sub-property. - - The prefix. - Name of the property. - The name of the sub-property. - - - - Gets the model properties. - - The controller context. - The binding context. - A collection of property descriptors. - - - - Called when the model is updated. - - The controller context. - The binding context. - - - - Called when the model is updating. - - The controller context. - The binding context. - true is the model is updating; otherwise, false. - - - - Called when [property validated]. - - The controller context. - The binding context. - The property descriptor. - The value. - - - - Called when the property is validating. - - The controller context. - The binding context. - The property descriptor. - The value. - true if the property is validating; otherwise, false. - - - - Sets the property. - - The controller context. - The binding context. - The property descriptor. - The value. - - - - Gets or sets the model binders. - - The model binders. - - - - The name of the resource class used to localize validation messages. - - - - - Sends binary content to the response via a . - - - - - Base class used to send binary content to the response. - - - - - Initializes a new instance of the class. - - Type of the content. - - - - Enables processing of the result of an action method by a custom type that inherits from . - - The context within which the result is executed. - - - - Writes the file. - - The response. - - - - The content type to use for the response. - - The type of the content. - - - - If specified, sets the content-disposition header so that a file download dialog box appears in the browser with the specified file name. - - The name of the file download. - - - - Initializes a new instance of - - The stream to send to the response. - The content type to use for the response. - - - - Writes the file. - - The response. - - - - Gets the stream that will be sent to the response. - - The file stream. - - - - Sends binary content to the response. - - - - - Initializes a new instance of with the specified file contents and content type. - - The byte array to send to the response. - The content type to use for the response. - - - - Writes the file. - - The response. - - - - The binary content to send to the response. - - The file contents. - - - - Class used to send JSON content to the response. - - - - - Enables processing of the result of an action method by a custom type that inherits from . - - The context within which the result is executed. - - - - 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. - - - - Represents the base class for all action filter attributes. - - - - - Base class for action filter attributes. - - - - - Gets or sets the order. - - The order. - - - - Defines methods used in an action filter. - - - - - Called before the action method executes]. - - The filter context. - - - - Called after the action method executes. - - The filter context. - - - - Called before the action method executes. - - The filter context. - - - - Called after the action method executes. - - The filter context. - - - - Called before the action result executes. - - The filter context. - - - - Called after the action result executes. - - The filter context. - - - - Attribute use for handling an exception thrown by an action method. - - - - - Defines the methods required for an exception filter. - - - - - Called when an exception occurs. - - The filter context. - - - - Called when an exception occurs. - - The filter context. - - - - Gets or sets the type of the exception. - - The type of the exception. - - - - Gets or sets the master view. - - The master view. - - - - Gets or sets the page view. - - The page view. - - - - Represents the state of an attempt to bind a posted form to an action method including validation information. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the values copied - from the the specified ModelStateDictionary. - - The dictionary. - - - - Adds an item to the . - - The object to add to the . - - The is read-only. - - - - - Adds an element with the provided key and value to the . - - The object to use as the key of the element to add. - The object to use as the value of the element to add. - - is null. - - - An element with the same key already exists in the . - - - The is read-only. - - - - - Adds the specified to the errors collection for the - associated with the specified key. - - The key. - The exception. - - - - Adds the specified error message to the errors collection for the - associated with the specified key. - - The key. - The error message. - - - - Removes all items from the . - - - The is read-only. - - - - - Determines whether the contains a specific value. - - The object to locate in the . - - true if is found in the ; otherwise, false. - - - - - Determines whether this dictionary contains the specified key. - - The key to locate in the dictionary. - - - - - Copies the elements of the to an , starting at a particular index. - - The one-dimensional that is the destination of the elements copied from . The 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 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 . - - - - - Returns an enumerator that iterates through the collection. - - - A that can be used to iterate through the collection. - - - - - Gets the model state for key. - - The key. - The model state. - - - - Returns true if there are any associated or prefixed with the specified key. - - The key. - - true if [is valid field] [the specified key]; otherwise, false. - - - - - Copies the values from the specified into this - dictionary, overwriting existing values in cases where the keys are the same. - - The dictionary. - - - - Removes the first occurrence of a specific object from the . - - The object to remove from the . - - true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . - - - The is read-only. - - - - - Removes the element with the specified key from the . - - The key of the element to remove. - - true if the element is successfully removed; otherwise, false. This method also returns false if was not found in the original . - - - is null. - - - The is read-only. - - - - - Sets the value for the specified key using the specified - - The key. - The value. - - - - Gets the value associated with the specified key. - - The key whose value to get. - When this method returns, the value associated with the specified key, if the key is found; otherwise, the default value for the type of the parameter. This parameter is passed uninitialized. - - true if the object that implements contains an element with the specified key; otherwise, false. - - - is null. - - - - - Returns an enumerator that iterates through a collection. - - - An object that can be used to iterate through the collection. - - - - - Gets the number of key/value pairs that are in the collection. - - - - The number of elements contained in the . - - - - - Gets a value indicating whether the is read-only. - - - true if the is read-only; otherwise, false. - - - - - Returns true if there are no errors, otherwise false. - - true if this instance is valid; otherwise, false. - - - - Gets a collection that contains the keys in the dictionary. - - - - An containing the keys of the object that implements . - - - - - Gets or sets the value that is associated with the specified key. - - - The model state. - - - - Gets a collection that contains the values in the dictionary. - - - - An containing the values in the object that implements . - - - - - Attribute that invokes a custom model binder. - - - - - Gets the model binder. - - A reference to the interface of the model binder. - - - - Contains information that describes a reflected action method parameter. - - - - - Contains information that describe a parameter. - - - - - Returns an array of all of the custom attributes defined on this member, excluding named attributes, or an empty array if there are no custom attributes. - - When true, look up the hierarchy chain for the inherited custom attribute. - - An array of Objects representing custom attributes, or an empty array. - - - The custom attribute type cannot be loaded. - - - There is more than one attribute of type defined on this member. - - - - - Returns an array of custom attributes defined on this member, identified by type, or an empty array if there are no custom attributes of that type. - - The type of the custom attributes. - When true, look up the hierarchy chain for the inherited custom attribute. - - An array of Objects representing custom attributes, or an empty array. - - - The custom attribute type cannot be loaded. - - - There is more than one attribute of type defined on this member. - - - - - Indicates whether one or more instance of is defined on this member. - - The type of the custom attributes. - When true, look up the hierarchy chain for the inherited custom attribute. - - true if the is defined on this member; false otherwise. - - - - - Gets the action descriptor. - - The action descriptor. - - - - Gets the binding information. - - The binding infomation. - - - - Gets the name of the parameter. - - The name of the parameter. - - - - Gets the type of the parameter. - - The type of the parameter. - - - - Provides information used when binding to an action method argument or a model property. - - - - - Gets the model binder. - - The model binder.; - - - - Gets the exclude. - - The exclude. - - - - Gets the include. - - The include. - - - - Gets the prefix. - - The prefix. - - - - Initializes a new instance of the class. - - The parameter info. - The action descriptor. - - - - Returns an array of all of the custom attributes defined on this member, excluding named attributes, or an empty array if there are no custom attributes. - - When true, look up the hierarchy chain for the inherited custom attribute. - - An array of Objects representing custom attributes, or an empty array. - - - The custom attribute type cannot be loaded. - - - There is more than one attribute of type defined on this member. - - - - - Returns an array of custom attributes defined on this member, identified by type, or an empty array if there are no custom attributes of that type. - - The type of the custom attributes. - When true, look up the hierarchy chain for the inherited custom attribute. - - An array of Objects representing custom attributes, or an empty array. - - - The custom attribute type cannot be loaded. - - - There is more than one attribute of type defined on this member. - - - - - Indicates whether one or more instance of is defined on this member. - - The type of the custom attributes. - When true, look up the hierarchy chain for the inherited custom attribute. - - true if the is defined on this member; false otherwise. - - - - - Gets the action descriptor. - - The action descriptor. - - - - Gets the binding information. - - The binding infomation. - - - - Gets the parameter info. - - The parameter info. - - - - Gets the name of the parameter. - - The name of the parameter. - - - - Gets the type of the parameter. - - The type of the parameter. - - - - When applied to an action method, specifies which HTTP verbs the method will respond to. - - - - - Initializes a new instance of the class. - - The verbs. - - - - Initializes a new instance of the class. - - The verbs. - - - - Determines whether the given method information is valid for the specified controller context. - - The controller context. - The method info. - - true if the given method information is valid; otherwise, false. - - - - - Gets the list of HTTP verbs the action method will respond to. - - - - - Attribute used to detect someone trying to tamper with a server request. - - When an action method or controller is marked with this attribute, each round trip to the server is validated based on this token. - - - - Defines the methods required for an authorization filter. - - - - - Called when authorization is required. - - The filter context. - - - - Called when authorization is required. - - The filter context. - - - - Gets or sets the salt. - - The salt. - - - - Represents a view engine for rendering a Web Forms page in MVC. - - - - - Abstract base class implementation of the interface. - - You can use this class as a starting point for building your own view engine that relies on the class to access view files. - - - - Initializes a new instance of the class. - - - - - Creates the cache key. - - The prefix. - The name. - Name of the controller. - The cache key. - - - - Creates the partial view. - - The controller context. - The partial path. - - - - - Creates the view. - - The controller context. - The view path. - The master path. - - - - - Files the exists. - - The controller context. - The virtual path. - - - - - Finds the partial view. - - The controller context. - Partial name of the view. - if set to true [use cache]. - The partial view. - - - - Finds the view. - - The controller context. - Name of the view. - Name of the master. - if set to true [use cache]. - The page view. - - - - Releases the view. - - The controller context. - The view. - - - - Gets or sets the master location formats. - - The master location formats. - - - - Gets or sets the partial view location formats. - - The partial view location formats. - - - - 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. - - - - Initializes a new instance of the class. - - - - - Creates the partial view. - - The controller context. - The partial path. - The partial view. - - - - Creates the view. - - The controller context. - The view path. - The master path. - The view. - - - - Determines if a file at the given location exists for the specified controller context. - - The controller context. - The virtual path. - true if the file exists; otherwise, false. - - - - Represents the information needed to build a Web Forms page in MVC. - - - - - Defines the methods required for a view. - - - - - Renders the specified view context. - - The view context. - The writer. - - - - Initializes a new instance of the class. - - The view path. - - - - Initializes a new instance of the class. - - The view path. - The master path. - - - - Renders the specified view context. - - The view context. - The writer. - - - - Gets the master path. - - The master path. - - - - Gets the view path. - - The view path. - - - - Represents the controller factory that registered by default. - - This class provides a convenient base class for those who simply want to tweak controller creation. This class call Dispose on any controller that implements the IDisposable interface. - - - - Creates the controller. - - The request context. - Name of the controller. - A reference to the controller. - - - - Gets the controller instance. - - Type of the controller. - A reference to the controller. - - - - Gets the type of the controller. - - Name of the controller. - The type of the controller. - - - - Releases the controller. - - The controller. - - - - Gets or sets the request context. - - The request context. - - - - Base class used to send a partial view to the response. - - - - - When overridden, returns the used to render the view. - - The controller context. - The view engine result. - - - - Verifies and processes an HTTP request. - - - - - Verifies and processes an HTTP request. - - The HTTP handler. - The HTTP context. - - - - A collection of instances representing - errors when model binding. - - - - - Adds an to the - - The exception. - - - - Adds an error message to the - - The error message. - - - - Represents an HTTP anti-forgery exception. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that holds the contextual information about the source or destination. - - - - Initializes a new instance of the class. - - The message. - - - - Initializes a new instance of the class. - - The message. - The inner exception. - - - - Class used to render a view using an returned by a . - - - - - Searches the registered view engines and returns the used to render the view. - - - - - - - The name of the master view (such as a master page or template) to use when rendering the view. - - The name of the master view. - - - - Provides session state data to the current object. - - - - - Defines the contract for temp data providers which store data viewed on the next request. - - - - - Loads the temporary data. - - The controller context. - The temporary data. - - - - Saves the temporary data. - - The controller context. - The values. - - - - Loads the temporary data. - - The controller context. - The temporary data. - - - - Saves the temporary data. - - The controller context. - The values. - - - - Represents an HTML form. - - - - - Initializes a new instance of the class. - - The HTTP response. - - - - Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - - - - - Releases unmanaged and - optionally - managed resources. - - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - Ends the form. - - - - - Contains information that describes a reflected controller. - - - - - Initializes a new instance of the class. - - Type of the controller. - - - - Finds the action. - - The controller context. - The name of the action. - The information about the action. - - - - Gets all action methods from selector. - - The action method information. - - - - Gets the canonical actions. - - - A list of action descriptors for the controller. - - - - - Returns an array of all of the custom attributes defined on this member, excluding named attributes, or an empty array if there are no custom attributes. - - When true, look up the hierarchy chain for the inherited custom attribute. - - An array of Objects representing custom attributes, or an empty array. - - - The custom attribute type cannot be loaded. - - - There is more than one attribute of type defined on this member. - - - - - Returns an array of custom attributes defined on this member, identified by type, or an empty array if there are no custom attributes of that type. - - The type of the custom attributes. - When true, look up the hierarchy chain for the inherited custom attribute. - - An array of Objects representing custom attributes, or an empty array. - - - The custom attribute type cannot be loaded. - - - There is more than one attribute of type defined on this member. - - - - - Indicates whether one or more instance of is defined on this member. - - The type of the custom attributes. - When true, look up the hierarchy chain for the inherited custom attribute. - - true if the is defined on this member; false otherwise. - - - - - Gets the type of the controller. - - The type of the controller. - - - - Represents the type of a view. - - - - - Gets or sets the name of the type. - - The name of the type. - - - - Provides the context for the ActionExecuted method of an . - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The controller context. - The action descriptor. - if set to true [canceled]. - The exception. - - - - Gets or sets the action descriptor. - - The action descriptor. - - - - Gets or sets a value indicating whether this is canceled. - - true if canceled; otherwise, false. - - - - Gets or sets the exception. - - The exception. - - - - Gets or sets a value indicating whether [exception handled]. - - true if [exception handled]; otherwise, false. - - - - Gets or sets the result. - - The result. - - - - Represents a result that doesn't do anything, like a controller action returning null. - - - This follows a pattern known as the Null Object pattern. - - - - - Does nothing per the Null Object pattern. - - - - - - - - - - - Returns a that renders the supplied content to the response. - - The content to write to the response. - The that renders the supplied content to the response. - - - - Returns a that renders the supplied content to the response. - - The content to write to the response. - The content type. - The that renders the supplied content to the response. - - - - Returns a which renders the supplied content to the response. - - The content to write to the response. - The content type. - The content encoding. - The a which renders the supplied content to the response. - - - - Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - - - - - Releases unmanaged and - optionally - managed resources. - - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - Executes the core. - - - - - Returns a which writes the fileContents to the response. - - The binary content to send to the response. - The content type. - The which writes the fileContents to the response. - - - - Returns a which writes the fileContents to the response. - - The binary content to send to the response. - The content type. - If specified, sets the content-disposition header so that a file download dialog box appears in the browser with the specified file name. - The which writes the fileContents to the response. - - - - Returns a which writes the fileStream to the response. - - The stream to send to the response. - The content type. - The which writes the fileStream to the response. - - - - Returns a which writes the fileStream to the response. - - The stream to send to the response. - The content type. - If specified, sets the content-disposition header so that a file download dialog box appears in the browser with the specified file name. - The which writes the fileStream to the response. - - - - Returns a which writes the file to the response. - - The path to the file to send to the response. - The content type. - The which writes the file to the response. - - - - Returns a which writes the file to the response. - - The path to the file to send to the response. - The content type. - If specified, sets the content-disposition header so that a file download dialog box appears in the browser with the specified file name. - The which writes the file to the response. - - - - Method called whenever a request matches this controller, but not an action of this controller. - - The name of the attempted action. - - - - Returns a which writes a script to the response. - which is then executed on the client. - - The JavaScript code to run on the client. - The which writes a script to the response. - - - - Returns a which serializes the specified object to - JSON and writes the JSON to the response. - - The object which is serialized to JSON and sent to the response. - The which serializes the specified object to - JSON and writes the JSON to the response. - - - - Returns a which serializes the specified object to - JSON and writes the JSON to the response. - - The object which is serialized to JSON and sent to the response. - The content type. - The which serializes the specified object to - JSON and writes the JSON to the response. - - - - Returns a which serializes the specified object to - JSON and writes the JSON to the response. - - The object which is serialized to JSON and sent to the response. - The content type. - The content encoding. - - - - - Initializes the controller. - - The request context. - - - - Method called before the action method is invoked. - - Contains information about the current request and action. - - - - Method called after the action method is invoked. - - Contains information about the current request and action. - - - - Method called when authorization occurs. - - Contains information about the current request and action. - - - - Method called when an unhandled exception occurs in the action. - - Contains information about the current request and action. - - - - Method called after the action result returned by an action method is executed. - - Contains information about the current request and action result. - - - - Method called before the action result returned by an action method is executed. - - Contains information about the current request and action result. - - - - Returns a that renders a partial view to the response. - - - - - - Returns a that renders a partial view to the response. - - The model rendered by the partial view. - - - - Returns a that renders a partial view to the response. - - The name of the partial view. - - - - Returns a that renders a partial view to the response. - - The name of the partial view. - The model rendered by the partial view. - - - - Returns a that redirects to the specified URL. - - The URL to redirect to. - The that redirects to the specified URL. - - - - Returns a that redirects to the specified action. - - The name of the action. - The that redirects to the specified action. - - - - Returns a that redirects to the specified action. - - The name of the action. - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - The that redirects to the specified action. - - - - Returns a that redirects to the specified action. - - The name of the action. - An object containing the parameters for a route. - The that redirects to the specified action. - - - - Returns a that redirects to the specified action. - - The name of the action. - The name of the controller. - The that redirects to the specified action. - - - - Returns a that redirects to the specified action. - - The name of the action. - The name of the controller. - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - The that redirects to the specified action. - - - - Returns a that redirects to the specified action. - - The name of the action. - The name of the controller. - An object containing the parameters for a route. - The that redirects to the specified action. - - - - Returns a that redirects to the specified route. - - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - The that redirects to the specified route. - - - - Returns a that redirects to the specified route. - - An object containing the parameters for a route. - The that redirects to the specified route. - - - - Returns a that redirects to the specified route. - - The name of the route. - The that redirects to the specified route. - - - - Returns a that redirects to the specified route. - - The name of the route. - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - The that redirects to the specified route. - - - - Returns a that redirects to the specified route. - - The name of the route. - An object containing the parameters for a route. - The that redirects to the specified route. - - - - Updates the specified model instance using values from the Controller's current ValueProvider. - - The type of the model object - The model instance to update. - true if successful; otherwise, false. - - - - Updates the specified model instance using values from the Controller's current ValueProvider. - - The type of the model object - The model instance to update. - Prefix to use when looking up values in the value provider. - true if successful; otherwise, false. - - - - Updates the specified model instance using values from the Controller's current ValueProvider. - - The type of the model object - The model instance to update. - List of properties of the model to update. - true if successful; otherwise, false. - - - - Updates the specified model instance using values from the Controller's current ValueProvider. - - The type of the model object - The model instance to update. - List of properties of the model to update. - Prefix to use when looking up values in the value provider. - true if successful; otherwise, false. - - - - Updates the specified model instance using values from the Controller's current ValueProvider. - - The type of the model object - The model instance to update. - Prefix to use when looking up values in the value provider. - List of properties of the model to update. - List of properties to explicitly exclude from update. These are excluded even if they are listed in the includeProperties list. - true if successful; otherwise, false. - - - - Updates the specified model instance using values from the Controller's current ValueProvider. - - The type of the model object - The model instance to update. - A dictionary of values used to update the model. - true if successful; otherwise, false. - - - - Updates the specified model instance using values from the Controller's current ValueProvider. - - The type of the model object - The model instance to update. - Prefix to use when looking up values in the value provider. - A dictionary of values used to update the model. - true if successful; otherwise, false. - - - - Updates the specified model instance using values from the Controller's current ValueProvider. - - The type of the model object - The model instance to update. - List of properties of the model to update. - A dictionary of values used to update the model. - true if successful; otherwise, false. - - - - Updates the specified model instance using values from the Controller's current ValueProvider. - - The type of the model object - The model instance to update. - Prefix to use when looking up values in the value provider. - List of properties of the model to update. - A dictionary of values used to update the model. - true if successful; otherwise, false. - - - - Updates the specified model instance using values from the Controller's current ValueProvider. - - The type of the model object - The model instance to update. - Prefix to use when looking up values in the value provider. - List of properties of the model to update. - List of properties to explicitly exclude from update. These are excluded even if they are listed in the includeProperties list. - A dictionary of values used to update the model. - true if successful; otherwise, false. - - - - Updates the specified model instance using values from the Controller's current ValueProvider. - - The type of the model object - The model instance to update. - - - - Updates the specified model instance using values from the Controller's current ValueProvider. - - The type of the model object - The model instance to update. - Prefix to use when looking up values in the value provider. - - - - Updates the specified model instance using values from the Controller's current ValueProvider. - - The type of the model object - The model instance to update. - List of properties of the model to update. - - - - Updates the specified model instance using values from the Controller's current ValueProvider. - - The type of the model object - The model instance to update. - Prefix to use when looking up values in the value provider. - List of properties of the model to update. - - - - Updates the specified model instance using values from the Controller's current ValueProvider. - - The type of the model object - The model instance to update. - Prefix to use when looking up values in the value provider. - List of properties of the model to update. - List of properties to explicitly exclude from update. These are excluded even if they are listed in the includeProperties list. - - - - Updates the specified model instance using values from the Controller's current ValueProvider. - - The type of the model object - The model instance to update. - A dictionary of values used to update the model. - - - - Updates the specified model instance using values from the Controller's current ValueProvider. - - The type of the model object - The model instance to update. - Prefix to use when looking up values in the value provider. - A dictionary of values used to update the model. - - - - Updates the specified model instance using values from the Controller's current ValueProvider. - - The type of the model object - The model instance to update. - List of properties of the model to update. - A dictionary of values used to update the model. - - - - Updates the specified model instance using values from the Controller's current ValueProvider. - - The type of the model object - The model instance to update. - Prefix to use when looking up values in the value provider. - List of properties of the model to update. - A dictionary of values used to update the model. - - - - Updates the specified model instance using values from the Controller's current ValueProvider. - - The type of the model object - The model instance to update. - Prefix to use when looking up values in the value provider. - List of properties of the model to update. - List of properties to explicitly exclude from update. These are excluded even if they are listed in the includeProperties list. - A dictionary of values used to update the model. - - - - Returns a that renders a view to the response. - - The that renders a view to the response. - - - - Returns a that renders a view to the response. - - The model rendered by the view. - The that renders a view to the response. - - - - Returns a that renders a view to the response. - - The name of the partial view. - The that renders a view to the response. - - - - Returns a that renders a view to the response. - - The name of the view. - The name of the master view. - The that renders a view to the response. - - - - Returns a that renders a view to the response. - - The name of the view. - The model rendered by the view. - The that renders a view to the response. - - - - Returns a that renders a view to the response. - - The name of the view. - The name of the master view. - The model rendered by the view. - The that renders a view to the response. - - - - Returns a that renders the specified to the response. - - The view rendered to the response. - The that renders the specified to the response. - - - - Returns a which renders the specified to the response. - - The view rendered to the response. - The model rendered by the view. - The which renders the specified to the response. - - - - Called before an action method executes. - - The filter context. - - - - Called before an action method executes. - - The filter context. - - - - Called when authorizing access to the action method. - - The filter context. - - - - Called when an exception occurs in an action method. - - The filter context. - - - - Called before the action result executes. - - The filter context. - - - - Called after the action result executes. - - The filter context. - - - - Gets the for the controller. - - The action invoker. - - - - Gets or sets the binders. - - The binders. - - - - Encapsulates all HTTP-specific information about an individual HTTP request. - - The HTTP context. - - - - Gets the object containing the - state of the model and model binding validation. - - The state of the model. - - - - Gets the object for the current HTTP request. - - The request. - - - - Gets the object for the current HTTP request. - - The response. - - - - Returns the for the current request. - - The route data. - - - - Gets the object that provides methods used in processing Web requests. - - The server. - - - - Gets the object for the current HTTP request. - - The session. - - - - Gets the object used to store data for the next request. - - The temp data provider. - - - - Gets the object used to generate URLs using routing. - - The URL. - - - - Gets the security information for the current HTTP request. - - The user. - - - - Attribute used for marking an action method whose output will be cached. - - - - - Called before the action result executes. - - The filter context. - - - - Gets or sets the cache profile. - - The cache profile. - - - - Gets or sets the duration. - - The duration. - - - - Gets or sets the location. - - The location. - - - - Gets or sets a value indicating whether to store the cache. - - true if the cache should be stored; otherwise, false. - - - - 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. - - The vary by custom. - - - - Gets or sets the vary by header. - - The vary by header. - - - - Gets or sets the vary by param. - - The vary by param. - - - - Initializes the control tree during page generation based on the declarative nature of the page. - - - - - Defines the methods required for a memory cache of view locations. - - - - - Gets the view location. - - The HTTP context. - The key. - The view location. - - - - Inserts the view location. - - The HTTP context. - The key. - The virtual path. - - - - Enumerates the AJAX script insertion modes. - - - - - Replace the element. - - - - - Insert before the element. - - - - - Insert after the element. - - - - - Attribute used associate a model type to a model-builder type. - - - - - Initializes a new instance of the class. - - Type of the binder. - - - - Gets the model binder. - - - A reference to the interface of the model binder. - - - - - Gets the type of the binder. - - The type of the binder. - - - - Represents support for ASP.NET AJAX within an ASP.NET MVC application. - - - - - Returns an anchor tag containing the URL to the specified action, such that when the action link is clicked, - the action is invoked asynchronously via JavaScript. - - The ajax helper. - The inner text of the anchor tag. - The name of the action. - An object providing options for the asynchronous request. - An anchor tag. - - - - Returns an anchor tag containing the URL to the specified action, such that when the action link is clicked, - the action is invoked asynchronously via JavaScript. - - The ajax helper. - The inner text of the anchor tag. - The name of the action. - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - An object providing options for the asynchronous request. - An anchor tag. - - - - Returns an anchor tag containing the URL to the specified action, such that when the action link is clicked, - the action is invoked asynchronously via JavaScript. - - The ajax helper. - The inner text of the anchor tag. - The name of the action. - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - An object providing options for the asynchronous request. - An object containing the HTML attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - An anchor tag. - - - - Returns an anchor tag containing the URL to the specified action, such that when the action link is clicked, - the action is invoked asynchronously via JavaScript. - - The ajax helper. - The inner text of the anchor tag. - The name of the action. - An object containing the parameters for a route. - An object providing options for the asynchronous request. - An anchor tag. - - - - Returns an anchor tag containing the URL to the specified action, such that when the action link is clicked, - the action is invoked asynchronously via JavaScript. - - The ajax helper. - The inner text of the anchor tag. - The name of the action. - An object containing the parameters for a route. - An object providing options for the asynchronous request. - An object containing the HTML attributes for the element. - An anchor tag. - - - - Returns an anchor tag containing the URL to the specified action, such that when the action link is clicked, - the action is invoked asynchronously via JavaScript. - - The ajax helper. - The inner text of the anchor tag. - The name of the action. - The name of the controller. - An object providing options for the asynchronous request. - An anchor tag. - - - - Returns an anchor tag containing the URL to the specified action, such that when the action link is clicked, - the action is invoked asynchronously via JavaScript. - - The ajax helper. - The inner text of the anchor tag. - The name of the action. - The name of the controller. - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - An object providing options for the asynchronous request. - An anchor tag. - - - - Returns an anchor tag containing the URL to the specified action, such that when the action link is clicked, - the action is invoked asynchronously via JavaScript. - - The ajax helper. - The inner text of the anchor tag. - The name of the action. - The name of the controller. - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - An object providing options for the asynchronous request. - An object containing the HTML attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - An anchor tag. - - - - Returns an anchor tag containing the URL to the specified action, such that when the action link is clicked, - the action is invoked asynchronously via JavaScript. - - The ajax helper. - The inner text of the anchor tag. - The name of the action. - The name of the controller. - An object containing the parameters for a route. - An object providing options for the asynchronous request. - An anchor tag. - - - - Returns an anchor tag containing the URL to the specified action, such that when the action link is clicked, - the action is invoked asynchronously via JavaScript. - - The ajax helper. - The inner text of the anchor tag. - The name of the action. - The name of the controller. - An object containing the parameters for a route. - An object providing options for the asynchronous request. - An object containing the HTML attributes for the element. - An anchor tag. - - - - Returns an anchor tag containing the URL to the specified action, such that when the action link is clicked, - the action is invoked asynchronously via JavaScript. - - The ajax helper. - The inner text of the anchor tag. - 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 (also known as anchor name). - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - An object providing options for the asynchronous request. - An object containing the HTML attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - An anchor tag. - - - - Returns an anchor tag containing the URL to the specified action, such that when the action link is clicked, - the action is invoked asynchronously via JavaScript. - - The ajax helper. - The inner text of the anchor tag. - 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 (also known as anchor name). - An object containing the parameters for a route. - An object providing options for the asynchronous request. - An object containing the HTML attributes for the element. - An anchor tag. - - - - Writes an opening form tag to the response while returning an - instance. Can be used in a using block, in which case it renders the closing form tag at the end of the - using block. The form is submitted asynchronously using JavaScript. - - The ajax helper. - An object providing options for the asynchronous request. - - An instance. - - - - - Writes an opening form tag to the response while returning an - instance. Can be used in a using block, in which case it renders the closing form tag at the end of the - using block. The form is submitted asynchronously using JavaScript. - - The ajax helper. - The name of the action. - An object providing options for the asynchronous request. - - An instance. - - - - - Writes an opening form tag to the response while returning an - instance. Can be used in a using block, in which case it renders the closing form tag at the end of the - using block. The form is submitted asynchronously using JavaScript. - - The ajax helper. - The name of the action. - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - An object providing options for the asynchronous request. - - An instance. - - - - - Writes an opening form tag to the response while returning an - instance. Can be used in a using block, in which case it renders the closing form tag at the end of the - using block. The form is submitted asynchronously using JavaScript. - - The ajax helper. - The name of the action. - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - An object providing options for the asynchronous request. - An object containing the HTML attributes for the element. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - - An instance. - - - - - Writes an opening form tag to the response while returning an - instance. Can be used in a using block, in which case it renders the closing form tag at the end of the - using block. The form is submitted asynchronously using JavaScript. - - The ajax helper. - The name of the action. - An object containing the parameters for a route. - An object providing options for the asynchronous request. - - An instance. - - - - - Writes an opening form tag to the response while returning an - instance. Can be used in a using block, in which case it renders the closing form tag at the end of the - using block. The form is submitted asynchronously using JavaScript. - - The ajax helper. - The name of the action. - An object containing the parameters for a route. - An object providing options for the asynchronous request. - An object containing the HTML attributes for the element. - - An instance. - - - - - Writes an opening form tag to the response while returning an - instance. Can be used in a using block, in which case it renders the closing form tag at the end of the - using block. The form is submitted asynchronously using JavaScript. - - The ajax helper. - The name of the action. - The name of the controller. - An object providing options for the asynchronous request. - - An instance. - - - - - Writes an opening form tag to the response while returning an - instance. Can be used in a using block, in which case it renders the closing form tag at the end of the - using block. The form is submitted asynchronously using JavaScript. - - The ajax helper. - The name of the action. - The name of the controller. - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - An object providing options for the asynchronous request. - - An instance. - - - - - Writes an opening form tag to the response while returning an - instance. Can be used in a using block, in which case it renders the closing form tag at the end of the - using block. The form is submitted asynchronously using JavaScript. - - The ajax helper. - The name of the action. - The name of the controller. - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - An object providing options for the asynchronous request. - An object containing the HTML attributes for the element. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - - An instance. - - - - - Writes an opening form tag to the response while returning an - instance. Can be used in a using block, in which case it renders the closing form tag at the end of the - using block. The form is submitted asynchronously using JavaScript. - - The ajax helper. - The name of the action. - The name of the controller. - An object containing the parameters for a route. - An object providing options for the asynchronous request. - - An instance. - - - - - Writes an opening form tag to the response while returning an - instance. Can be used in a using block, in which case it renders the closing form tag at the end of the - using block. The form is submitted asynchronously using JavaScript. - - The ajax helper. - The name of the action. - The name of the controller. - An object containing the parameters for a route. - An object providing options for the asynchronous request. - An object containing the HTML attributes for the element. - - An instance. - - - - - Writes an opening form tag to the response while returning an - instance. Can be used in a using block, in which case it renders the closing form tag at the end of the - using block. The form is submitted asynchronously using JavaScript. - - The ajax helper. - The name of the route to use to obtain the form post URL. - An object providing options for the asynchronous request. - - An instance. - - - - - Writes an opening form tag to the response while returning an - instance. Can be used in a using block, in which case it renders the closing form tag at the end of the - using block. The form is submitted asynchronously using JavaScript. - - The ajax helper. - The name of the route to use to obtain the form post URL. - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - An object providing options for the asynchronous request. - - An instance. - - - - - Writes an opening form tag to the response while returning an - instance. Can be used in a using block, in which case it renders the closing form tag at the end of the - using block. The form is submitted asynchronously using JavaScript. - - The ajax helper. - The name of the route to use to obtain the form post URL. - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - An object providing options for the asynchronous request. - An object containing the HTML attributes for the element. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - - An instance. - - - - - Writes an opening form tag to the response while returning an - instance. Can be used in a using block, in which case it renders the closing form tag at the end of the - using block. The form is submitted asynchronously using JavaScript. - - The ajax helper. - The name of the route to use to obtain the form post URL. - An object containing the parameters for a route. - An object providing options for the asynchronous request. - - An instance. - - - - - Writes an opening form tag to the response while returning an - instance. Can be used in a using block, in which case it renders the closing form tag at the end of the - using block. The form is submitted asynchronously using JavaScript. - - The ajax helper. - The name of the route to use to obtain the form post URL. - An object containing the parameters for a route. - An object providing options for the asynchronous request. - An object containing the HTML attributes for the element. - - An instance. - - - - - Returns an anchor tag containing the virtual path for the specified route values, such that when the link is clicked, - a request is made to the virtual path asynchronously via JavaScript. - - The ajax helper. - The inner text of the anchor tag. - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - An object providing options for the asynchronous request. - An anchor tag. - - - - Returns an anchor tag containing the virtual path for the specified route values, such that when the link is clicked, - a request is made to the virtual path asynchronously via JavaScript. - - The ajax helper. - The inner text of the anchor tag. - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - An object providing options for the asynchronous request. - An object containing the HTML attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - An anchor tag. - - - - Returns an anchor tag containing the virtual path for the specified route values, such that when the link is clicked, - a request is made to the virtual path asynchronously via JavaScript. - - The ajax helper. - The inner text of the anchor tag. - An object containing the parameters for a route. - An object providing options for the asynchronous request. - An anchor tag. - - - - Returns an anchor tag containing the virtual path for the specified route values, such that when the link is clicked, - a request is made to the virtual path asynchronously via JavaScript. - - The ajax helper. - The inner text of the anchor tag. - An object containing the parameters for a route. - An object providing options for the asynchronous request. - An object containing the HTML attributes for the element. - An anchor tag. - - - - Returns an anchor tag containing the virtual path for the specified route values, such that when the link is clicked, - a request is made to the virtual path asynchronously via JavaScript. - - The ajax helper. - The inner text of the anchor tag. - The name of the route to use to obtain the form post URL. - An object providing options for the asynchronous request. - An anchor tag. - - - - Returns an anchor tag containing the virtual path for the specified route values, such that when the link is clicked, - a request is made to the virtual path asynchronously via JavaScript. - - The ajax helper. - The inner text of the anchor tag. - The name of the route to use to obtain the form post URL. - An object providing options for the asynchronous request. - An object containing the HTML attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - An anchor tag. - - - - Returns an anchor tag containing the virtual path for the specified route values, such that when the link is clicked, - a request is made to the virtual path asynchronously via JavaScript. - - The ajax helper. - The inner text of the anchor tag. - The name of the route to use to obtain the form post URL. - An object providing options for the asynchronous request. - An object containing the HTML attributes for the element. - An anchor tag. - - - - Returns an anchor tag containing the virtual path for the specified route values, such that when the link is clicked, - a request is made to the virtual path asynchronously via JavaScript. - - The ajax helper. - The inner text of the anchor tag. - The name of the route to use to obtain the form post URL. - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - An object providing options for the asynchronous request. - An anchor tag. - - - - Returns an anchor tag containing the virtual path for the specified route values, such that when the link is clicked, - a request is made to the virtual path asynchronously via JavaScript. - - The ajax helper. - The inner text of the anchor tag. - The name of the route to use to obtain the form post URL. - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - An object providing options for the asynchronous request. - An object containing the HTML attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - An anchor tag. - - - - Returns an anchor tag containing the virtual path for the specified route values, such that when the link is clicked, - a request is made to the virtual path asynchronously via JavaScript. - - The ajax helper. - The inner text of the anchor tag. - The name of the route to use to obtain the form post URL. - An object containing the parameters for a route. - An object providing options for the asynchronous request. - An anchor tag. - - - - Returns an anchor tag containing the virtual path for the specified route values, such that when the link is clicked, - a request is made to the virtual path asynchronously via JavaScript. - - The ajax helper. - The inner text of the anchor tag. - The name of the route to use to obtain the form post URL. - An object containing the parameters for a route. - An object providing options for the asynchronous request. - An object containing the HTML attributes for the element. - An anchor tag. - - - - Returns an anchor tag containing the virtual path for the specified route values, such that when the link is clicked, - a request is made to the virtual path asynchronously via JavaScript. - - The ajax helper. - The inner text of the anchor tag. - 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 (also known as anchor name). - An object containing the parameters for a route. - An object providing options for the asynchronous request. - An object containing the HTML attributes for the element. - An anchor tag. - - - - Provides the context for using an . - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The controller context. - - - - Gets or sets the result. - - The result. - - - - Represents the information needed to build a master view page. - - - - - Gets the ajax. - - The ajax. - - - - Gets the HTML. - - The HTML. - - - - 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. - - The writer. - - - - Attribute that is use to indicated that a controller method is not an action method. - - - - - Determines whether the attribute marks a valid non-action method given the specified controller context. - - The controller context. - The method info. - - true if the attribute marks a valid non-action method; otherwise, false. - - - - - Extends a NameValueCollection so it copies the collection to specified dictionary./> - - - - - Copies to a given collection to the specified destination. - - The collection. - The destination. - - - - Copies to a given collection to the specified destination. - - The collection. - The destination. - If set to true, this method replaces the previous entries. - - - - Represents a user-defined content type that is the result of an action method. - - - - - Enables processing of the result of an action method by a custom type that inherits from . - - The context within which the result is executed. - - - - 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. - - - - Represents support for making selects in a list. - - - - - Returns a select tag used to select a single option from a set of possible choices. - - The HTML helper. - The name of the form field and used as a key to look up possible options. If ViewData[name] implements IEnumerable of . - Provides the text for a default empty valued option, if it is not null. - - - - - Returns a select tag used to select a single option from a set of possible choices. - - The HTML helper. - The name of the form field and used as a key to look up possible options. If ViewData[name] implements IEnumerable of . - The enumeration of SelectListItem instances used to populate the drop-down list. - Provides the text for a default empty valued option, if it is not null. - - - - - Returns a select tag used to select a single option from a set of possible choices. - - The HTML helper. - The name of the form field and used as a key to look up possible options. If ViewData[name] implements IEnumerable of . - The enumeration of SelectListItem instances used to populate the drop-down list. - Provides the text for a default empty valued option, if it is not null. - An object containing the HTML attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - - - - - Returns a select tag used to select a single option from a set of possible choices. - - The HTML helper. - The name of the form field and used as a key to look up possible options. If ViewData[name] implements IEnumerable of . - - - - - Returns a select tag used to select a single option from a set of possible choices. - - The HTML helper. - The name of the form field and used as a key to look up possible options. If ViewData[name] implements IEnumerable of . - The enumeration of SelectListItem instances used to populate the drop-down list. - - - - - Returns a select tag used to select a single option from a set of possible choices. - - The HTML helper. - The name of the form field and used as a key to look up possible options. If ViewData[name] implements IEnumerable of . - The enumeration of SelectListItem instances used to populate the drop-down list. - An object containing the HTML attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - - - - - Returns a select tag used to select a single option from a set of possible choices. - - The HTML helper. - The name of the form field and used as a key to look up possible options. If ViewData[name] implements IEnumerable of . - The enumeration of SelectListItem instances used to populate the drop-down list. - An object containing the HTML attributes for the element. - - - - - Returns a select tag used to select a single option from a set of possible choices. - - The HTML helper. - The name of the form field and used as a key to look up possible options. If ViewData[name] implements IEnumerable of . - The enumeration of SelectListItem instances used to populate the drop-down list. - Provides the text for a default empty valued option, if it is not null. - An object containing the HTML attributes for the element. - - - - - Returns a select tag used to select a multiple options from a set of possible choices. - - The HTML helper. - The name of the form field and used as a key to look up possible options. If ViewData[name] implements IEnumerable of . - - - - - Returns a select tag used to select a multiple options from a set of possible choices. - - The HTML helper. - The name of the form field and used as a key to look up possible options. If ViewData[name] implements IEnumerable of . - The enumeration of SelectListItem instances used to populate the drop-down list. - - - - - Returns a select tag used to select a multiple options from a set of possible choices. - - The HTML helper. - The name of the form field and used as a key to look up possible options. If ViewData[name] implements IEnumerable of . - The enumeration of SelectListItem instances used to populate the drop-down list. - An object containing the HTML attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - - - - - Returns a select tag used to select a multiple options from a set of possible choices. - - The HTML helper. - The name of the form field and used as a key to look up possible options. If ViewData[name] implements IEnumerable of . - The enumeration of SelectListItem instances used to populate the drop-down list. - An object containing the HTML attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - - - - - Represents support for rendering a partial view. - - - - - Renders the specified partial view. - - The HTML helper. - The name of the partial view. - - - - Renders the specified partial view, replacing its ViewData property with the - supplied ViewDataDictionary. - - The HTML helper. - The name of the partial view. - The view data. - - - - Renders the specified partial view, passing in a copy of the current - ViewDataDictionary, 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 - supplied ViewDataDictionary. The Model - property of the view data is set 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. - - - - Represents the HTTP request type for a Form. - - - - - GET request. - - - - - POST request. - - - - - Contains information that describes a reflected action method. - - - - - Provides information about an action method, such as its name, controller, parameters, attributes, and filters. - - - - - Executes the action method with the given parameters and the specified controller context. - - The controller context. - The parameters. - The result of executing the action method. - - - - Returns an array of all of the custom attributes defined on this member, excluding named attributes, or an empty array if there are no custom attributes. - - When true, look up the hierarchy chain for the inherited custom attribute. - - An array of Objects representing custom attributes, or an empty array. - - - The custom attribute type cannot be loaded. - - - There is more than one attribute of type defined on this member. - - - - - Returns an array of custom attributes defined on this member, identified by type, or an empty array if there are no custom attributes of that type. - - The type of the custom attributes. - When true, look up the hierarchy chain for the inherited custom attribute. - - An array of Objects representing custom attributes, or an empty array. - - - The custom attribute type cannot be loaded. - - - There is more than one attribute of type defined on this member. - - - - - Gets the filters associated with this action method. - - The filters. - - - - Gets the parameters. - - The parameters. - - - - Gets the selectors. - - The selectors. - - - - Indicates whether one or more instance of is defined on this member. - - The type of the custom attributes. - When true, look up the hierarchy chain for the inherited custom attribute. - - true if the is defined on this member; false otherwise. - - - - - Gets the name of the action. - - The name of the action. - - - - Gets the controller descriptor. - - The controller descriptor. - - - - Initializes a new instance of the class. - - The action method information. - The name of the action. - The controller descriptor. - - - - Executes the specified controller context. - - The controller context. - The parameters. - The action return value. - - - - Returns an array of all of the custom attributes defined on this member, excluding named attributes, or an empty array if there are no custom attributes. - - When true, look up the hierarchy chain for the inherited custom attribute. - - An array of Objects representing custom attributes, or an empty array. - - - The custom attribute type cannot be loaded. - - - There is more than one attribute of type defined on this member. - - - - - Returns an array of custom attributes defined on this member, identified by type, or an empty array if there are no custom attributes of that type. - - The type of the custom attributes. - When true, look up the hierarchy chain for the inherited custom attribute. - - An array of Objects representing custom attributes, or an empty array. - - - The custom attribute type cannot be loaded. - - - There is more than one attribute of type defined on this member. - - - - - Gets information about action filters. - - The filter information. - - - - Gets the parameters of the action method. - - The parameters. - - - - Gets the action selectors. - - The action selectors. - - - - Indicates whether one or more instance of is defined on this member. - - The type of the custom attributes. - When true, look up the hierarchy chain for the inherited custom attribute. - - true if the is defined on this member; false otherwise. - - - - - Gets the name of the action. - - The name of the action. - - - - Gets the controller descriptor. - - The controller descriptor. - - - - Gets the action method information. - - The action method information. - - - - 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. - - The view context. - The view data container. - - - - Initializes a new instance of the class. - - The view context. - The view data container. - The route collection. - - - - Gets the current . - - The view data. - - - - Selects the controller that will handle an HTTP request. - - - - - Header name of the ASP.NET MVC version. - - - - - Initializes a new instance of the class. - - The request context. - - - - Adds the version header. - - The HTTP context. - - - - Processes the request. - - The HTTP context. - - - - Processes the request. - - The HTTP context. - - - - Processes the request. - - The HTTP context. - - - - Gets a value indicating whether another request can use the instance. - - - true if the instance is reusable; otherwise, false. - - - - - Gets or sets a value indicating whether [disable MVC response header]. - - - true if [disable MVC response header]; otherwise, false. - - - - - Gets the request context. - - The request context. - - - - Gets a value indicating whether another request can use the instance. - - - true if the instance is reusable; otherwise, false. - - - - - Encapsulates information for handling an error thrown by an action method. - - - - - Initializes a new instance of the class. - - The exception. - Name of the controller. - The name of the action. - - - - Gets the name of the action. - - The name of the action. - - - - Gets the name of the controller. - - The name of the controller. - - - - Gets the exception. - - The exception. - - - - Represents support for HTML links in an application. - - - - - Returns an anchor tag containing the virtual path to the specified action. - - The HTML helper. - The inner text of the anchor tag. - The name of the action. - An anchor tag. - - - - Returns an anchor tag containing the virtual path to the specified action. - - The HTML helper. - The inner text of the anchor tag. - The name of the action. - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - An anchor tag. - - - - Returns an anchor tag containing the virtual path to the specified action. - - The HTML helper. - The inner text of the anchor tag. - The name of the action. - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - An object containing the HTML attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - An anchor tag. - - - - Returns an anchor tag containing the virtual path to the specified action. - - The HTML helper. - The inner text of the anchor tag. - The name of the action. - An object containing the parameters for a route. - An anchor tag. - - - - Returns an anchor tag containing the virtual path to the specified action. - - The HTML helper. - The inner text of the anchor tag. - The name of the action. - An object containing the parameters for a route. - An object containing the HTML attributes for the element. - An anchor tag. - - - - Returns an anchor tag containing the virtual path to the specified action. - - The HTML helper. - The inner text of the anchor tag. - The name of the action. - The name of the controller. - An anchor tag. - - - - Returns an anchor tag containing the virtual path to the specified action. - - The HTML helper. - The inner text of the anchor tag. - The name of the action. - The name of the controller. - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - An object containing the HTML attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - An anchor tag. - - - - Returns an anchor tag containing the virtual path to the specified action. - - The HTML helper. - The inner text of the anchor tag. - The name of the action. - The name of the controller. - An object containing the parameters for a route. - An object containing the HTML attributes for the element. - An anchor tag. - - - - Returns an anchor tag containing the URL to the specified action. - - The HTML helper. - The inner text of the anchor tag. - 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 (also known as anchor name). - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - An object containing the HTML attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - An anchor tag. - - - - Returns an anchor tag containing the URL to the specified action. - - The HTML helper. - The inner text of the anchor tag. - 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 (also known as anchor name). - An object containing the parameters for a route. - An object containing the HTML attributes for the element. - An anchor tag. - - - - Returns an anchor tag containing the virtual path for the specified route values. - - The HTML helper. - The inner text of the anchor tag. - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - An anchor tag. - - - - Returns an anchor tag containing the virtual path for the specified route values. - - The HTML helper. - The inner text of the anchor tag. - An object containing the parameters for a route. - An anchor tag. - - - - Returns an anchor tag containing the virtual path for the specified route values. - - The HTML helper. - The inner text of the anchor tag. - The name of the route used to return a virtual path. - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - An anchor tag. - - - - Returns an anchor tag containing the virtual path for the specified route values. - - The HTML helper. - The inner text of the anchor tag. - The name of the route used to return a virtual path. - An object containing the parameters for a route. - An anchor tag. - - - - Returns an anchor tag containing the virtual path for the specified route values. - - The HTML helper. - The inner text of the anchor tag. - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - An object containing the HTML attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - An anchor tag. - - - - Returns an anchor tag containing the virtual path for the specified route values. - - The HTML helper. - The inner text of the anchor tag. - An object containing the parameters for a route. - An object containing the HTML attributes for the element. - An anchor tag. - - - - Returns an anchor tag containing the virtual path for the specified route values. - - The HTML helper. - The inner text of the anchor tag. - The name of the route used to return a virtual path. - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - An object containing the HTML attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - An anchor tag. - - - - Returns an anchor tag containing the virtual path for the specified route values. - - The HTML helper. - The inner text of the anchor tag. - The name of the route used to return a virtual path. - An object containing the parameters for a route. - An object containing the HTML attributes for the element. - An anchor tag. - - - - Returns an anchor tag containing the URL for the specified route values. - - The HTML helper. - The inner text of the anchor tag. - The name of the route 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 (also known as anchor name). - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - An object containing the HTML attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - An anchor tag. - - - - Returns an anchor tag containing the URL for the specified route values. - - The HTML helper. - The inner text of the anchor tag. - The name of the route 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 (also known as anchor name). - An object containing the parameters for a route. - An object containing the HTML attributes for the element. - An anchor tag. - - - - Represents support for HTML text area controls. - - - - - Returns a text area tag. - - The HTML helper. - The name. - The text area. - - - - Returns a text area tag. - - The HTML helper. - The name. - The HTML attributes. - The text area. - - - - Returns a text area tag. - - The HTML helper. - The name. - The HTML attributes. - The text area. - - - - Returns a text area tag. - - The HTML helper. - The name. - The value. - The text area. - - - - Returns a text area tag. - - The HTML helper. - The name. - The value. - The HTML attributes. - The text area. - - - - Returns a text area tag. - - The HTML helper. - The name. - The value. - The HTML attributes. - The text area. - - - - Returns a text area tag. - - The HTML helper. - The name. - The value. - The rows. - The columns. - The HTML attributes. - The text area. - - - - Returns a text area tag. - - The HTML helper. - The name. - The value. - The rows. - The columns. - The HTML attributes. - The text area. - - - - Sends the contents of a file to the response. - - - - - Initializes an instance of with the specified file name and content type. - - The name of the file to send to the response. - The content type of the response. - - - - Writes the file. - - The response. - - - - The path to the file which is sent to the response. - - The name of the file. - - - - Attribute used to mark action methods whose input needs to be validated. - - - - - Initializes a new instance of the class. - - if set to true [enable validation]. - - - - Called when authorization is required. - - The filter context. - - - - Gets a value indicating whether [enable validation]. - - true if [enable validation]; otherwise, false. - - - - Represents a collection of objects. - - - - - Initializes a new instance of the class. - - The controller context. - - - - Adds an item to the . - - The object to add to the . - - The is read-only. - - - - - Adds an element with the provided key and value to the . - - The object to use as the key of the element to add. - The object to use as the value of the element to add. - - is null. - - - An element with the same key already exists in the . - - - The is read-only. - - - - - Adds a key/value pair to the dictionary if it is not already present. - - The key. - The result. - - - - Removes all items from the . - - - The is read-only. - - - - - Determines whether the contains a specific value. - - The object to locate in the . - - true if is found in the ; otherwise, false. - - - - - Determines whether the contains an element with the specified key. - - The key to locate in the . - - true if the contains an element with the key; otherwise, false. - - - is null. - - - - - Copies the elements of the to an , starting at a particular index. - - The one-dimensional that is the destination of the elements copied from . The 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 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 . - - - - - Returns an enumerator that iterates through the collection. - - - A that can be used to iterate through the collection. - - - - - Removes the first occurrence of a specific object from the . - - The object to remove from the . - - true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . - - - The is read-only. - - - - - Removes the element with the specified key from the . - - The key of the element to remove. - - true if the element is successfully removed; otherwise, false. This method also returns false if was not found in the original . - - - is null. - - - The is read-only. - - - - - Gets the value associated with the specified key. - - The key whose value to get. - When this method returns, the value associated with the specified key, if the key is found; otherwise, the default value for the type of the parameter. This parameter is passed uninitialized. - - true if the object that implements contains an element with the specified key; otherwise, false. - - - is null. - - - - - Returns an enumerator that iterates through a collection. - - - An object that can be used to iterate through the collection. - - - - - Gets the controller context. - - The controller context. - - - - Gets the number of elements contained in the . - - - - The number of elements contained in the . - - - - - Gets the dictionary. - - The dictionary. - - - - Gets a value indicating whether the is read-only. - - - true if the is read-only; otherwise, false. - - - - - Gets an containing the keys of the . - - - - An containing the keys of the object that implements . - - - - - Gets or sets the with the specified key. - - - - - - Gets an containing the values in the . - - - - An containing the values in the object that implements . - - - - - A strongly-typed resource class, for looking up localized strings, etc. - - - - - Returns the cached ResourceManager instance used by this class. - - - - - Overrides the current thread's CurrentUICulture property for all - resource lookups using this strongly typed resource class. - - - - - Looks up a localized string similar to The current request for action '{0}' on controller type '{1}' is ambiguous between the following action methods:{2}. - - - - - Looks up a localized string similar to {0} on type {1}. - - - - - Looks up a localized string similar to No route in the route table matches the supplied values. - - - - - Looks up a localized string similar to A required anti-forgery token was not supplied or was invalid. - - - - - Looks up a localized string similar to The value '{0}' is outside the valid range of the enumeration type '{1}'. - - - - - Looks up a localized string similar to Value cannot be null or empty. - - - - - Looks up a localized string similar to The partial view '{0}' could not be found. The following locations were searched:{1}. - - - - - Looks up a localized string similar to The property '{0}' cannot be null or empty. - - - - - Looks up a localized string similar to The value '{0}' is invalid. - - - - - Looks up a localized string similar to The view '{0}' or its master could not be found. The following locations were searched:{1}. - - - - - Looks up a localized string similar to A public action method '{0}' could not be found on controller '{1}'. - - - - - Looks up a localized string similar to The model of type '{0}' was not successfully updated. - - - - - Looks up a localized string similar to There was an error creating the IControllerFactory '{0}'. Check that it has a public parameterless constructor. - - - - - Looks up a localized string similar to The IControllerFactory '{0}' did not return a controller for a controller named '{1}'. - - - - - Looks up a localized string similar to The controller factory type '{0}' must implement the IControllerFactory interface. - - - - - Looks up a localized string similar to The controller name '{0}' is ambiguous between the following types:{1}. - - - - - Looks up a localized string similar to An error occurred while creating a controller of type '{0}'. If the controller doesn't have a controller factory, ensure that it has a parameterless public constructor. - - - - - Looks up a localized string similar to The controller for path '{0}' could not be found or it does not implement IController. - - - - - Looks up a localized string similar to The controller type '{0}' must implement IController. - - - - - Looks up a localized string similar to A value is required. - - - - - Looks up a localized string similar to The total number of ticks for the TimeSpan must be greater than 0. - - - - - Looks up a localized string similar to The type '{0}' does not inherit from Exception. - - - - - Looks up a localized string similar to Order must be greater than or equal to -1. - - - - - Looks up a localized string similar to There is no ViewData item with the key '{0}' of type '{1}'. - - - - - Looks up a localized string similar to The value must be greater than or equal to zero. - - - - - Looks up a localized string similar to The ViewData item with the key '{0}' is of type '{1}' but needs to be of type '{2}'. - - - - - Looks up a localized string similar to There was an error creating the IModelBinder '{0}'. Check that it has a public parameterless constructor. - - - - - Looks up a localized string similar to The type '{0}' does not implement the IModelBinder interface. - - - - - Looks up a localized string similar to The type '{0}' contains multiple attributes inheriting from CustomModelBinderAttribute. - - - - - Looks up a localized string similar to Cannot create a descriptor for instance method '{0}' on type '{1}' since the type does not subclass ControllerBase. - - - - - Looks up a localized string similar to Cannot call action method '{0}' on controller '{1}' since the parameter '{2}' is passed by reference. - - - - - Looks up a localized string similar to Cannot call action method '{0}' on controller '{1}' since it is a generic method. - - - - - Looks up a localized string similar to The parameters dictionary contains a null entry for parameter '{0}' of non-nullable type '{1}' for method '{2}' in '{3}'. To make a parameter optional its type should be either a reference type or a Nullable type. - - - - - Looks up a localized string similar to The parameters dictionary does not contain an entry for parameter '{0}' of type '{1}' for method '{2}' in '{3}'. The dictionary must contain an entry for each parameter, even parameters with null values. - - - - - Looks up a localized string similar to The parameters dictionary contains an invalid entry for parameter '{0}' for method '{1}' in '{2}'. The dictionary contains a value of type '{3}', but the parameter requires a value of type '{4}'. - - - - - Looks up a localized string similar to The parameter '{0}' on method '{1}' contains multiple attributes inheriting from CustomModelBinderAttribute. - - - - - Looks up a localized string similar to The SessionStateTempDataProvider requires SessionState to be enabled. - - - - - Looks up a localized string similar to The parameter conversion from type '{0}' to type '{1}' failed. See the inner exception for more information. - - - - - Looks up a localized string similar to The parameter conversion from type '{0}' to type '{1}' failed because no TypeConverter can convert between these types. - - - - - Looks up a localized string similar to The model item passed into the dictionary is of type '{0}' but this dictionary requires a model item of type '{1}'. - - - - - Looks up a localized string similar to A ViewMasterPage can only be used with content pages that derive from ViewPage or ViewPage<TViewItem>. - - - - - Looks up a localized string similar to The ViewUserControl '{0}' cannot find an IViewDataContainer. The ViewUserControl must be inside a ViewPage, ViewMasterPage, or another ViewUserControl. - - - - - Looks up a localized string similar to A ViewUserControl can only be used inside pages that derive from ViewPage or ViewPage<TViewItem>. - - - - - Looks up a localized string similar to A master name cannot be specified when the view is a ViewUserControl. - - - - - Looks up a localized string similar to The view found at '{0}' could not be created. - - - - - Looks up a localized string similar to The view at '{0}' must derive from ViewPage, ViewPage<TViewData>, ViewUserControl, or ViewUserControl<TViewData>. - - - - - Represents the result of an unauthorized HTTP request. - - - - - Enables processing of the result of an action method by a custom type that inherits from . - - The context within which the result is executed. - - - - Enumerates the HTTP verbs. - - - - - The GET method retrieves the information or entity that is identified by the URI of the Request. - - - - - The POST method is used to post a new entity as an addition to a URI. - - - - - The PUT method is used to replace an entity identified by a URI. - - - - - The DELETE method requests that a specified URI be deleted. - - - - - The HEAD method is identical to GET except that the server only returns message-headers in the response, without a message-body. - - - - - Delegate that contains the logic for selecting a action method. - - - - - Adds the ability to determine if a specified HTTP request is an AJAX request. - - - - - Determines whether the specified HTTP request is an AJAX request. - - The request. - - true if the specified HTTP request is an AJAX request; otherwise, false. - - - - - Provides the context for using the class. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The controller context. - The exception. - - - - Gets or sets the exception. - - The exception. - - - - Gets or sets a value indicating whether has been exception handled. - - true if has been exception handled; otherwise, false. - - - - Gets or sets the result. - - The result. - - - - Represents the information needed to build a strongly typed master view page. - - The type of the model. - - - - Gets the ajax. - - The ajax. - - - - Gets the HTML. - - The HTML. - - - - Gets the model. - - The model. - - - - Gets the view data. - - The view data. - - - - Represents a memory cache for view locations. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The time span. - - - - Creates an empty view location cache. - - - - - Gets the view location. - - The HTTP context. - The key. - The view location. - - - - Inserts the view location. - - The HTTP context. - The key. - The virtual path. - - - - Gets the time span. - - The time span. - - - - Represents option settings running AJAX scripts in an MVC application. - - - - - Gets or sets the junction to call for a confirmation. - - The the junction to call for a confirmation. - - - - Gets or sets the HTTP method. - - The HTTP method. - - - - Gets or sets the insertion mode. - - The insertion mode. - - - - Gets or sets the loading element id. - - The loading element id. - - - - Gets or sets the function to call on begin. - - The function to call on begin. - - - - Gets or sets the function to call on complete. - - The function to call on complete. - - - - Gets or sets the function to call on failure. - - The function to call on failure. - - - - Gets or sets the function to call on success. - - The function to call on success. - - - - Gets or sets the update target id. - - The update target id. - - - - Gets or sets the URL. - - The URL. - - - - Responsible for executing a specified action method. - - - - - Initializes a new instance of the class. - - The method info. - - - - Executes the specified action method. - - The controller. - The parameters. - The result. - - - - Gets the method information. - - The method information. - - - - Provides the context for the ResultExecuted method of an . - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The controller context. - The result. - if set to true [canceled]. - The exception. - - - - Gets or sets a value indicating whether this is canceled. - - true if canceled; otherwise, false. - - - - Gets or sets the exception. - - The exception. - - - - Gets or sets a value indicating whether [exception handled]. - - true if [exception handled]; otherwise, false. - - - - Gets or sets the action result. - - The action result. - - - - Responsible for invoking the action methods of a controller. - - - - - Defines the contract for an action invoker, used to invoke an action in response to an HTTP request. - - - - - Invokes the specified action. - - The controller context. - The name of the action. - - true if the action was found, otherwise false. - - - - - Creates the action result. - - The controller context. - The action descriptor. - The action return value. - The action result object. - - - - Gets the controller descriptor. - - The controller context. - The controller descriptor. - - - - Finds the action descriptor. - - The controller context. - The controller descriptor. - The name of the action. - The action descriptor object. - - - - Gets the filters. - - The controller context. - The action descriptor. - The filter information object. - - - - Gets the parameter value. - - The controller context. - The parameter descriptor. - The parameter value. - - - - Gets the parameter values. - - The controller context. - The action descriptor. - The parameter values. - - - - Invokes the specified action. - - The controller context. - The name of the action. - - - - - Invokes the action method. - - The controller context. - The action descriptor. - The parameters. - The result of the executing the action method. - - - - Invokes the action method with filters. - - The controller context. - The filters. - The action descriptor. - The parameters. - The the context for the ActionExecuted method of an . - - - - Invokes the action result. - - The controller context. - The action result. - - - - Invokes the action result with filters. - - The controller context. - The filters. - The action result. - The the context for the ResultExecuted method of an . - - - - Invokes the authorization filters. - - The controller context. - The filters. - The action descriptor. - The context for an . - - - - Invokes the exception filters. - - The controller context. - The filters. - The exception. - The context for an . - - - - Gets or sets the model binders. - - The model binders. - - - - Represents an error in model binding. - - - - - Initializes a new instance of the class. - - The exception. - - - - Initializes a new instance of the class. - - The exception. - The error message. - - - - Initializes a new instance of the class. - - The error message. - - - - Gets the exception. - - The exception. - - - - Gets the error message. - - The error message. - - - - Enumerates the modes available for rendering HTML tags. - - - - - Normal mode. - - - - - Start tag mode. - - - - - End tag mode. - - - - - Self-closing tag mode. - - - - - Represents the result of locating a view engine. - - - - - Initializes a new instance of the class. - - The searched locations. - - - - Initializes a new instance of the class. - - The view. - The view engine. - - - - Gets searched locations. - - The searched locations. - - - - Gets the view. - - The view. - - - - Gets the view engine. - - The view engine. - - - - Contains a set of methods for working with MVC routes. - - - - - Initializes a new instance of the class. - - An object that contains information about the current request and the defined route it matched. - - - - Initializes a new instance of the class. - - An object that contains information about the current request and the defined route it matched. - A collection of Route instances. - - - - Returns a virtual path for the specified route values. - - The name of the action. - The virtual path to the action. - - - - Returns a virtual path URL for the specified route values. - - The name of the action. - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - The virtual path to the action. - - - - Returns a virtual path for the specified route values. - - The name of the action. - An object containing the parameters for a route. - The virtual path to the action. - - - - Returns a virtual path for the specified route values. - - The name of the action. - The name of the controller. - The virtual path to the action. - - - - Returns a virtual path for the specified route values. - - The name of the action. - The name of the controller. - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - The virtual path to the action. - - - - Returns a virtual path for the specified route values. - - The name of the action. - The name of the controller. - An object containing the parameters for a route. - The virtual path to the action. - - - - Returns a fully qualified URL for the specified route values. - - The name of the action. - The name of the controller. - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - The protocol for the URL such as "http" or "https". - The URL to the action. - - - - Returns a fully qualified URL for the specified route values. - - The name of the action. - The name of the controller. - An object containing the parameters for a route. - The protocol for the URL such as "http" or "https". - The host name for the URL. - The URL to the action. - - - - Converts a virtual path to an application absolute path. - - The virtual path to the content. - The application absolute path. - - If the specified does not start with the tilde [~] character, - then this method returns the specified unchanged. - - - - - Encodes a URL string. - - The text to encode. - An encoded string. - - - - Returns a virtual path for the specified route values. - - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - A virtual path. - - - - Returns a virtual path for the specified route values. - - An object containing the parameters for a route. - A virtual path. - - - - Returns a virtual path for the specified route values. - - The name of the route used to return a virtual path. - A virtual path. - - - - Returns a virtual path for the specified route values. - - The name of the route used to return a virtual path. - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - A virtual path. - - - - Returns a virtual path for the specified route values. - - The name of the route used to return a virtual path. - An object containing the parameters for a route. - A virtual path. - - - - Returns a fully qualified URL for the specified route values. - - The name of the route used to return a virtual path. - An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - The protocol for the URL such as "http" or "https". - A virtual path. - - - - Returns a fully qualified URL for the specified route values. - - The name of the route used to generate the virtual path. - An object containing the parameters for a route. - The protocol for the URL such as "http" or "https". - The host name for the URL. - The virtual path to the action. - - - - Encapsulates information about an HTTP request that matches a defined route. - - The request context. - - - - A collection containing the routes registered for the application. - - The route collection. - - - - Represents a result that performs a redirection given a specified URI. - - - - - Initializes a new instance of the class. - - The URL. - - - - Enables processing of the result of an action method by a custom type that inherits from . - - The context within which the result is executed. - - - - Gets the URL. - - The URL. - - - - Enumerates the types of input controls. - - - - - A check box. - - - - - A hidden field. - - - - - A password box. - - - - - A radio button. - - - - - A text box. - - - - - Represents the information needed to build a strongly typed user control. - - The type of the model. - - - - Represents the information needed to build a user control. - - - - - Sets the view data. - - The view data. - - - - Ensures the view data. - - - - - Renders the view. - - The view context. - - - - Gets the ajax. - - The ajax. - - - - Gets the HTML. - - The HTML. - - - - Gets the model. - - The model. - - - - Gets the temp data. - - The temp data. - - - - Gets the URL. - - The URL. - - - - Gets or sets the view context. - - The view context. - - - - Gets or sets the view data. - - The view data. - - - - Gets or sets the view data key. - - The view data key. - - - - Gets the writer. - - The writer. - - - - Sets the view data. - - The view data. - - - - Gets the ajax. - - The ajax. - - - - Gets the HTML. - - The HTML. - - - - Gets the model. - - The model. - - - - Gets or sets the view data. - - The view data. - - - - Class used by the HTML helpers to build HTML tags. - - - - - Initializes a new instance of the class. - - Name of the tag. - - - - Adds the CSS class. - - The value. - - - - Generates the id. - - The name. - - - - Merges the attribute. - - The key. - The value. - - - - Merges the attribute. - - The key. - The value. - if set to true [replace existing]. - - - - Merges the attributes. - - The type of the key. - The type of the value. - The attributes. - - - - Merges the attributes. - - The type of the key. - The type of the value. - The attributes. - if set to true [replace existing]. - - - - Sets the inner text. - - The inner text. - - - - Returns a that represents the current . - - - A that represents the current . - - - - - Toes the string. - - The render mode. - - - - - Gets the attributes. - - The attributes. - - - - Gets or sets the id attribute dot replacement. - - The id attribute dot replacement. - - - - Gets or sets the inner HTML. - - The inner HTML. - - - - Gets the name of the tag. - - The name of the tag. - - - - Represents a result that performs a redirection given a route values dictionary. - - - - - Initializes a new instance of the class. - - The route values. - - - - Initializes a new instance of the class. - - Name of the route. - The route values. - - - - Enables processing of the result of an action method by a custom type that inherits from . - - The context within which the result is executed. - - - - Gets the name of the route. - - The name of the route. - - - - Gets the route values. - - The route values. - - - - Responsible for dynamically building a controller. - - - - - Initializes a new instance of the class. - - - - - Gets the controller factory. - - The controller factory. - - - - Sets the controller factory. - - The controller factory. - - - - Sets the controller factory. - - Type of the controller factory. - - - - Gets the current controller builder object. - - The current controller builder. - - - - Gets the default namespaces. - - The default namespaces. - - - - Represents support for HTML input controls in an application. - - - - - Returns the input tag for a checkbox. - - The HTML helper. - The form field name. - - An input tag with the type set to "checkbox". - - - - - Returns the input tag for a checkbox. - - The HTML helper. - The form field name. - A boolean indicating whether or not the checkbox is checked. - - An input tag with the type set to "checkbox". - - - - - Returns the input tag for a checkbox. - - The HTML helper. - The form field name. - A boolean indicating whether or not the checkbox is checked. - An object containing the HTML attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - - An input tag with the type set to "checkbox". - - - - - Returns the input tag for a checkbox. - - The HTML helper. - The form field name. - An object containing the HTML attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - - An input tag with the type set to "checkbox". - - - - - Returns the input tag for a checkbox. - - The HTML helper. - The form field name. - An object containing the HTML attributes for the element. - - An input tag with the type set to "checkbox". - - - - - Returns the input tag for a checkbox. - - The HTML helper. - The form field name. - A boolean indicating whether or not the checkbox is checked. - An object containing the HTML attributes for the element. - - An input tag with the type set to "checkbox". - - - - - Returns a hidden input tag. - - The HTML helper. - The form field name and ViewData key used to look up the value. - - An input tag with the type set to "hidden". - - - - - Returns a hidden input tag. - - The HTML helper. - The form field name and ViewData key used to look up the value. - The value of the hidden input. If null, looks at the ViewData and then ModelStatefor the value. - - An input tag with the type set to "hidden". - - - - - Returns a hidden input tag. - - The HTML helper. - The form field name and ViewData key used to look up the value. - The value of the hidden input. If null, looks at the ViewData and then ModelStatefor the value. - An object containing the HTML attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - - An input tag with the type set to "hidden". - - - - - Returns a hidden input tag. - - The HTML helper. - The form field name and ViewData key used to look up the value. - The value of the hidden input. If null, looks at the ViewData and then ModelStatefor the value. - An object containing the HTML attributes for the element. - - An input tag with the type set to "hidden". - - - - - Returns a password tag. - - The HTML helper. - The form field name and ViewData key used to look up the value. - - An input tag with the type set to "password". - - - - - Returns a password tag. - - The HTML helper. - The form field name and ViewData key used to look up the value. - The value of the input. If null, looks at the ViewData and then ModelStatefor the value. - - An input tag with the type set to "password". - - - - - Returns a password tag. - - The HTML helper. - The form field name and ViewData key used to look up the value. - The value of the input. If null, looks at the ViewData and then ModelStatefor the value. - An object containing the HTML attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - - An input tag with the type set to "password". - - - - - Returns a password tag. - - The HTML helper. - The form field name and ViewData key used to look up the value. - The value of the input. If null, looks at the ViewData and then ModelStatefor the value. - An object containing the HTML attributes for the element. - - An input tag with the type set to "password". - - - - - Returns a radio button tag used to present one possible value, out of a range, for a form field specified by the name. - - The HTML helper. - The form field name and ViewData key used to look up the current value. - If checked, the value of the radio button submitted when the form is posted. If the value in ViewData or ModelState matches this value, the radio button is checked. - - An input tag with the type set to "radio". - - - - - Returns a radio button tag used to present one possible value, out of a range, for a form field specified by the name. - - The HTML helper. - The form field name and ViewData key used to look up the current value. - If checked, the value of the radio button submitted when the form is posted. If the value in ViewData or ModelState matches this value, the radio button is checked. - An object containing the HTML attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - - An input tag with the type set to "radio". - - - - - Returns a radio button tag used to present one possible value, out of a range, for a form field specified by the name. - - The HTML helper. - The form field name and ViewData key used to look up the current value. - If checked, the value of the radio button submitted when the form is posted. If the value in ViewData or ModelState matches this value, the radio button is checked. - An object containing the HTML attributes for the element. - - An input tag with the type set to "radio". - - - - - Returns a radio button tag used to present one possible value, out of a range, for a form field specified by the name. - - The HTML helper. - The form field name and ViewData key used to look up the current value. - If checked, the value of the radio button submitted when the form is posted. If the value in ViewData or ModelState matches this value, the radio button is checked. - Whether or not the radio button is checked. - - An input tag with the type set to "radio". - - - - - Returns a radio button tag used to present one possible value, out of a range, for a form field specified by the name. - - The HTML helper. - The form field name and ViewData key used to look up the current value. - If checked, the value of the radio button submitted when the form is posted. If the value in ViewData or ModelState matches this value, the radio button is checked. - Whether or not the radio button is checked. - An object containing the HTML attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - - An input tag with the type set to "radio". - - - - - Returns a radio button tag used to present one possible value, out of a range, for a form field specified by the name. - - The HTML helper. - The form field name and ViewData key used to look up the current value. - If checked, the value of the radio button submitted when the form is posted. If the value in ViewData or ModelState matches this value, the radio button is checked. - Whether or not the radio button is checked. - An object containing the HTML attributes for the element. - - An input tag with the type set to "radio". - - - - - Returns a text input tag. - - The HTML helper. - The form field name and ViewData key used to look up the value. - An input tag with the type set to "text". - - - - Returns a text input tag. - - The HTML helper. - The form field name and ViewData key used to look up the value. - The value of the input. If null, looks at the ViewData and then ModelStatefor the value. - An input tag with the type set to "text". - - - - Returns a text input tag. - - The HTML helper. - The form field name and ViewData key used to look up the value. - The value of the input. If null, looks at the ViewData and then ModelStatefor the value. - An object containing the HTML attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - An input tag with the type set to "text". - - - - Returns a text input tag. - - The HTML helper. - The form field name and ViewData key used to look up the value. - The value of the input. If null, looks at the ViewData and then ModelStatefor the value. - An object containing the HTML attributes for the element. - An input tag with the type set to "text". - - - - Contains the Form value providers for the application. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The collection. - - - - Returns a dictionary of value providers. - - A dictionary of value providers. - - - - Gets the value provider. - - The name of the value provider. - The value provider. - - - - Encapsulates information related to rendering a view. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The controller context. - The view. - The view data. - The temp data. - - - - Gets the to render. - - The view. - - - - Gets the view data supplied to the view. - - The view data. - - - - Gets data associated with this request which only lives for one request. - - The temp data. - - - - Contains all model binders for the application listed by binder type. - - - - - Adds an item to the . - - The object to add to the . - - The is read-only. - - - - - Adds an element with the provided key and value to the . - - The object to use as the key of the element to add. - The object to use as the value of the element to add. - - is null. - - - An element with the same key already exists in the . - - - The is read-only. - - - - - Removes all items from the . - - - The is read-only. - - - - - Determines whether the contains a specific value. - - The object to locate in the . - - true if is found in the ; otherwise, false. - - - - - Determines whether the contains an element with the specified key. - - The key to locate in the . - - true if the contains an element with the key; otherwise, false. - - - is null. - - - - - Copies the elements of the to an , starting at a particular index. - - The one-dimensional that is the destination of the elements copied from . The 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 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 model binder. - - Type of the model. - The model binder. - - - - Gets the model binder. - - Type of the model. - if set to true [fallback to default]. - The model binder. - - - - Returns an enumerator that iterates through the collection. - - - A that can be used to iterate through the collection. - - - - - Removes the first occurrence of a specific object from the . - - The object to remove from the . - - true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . - - - The is read-only. - - - - - Removes the element with the specified key from the . - - The key of the element to remove. - - true if the element is successfully removed; otherwise, false. This method also returns false if was not found in the original . - - - is null. - - - The is read-only. - - - - - Gets the value associated with the specified key. - - The key whose value to get. - When this method returns, the value associated with the specified key, if the key is found; otherwise, the default value for the type of the parameter. This parameter is passed uninitialized. - - true if the object that implements contains an element with the specified key; otherwise, false. - - - is null. - - - - - Returns an enumerator that iterates through a collection. - - - An object that can be used to iterate through the collection. - - - - - Gets the number of elements contained in the . - - - - The number of elements contained in the . - - - - - Gets or sets the default binder. - - The default binder. - - - - Gets a value indicating whether the is read-only. - - - true if the is read-only; otherwise, false. - - - - - Gets an containing the keys of the . - - - - An containing the keys of the object that implements . - - - - - Gets or sets the with the specified key. - - - - - - Gets an containing the values in the . - - - - An containing the values in the object that implements . - - - - - Provides the context for the ResultExecuting method of an . - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The controller context. - The result. - - - - Gets or sets a value indicating whether this is cancel. - - true if cancel; otherwise, false. - - - - Gets or sets the action result. - - The action result. - - - - Collection of view engines available to the application. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The list that is wrapped by the new collection. - - is null. - - - - - Inserts an element into the at the specified index. - - The zero-based index at which should be inserted. - The object to insert. The value can be null for reference types. - - is less than zero. - -or- - is greater than . - - - - - 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. The value can be null for reference types. - - is less than zero. - -or- - is greater than . - - - - - Finds the partial view. - - The controller context. - Name of the partial view. - The partial view. - - - - Finds the view. - - The controller context. - Name of the view. - Name of the master. - The view. - - - - Represents a list on which one item can be selected. - - - - - Initializes a new instance of the class. - - The items. - - - - Initializes a new instance of the class. - - The items. - The selected value. - - - - Initializes a new instance of the class. - - The items. - The data value field. - The data text field. - - - - Initializes a new instance of the class. - - The items. - The data value field. - The data text field. - The selected value. - - - - Gets the selected value. - - The selected value. - - - - Extends a RouteCollection object. - - - - - Ignores the route. - - The routes. - The URL. - - - - Ignores the route. - - The routes. - The URL. - The constraints. - - - - Maps the route. - - The routes. - The name. - The URL. - - - - - Maps the route. - - The routes. - The name. - The URL. - The defaults. - - - - - Maps the route. - - The routes. - The name. - The URL. - The defaults. - The constraints. - - - - - Maps the route. - - The routes. - The name. - The URL. - The namespaces. - - - - - Maps the route. - - The routes. - The name. - The URL. - The defaults. - The namespaces. - - - - - Maps the route. - - The routes. - The name. - The URL. - The defaults. - The constraints. - The namespaces. - - - - - Encapsulates the state of model binding to a property of an argument, or the argument itself, of an action method. - - - - - Returns a which encapsulates the value which was attempted to be bound by model binding. - - The value. - - - - Returns a containing any errors that occurred during model binding. - - The errors. - - - - Provides global access to the model binders for the application. - - - - - Gets the model binders. - - The model binders. - - - - Represents support for validating the input from an HTML form. - - - - - Displays a validation message if the specified field contains an error in the ModelState. - - The HTML helper. - The name of the property or model object being validated. - - An empty string if valid, otherwise a span with an error message. - - - - - Displays a validation message if the specified field contains an error in the ModelState. - - The HTML helper. - The name of the property or model object being validated. - An object containing the HTML attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - - An empty string if valid, otherwise a span with an error message. - - - - - Displays a validation message if the specified field contains an error in the ModelState. - - The HTML helper. - The name of the property or model object being validated. - The message to display if the specified field is in error. - - An empty string if valid, otherwise a span with an error message. - - - - - Displays a validation message if the specified field contains an error in the ModelState. - - The HTML helper. - The name of the property or model object being validated. - The message to display if the specified field is in error. - An object containing the HTML attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - - An empty string if valid, otherwise a span with an error message. - - - - - Displays a validation message if the specified field contains an error in the ModelState. - - The HTML helper. - The name of the property or model object being validated. - An object containing the HTML attributes for the element. - - An empty string if valid, otherwise a span with an error message. - - - - - Displays a validation message if the specified field contains an error in the ModelState. - - The HTML helper. - The name of the property or model object being validated. - The message to display if the specified field is in error. - An object containing the HTML attributes for the element. - - An empty string if valid, otherwise a span with an error message. - - - - - Returns an unordered list [ul] of validation messages within the ModelState. - - The HTML helper. - - - - - Returns an unordered list [ul] of validation messages within the ModelState. - - The HTML helper. - The message to display if the specified field is in error. - - - - - Returns an unordered list [ul] of validation messages within the ModelState. - - The HTML helper. - The message to display if the specified field is in error. - An object containing the HTML attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax. - - - - - Returns an unordered list [ul] of validation messages within the ModelState. - - The HTML helper. - The message to display if the specified field is in error. - An object containing the HTML attributes for the element. - - - - - The name of the resource class used to localize validation messages. - - - - - Represents the result of an attempt to bind a supplied value (from a form post, query string, etc) to - a property of an argument to an action method or to the argument itself. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified - raw value, attempted value, and . - - The raw value. - The attempted value. - The culture. - - - - Converts the value encapsulated by this result to the specified type. - - The target type. - The converted value. - - - - Converts the value encapsulated by this result to the specified type. - - The target type. - The culture to use in the conversion. - The converted value. - - - - The raw value converted to a string for display purposes. - - The attempted value. - - - - Gets or sets the culture. - - The culture. - - - - The raw value supplied by the value provider. - - The raw value. - - - - Provides the context within which a model binder functions. - - - - - Gets or sets a value indicating whether [fallback to empty prefix]. - - - true if [fallback to empty prefix]; otherwise, false. - - - - - Gets or sets the model. - - The model. - - - - 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 or sets the value provider. - - The value provider. - - - - Caches a sequence of calls to action methods. - - - - - Initializes a new instance of the class. - - - - - Gets the dispatcher. - - The method info. - A reference to the action method dispatcher. - - - - When applied to an action method, restricts access of callers to the action method. - - - - - Authorizes the core. - - The HTTP context. - true if authorized; otherwise, false. - - - - Called when [authorization]. - - The filter context. - - - - Called when the caching module requests authorization. - - The HTTP context. - A refernce to the validation status. - - - - Gets or sets the roles. - - The roles. - - - - Gets or sets the users. - - The users. - - - diff --git a/bin/System.Web.Routing.dll b/bin/System.Web.Routing.dll deleted file mode 100644 index 93f0ff81b..000000000 Binary files a/bin/System.Web.Routing.dll and /dev/null differ diff --git a/bin/log4net.dll b/bin/log4net.dll deleted file mode 100644 index ffc57e112..000000000 Binary files a/bin/log4net.dll and /dev/null differ diff --git a/bin/log4net.license.txt b/bin/log4net.license.txt deleted file mode 100644 index 29f81d812..000000000 --- a/bin/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/bin/log4net.xml b/bin/log4net.xml deleted file mode 100644 index fab7af26d..000000000 --- a/bin/log4net.xml +++ /dev/null @@ -1,28655 +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. - - - - - - - - - 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/bin/nhibernate-configuration.xsd b/bin/nhibernate-configuration.xsd deleted file mode 100644 index 6635a73b3..000000000 --- a/bin/nhibernate-configuration.xsd +++ /dev/null @@ -1,215 +0,0 @@ - - - - -- This schema was automatically generated by Syntext Dtd2Schema and changed for NH use -- - -- conversion tool (from file: hibernate-configuration-3.0.dtd) -- - -- Copyright (C) 2002, 2003 Syntext Inc. See http://www.syntext.com for updates. -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - There are 3 possible combinations of mapping attributes - 1 - resource & assembly: NHibernate will read the mapping resource from the specified assembly - 2 - file only: NHibernate will read the mapping from the file. - 3 - assembly only: NHibernate will find all the resources ending in hbm.xml from the assembly. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/bin/nhibernate-mapping.xsd b/bin/nhibernate-mapping.xsd deleted file mode 100644 index 3427bef70..000000000 --- a/bin/nhibernate-mapping.xsd +++ /dev/null @@ -1,1690 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A composite key may be modelled by a .NET class with a property for each key column. The class must be Serializable and override equals() and hashCode() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Namespace used to find not-Fully Qualified Type Names - - - - - Assembly used to find not-Fully Qualified Type Names - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - undefined|any|none|null|0|-1|... - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The concrete collection should use a generic version or an object-based version. - - - - - - - - - - - - - - Types of polymorphism - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/bin/nunit.framework.dll b/bin/nunit.framework.dll deleted file mode 100644 index 50e26cc46..000000000 Binary files a/bin/nunit.framework.dll and /dev/null differ diff --git a/bin/nunit.framework.xml b/bin/nunit.framework.xml deleted file mode 100644 index 6ef4e6acd..000000000 --- a/bin/nunit.framework.xml +++ /dev/null @@ -1,9803 +0,0 @@ - - - - nunit.framework - - - - - TypeConstraint is the abstract base for constraints - that take a Type as their expected value. - - - - - The Constraint class is the base of all built-in constraints - within NUnit. It provides the operator overloads used to combine - constraints. - - - - - The IConstraintExpression interface is implemented by all - complete and resolvable constraints and expressions. - - - - - Return the top-level constraint for this expression - - - - - - Static UnsetObject used to detect derived constraints - failing to set the actual value. - - - - - The actual value being tested against a constraint - - - - - The display name of this Constraint for use by ToString() - - - - - Argument fields used by ToString(); - - - - - The builder holding this constraint - - - - - Construct a constraint with no arguments - - - - - Construct a constraint with one argument - - - - - Construct a constraint with two arguments - - - - - Sets the ConstraintBuilder holding this constraint - - - - - Write the failure message to the MessageWriter provided - as an argument. The default implementation simply passes - the constraint and the actual value to the writer, which - then displays the constraint description and the value. - - Constraints that need to provide additional details, - such as where the error occured can override this. - - The MessageWriter on which to display the message - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for success, false for failure - - - - Test whether the constraint is satisfied by an - ActualValueDelegate that returns the value to be tested. - The default implementation simply evaluates the delegate - but derived classes may override it to provide for delayed - processing. - - An ActualValueDelegate - True for success, false for failure - - - - Test whether the constraint is satisfied by a given reference. - The default implementation simply dereferences the value but - derived classes may override it to provide for delayed processing. - - A reference to the value to be tested - True for success, false for failure - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - Write the actual value for a failing constraint test to a - MessageWriter. The default implementation simply writes - the raw value of actual, leaving it to the writer to - perform any formatting. - - The writer on which the actual value is displayed - - - - Default override of ToString returns the constraint DisplayName - followed by any arguments within angle brackets. - - - - - - This operator creates a constraint that is satisfied only if both - argument constraints are satisfied. - - - - - This operator creates a constraint that is satisfied if either - of the argument constraints is satisfied. - - - - - This operator creates a constraint that is satisfied if the - argument constraint is not satisfied. - - - - - Returns a DelayedConstraint with the specified delay time. - - The delay in milliseconds. - - - - - Returns a DelayedConstraint with the specified delay time - and polling interval. - - The delay in milliseconds. - The interval at which to test the constraint. - - - - - The display name of this Constraint for use by ToString(). - The default value is the name of the constraint with - trailing "Constraint" removed. Derived classes may set - this to another name in their constructors. - - - - - Returns a ConstraintExpression by appending And - to the current constraint. - - - - - Returns a ConstraintExpression by appending And - to the current constraint. - - - - - Returns a ConstraintExpression by appending Or - to the current constraint. - - - - - Class used to detect any derived constraints - that fail to set the actual value in their - Matches override. - - - - - The expected Type used by the constraint - - - - - Construct a TypeConstraint for a given Type - - - - - - Write the actual value for a failing constraint test to a - MessageWriter. TypeConstraints override this method to write - the name of the type. - - The writer on which the actual value is displayed - - - - ExactTypeConstraint is used to test that an object - is of the exact type provided in the constructor - - - - - Construct an ExactTypeConstraint for a given Type - - The expected Type. - - - - Test that an object is of the exact type specified - - The actual value. - True if the tested object is of the exact type provided, otherwise false. - - - - Write the description of this constraint to a MessageWriter - - The MessageWriter to use - - - - InstanceOfTypeConstraint is used to test that an object - is of the same type provided or derived from it. - - - - - Construct an InstanceOfTypeConstraint for the type provided - - The expected Type - - - - Test whether an object is of the specified type or a derived type - - The object to be tested - True if the object is of the provided type or derives from it, otherwise false. - - - - Write a description of this constraint to a MessageWriter - - The MessageWriter to use - - - - AssignableFromConstraint is used to test that an object - can be assigned from a given Type. - - - - - Construct an AssignableFromConstraint for the type provided - - - - - - Test whether an object can be assigned from the specified type - - The object to be tested - True if the object can be assigned a value of the expected Type, otherwise false. - - - - Write a description of this constraint to a MessageWriter - - The MessageWriter to use - - - - AssignableToConstraint is used to test that an object - can be assigned to a given Type. - - - - - Construct an AssignableToConstraint for the type provided - - - - - - Test whether an object can be assigned to the specified type - - The object to be tested - True if the object can be assigned a value of the expected Type, otherwise false. - - - - Write a description of this constraint to a MessageWriter - - The MessageWriter to use - - - - ConstraintBuilder maintains the stacks that are used in - processing a ConstraintExpression. An OperatorStack - is used to hold operators that are waiting for their - operands to be reognized. a ConstraintStack holds - input constraints as well as the results of each - operator applied. - - - - - Initializes a new instance of the class. - - - - - Appends the specified operator to the expression by first - reducing the operator stack and then pushing the new - operator on the stack. - - The operator to push. - - - - Appends the specified constraint to the expresson by pushing - it on the constraint stack. - - The constraint to push. - - - - Sets the top operator right context. - - The right context. - - - - Reduces the operator stack until the topmost item - precedence is greater than or equal to the target precedence. - - The target precedence. - - - - Resolves this instance, returning a Constraint. If the builder - is not currently in a resolvable state, an exception is thrown. - - The resolved constraint - - - - Gets a value indicating whether this instance is resolvable. - - - true if this instance is resolvable; otherwise, false. - - - - - OperatorStack is a type-safe stack for holding ConstraintOperators - - - - - Initializes a new instance of the class. - - The builder. - - - - Pushes the specified operator onto the stack. - - The op. - - - - Pops the topmost operator from the stack. - - - - - - Gets a value indicating whether this is empty. - - true if empty; otherwise, false. - - - - Gets the topmost operator without modifying the stack. - - The top. - - - - ConstraintStack is a type-safe stack for holding Constraints - - - - - Initializes a new instance of the class. - - The builder. - - - - Pushes the specified constraint. As a side effect, - the constraint's builder field is set to the - ConstraintBuilder owning this stack. - - The constraint. - - - - Pops this topmost constrait from the stack. - As a side effect, the constraint's builder - field is set to null. - - - - - - Gets a value indicating whether this is empty. - - true if empty; otherwise, false. - - - - Gets the topmost constraint without modifying the stack. - - The topmost constraint - - - - ThrowsConstraint is used to test the exception thrown by - a delegate by applying a constraint to it. - - - - - Abstract base class used for prefixes - - - - - The base constraint - - - - - Construct given a base constraint - - - - - - Initializes a new instance of the class, - using a constraint to be applied to the exception. - - A constraint to apply to the caught exception. - - - - Executes the code of the delegate and captures any exception. - If a non-null base constraint was provided, it applies that - constraint to the exception. - - A delegate representing the code to be tested - True if an exception is thrown and the constraint succeeds, otherwise false - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - Write the actual value for a failing constraint test to a - MessageWriter. The default implementation simply writes - the raw value of actual, leaving it to the writer to - perform any formatting. - - The writer on which the actual value is displayed - - - - Returns the string representation of this constraint - - - - - Get the actual exception thrown - used by Assert.Throws. - - - - - ThrowsNothingConstraint tests that a delegate does not - throw an exception. - - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True if no exception is thrown, otherwise false - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - Write the actual value for a failing constraint test to a - MessageWriter. The default implementation simply writes - the raw value of actual, leaving it to the writer to - perform any formatting. - - The writer on which the actual value is displayed - - - - CollectionConstraint is the abstract base class for - constraints that operate on collections. - - - - - Construct an empty CollectionConstraint - - - - - Construct a CollectionConstraint - - - - - - Determines whether the specified enumerable is empty. - - The enumerable. - - true if the specified enumerable is empty; otherwise, false. - - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for success, false for failure - - - - Protected method to be implemented by derived classes - - - - - - - CollectionItemsEqualConstraint is the abstract base class for all - collection constraints that apply some notion of item equality - as a part of their operation. - - - - - Construct an empty CollectionConstraint - - - - - Construct a CollectionConstraint - - - - - - Flag the constraint to use the supplied IComparer object. - - The IComparer object to use. - Self. - - - - Flag the constraint to use the supplied IComparer object. - - The IComparer object to use. - Self. - - - - Flag the constraint to use the supplied Comparison object. - - The IComparer object to use. - Self. - - - - Flag the constraint to use the supplied IEqualityComparer object. - - The IComparer object to use. - Self. - - - - Flag the constraint to use the supplied IEqualityComparer object. - - The IComparer object to use. - Self. - - - - Compares two collection members for equality - - - - - Return a new CollectionTally for use in making tests - - The collection to be included in the tally - - - - Flag the constraint to ignore case and return self. - - - - - CollectionTally counts (tallies) the number of - occurences of each object in one or more enumerations. - - - - - Construct a CollectionTally object from a comparer and a collection - - - - - Try to remove an object from the tally - - The object to remove - True if successful, false if the object was not found - - - - Try to remove a set of objects from the tally - - The objects to remove - True if successful, false if any object was not found - - - - The number of objects remaining in the tally - - - - - EmptyCollectionConstraint tests whether a collection is empty. - - - - - Check that the collection is empty - - - - - - - Write the constraint description to a MessageWriter - - - - - - UniqueItemsConstraint tests whether all the items in a - collection are unique. - - - - - Check that all items are unique. - - - - - - - Write a description of this constraint to a MessageWriter - - - - - - CollectionContainsConstraint is used to test whether a collection - contains an expected object as a member. - - - - - Construct a CollectionContainsConstraint - - - - - - Test whether the expected item is contained in the collection - - - - - - - Write a descripton of the constraint to a MessageWriter - - - - - - CollectionEquivalentCOnstraint is used to determine whether two - collections are equivalent. - - - - - Construct a CollectionEquivalentConstraint - - - - - - Test whether two collections are equivalent - - - - - - - Write a description of this constraint to a MessageWriter - - - - - - CollectionSubsetConstraint is used to determine whether - one collection is a subset of another - - - - - Construct a CollectionSubsetConstraint - - The collection that the actual value is expected to be a subset of - - - - Test whether the actual collection is a subset of - the expected collection provided. - - - - - - - Write a description of this constraint to a MessageWriter - - - - - - CollectionOrderedConstraint is used to test whether a collection is ordered. - - - - - Construct a CollectionOrderedConstraint - - - - - Modifies the constraint to use an IComparer and returns self. - - - - - Modifies the constraint to use an IComparer<T> and returns self. - - - - - Modifies the constraint to use a Comparison<T> and returns self. - - - - - Modifies the constraint to test ordering by the value of - a specified property and returns self. - - - - - Test whether the collection is ordered - - - - - - - Write a description of the constraint to a MessageWriter - - - - - - Returns the string representation of the constraint. - - - - - - If used performs a reverse comparison - - - - - EmptyDirectoryConstraint is used to test that a directory is empty - - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for success, false for failure - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - Write the actual value for a failing constraint test to a - MessageWriter. The default implementation simply writes - the raw value of actual, leaving it to the writer to - perform any formatting. - - The writer on which the actual value is displayed - - - - SubDirectoryConstraint is used to test that one directory is a subdirectory of another. - - - - - Initializes a new instance of the class. - - The dir info. - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for success, false for failure - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - Builds a list of DirectoryInfo objects, recursing where necessary - - directory to recurse - list of DirectoryInfo objects from the top level - - - - private method to determine whether a directory is within the path - - top-level directory to search - directory to search for - true if found, false if not - - - - Method to compare two DirectoryInfo objects - - first directory to compare - second directory to compare - true if equivalent, false if not - - - - PathConstraint serves as the abstract base of constraints - that operate on paths and provides several helper methods. - - - - - The expected path used in the constraint - - - - - Flag indicating whether a caseInsensitive comparison should be made - - - - - Construct a PathConstraint for a give expected path - - The expected path - - - - Returns the string representation of this constraint - - - - - Canonicalize the provided path - - - The path in standardized form - - - - Test whether two paths are the same - - The first path - The second path - - - - - Test whether one path is the same as or under another path - - The first path - supposed to be the parent path - The second path - supposed to be the child path - - - - - Modifies the current instance to be case-insensitve - and returns it. - - - - - Modifies the current instance to be case-sensitve - and returns it. - - - - - Summary description for SamePathConstraint. - - - - - Initializes a new instance of the class. - - The expected path - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for success, false for failure - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - SamePathOrUnderConstraint tests that one path is under another - - - - - Initializes a new instance of the class. - - The expected path - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for success, false for failure - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - PropertyExistsConstraint tests that a named property - exists on the object provided through Match. - - Originally, PropertyConstraint provided this feature - in addition to making optional tests on the vaue - of the property. The two constraints are now separate. - - - - - Initializes a new instance of the class. - - The name of the property. - - - - Test whether the property exists for a given object - - The object to be tested - True for success, false for failure - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - Write the actual value for a failing constraint test to a - MessageWriter. - - The writer on which the actual value is displayed - - - - Returns the string representation of the constraint. - - - - - - PropertyConstraint extracts a named property and uses - its value as the actual value for a chained constraint. - - - - - Initializes a new instance of the class. - - The name. - The constraint to apply to the property. - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for success, false for failure - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - Write the actual value for a failing constraint test to a - MessageWriter. The default implementation simply writes - the raw value of actual, leaving it to the writer to - perform any formatting. - - The writer on which the actual value is displayed - - - - Returns the string representation of the constraint. - - - - - - ConstraintExpression represents a compound constraint in the - process of being constructed from a series of syntactic elements. - - Individual elements are appended to the expression as they are - reognized. Once an actual Constraint is appended, the expression - returns a resolvable Constraint. - - - - - ConstraintExpressionBase is the abstract base class for the - generated ConstraintExpression class, which represents a - compound constraint in the process of being constructed - from a series of syntactic elements. - - NOTE: ConstraintExpressionBase is aware of some of its - derived classes, which is an apparent violation of - encapsulation. Ideally, these classes would be a - single class, but they must be separated in order to - allow parts to be generated under .NET 1.x and to - provide proper user feedback in syntactically - aware IDEs. - - - - - The ConstraintBuilder holding the elements recognized so far - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the - class passing in a ConstraintBuilder, which may be pre-populated. - - The builder. - - - - Returns a string representation of the expression as it - currently stands. This should only be used for testing, - since it has the side-effect of resolving the expression. - - - - - - Appends an operator to the expression and returns the - resulting expression itself. - - - - - Appends a self-resolving operator to the expression and - returns a new ResolvableConstraintExpression. - - - - - Appends a constraint to the expression and returns that - constraint, which is associated with the current state - of the expression being built. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the - class passing in a ConstraintBuilder, which may be pre-populated. - - The builder. - - - - Returns a new PropertyConstraintExpression, which will either - test for the existence of the named property on the object - being tested or apply any following constraint to that property. - - - - - Returns a new AttributeConstraint checking for the - presence of a particular attribute on an object. - - - - - Returns a new AttributeConstraint checking for the - presence of a particular attribute on an object. - - - - - Returns the constraint provided as an argument - used to allow custom - custom constraints to easily participate in the syntax. - - - - - Returns the constraint provided as an argument - used to allow custom - custom constraints to easily participate in the syntax. - - - - - Returns a constraint that tests two items for equality - - - - - Returns a constraint that tests that two references are the same object - - - - - Returns a constraint that tests whether the - actual value is greater than the suppled argument - - - - - Returns a constraint that tests whether the - actual value is greater than the suppled argument - - - - - Returns a constraint that tests whether the - actual value is greater than the suppled argument - - - - - Returns a constraint that tests whether the - actual value is greater than the suppled argument - - - - - Returns a constraint that tests whether the - actual value is greater than the suppled argument - - - - - Returns a constraint that tests whether the - actual value is greater than the suppled argument - - - - - Returns a constraint that tests whether the actual - value is of the exact type supplied as an argument. - - - - - Returns a constraint that tests whether the actual - value is of the exact type supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is of the type supplied as an argument or a derived type. - - - - - Returns a constraint that tests whether the actual value - is of the type supplied as an argument or a derived type. - - - - - Returns a constraint that tests whether the actual value - is of the type supplied as an argument or a derived type. - - - - - Returns a constraint that tests whether the actual value - is of the type supplied as an argument or a derived type. - - - - - Returns a constraint that tests whether the actual value - is assignable from the type supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is assignable from the type supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is assignable from the type supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is assignable from the type supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is a collection containing the same elements as the - collection supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is a subset of the collection supplied as an argument. - - - - - Returns a new CollectionContainsConstraint checking for the - presence of a particular object in the collection. - - - - - Returns a new CollectionContainsConstraint checking for the - presence of a particular object in the collection. - - - - - Returns a new ContainsConstraint. This constraint - will, in turn, make use of the appropriate second-level - constraint, depending on the type of the actual argument. - This overload is only used if the item sought is a string, - since any other type implies that we are looking for a - collection member. - - - - - Returns a constraint that succeeds if the actual - value contains the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value starts with the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value ends with the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value matches the Regex pattern supplied as an argument. - - - - - Returns a constraint that tests whether the path provided - is the same as an expected path after canonicalization. - - - - - Returns a constraint that tests whether the path provided - is the same path or under an expected path after canonicalization. - - - - - Returns a constraint that tests whether the actual value falls - within a specified range. - - - - - Returns a ConstraintExpression that negates any - following constraint. - - - - - Returns a ConstraintExpression that negates any - following constraint. - - - - - Returns a ConstraintExpression, which will apply - the following constraint to all members of a collection, - succeeding if all of them succeed. - - - - - Returns a ConstraintExpression, which will apply - the following constraint to all members of a collection, - succeeding if at least one of them succeeds. - - - - - Returns a ConstraintExpression, which will apply - the following constraint to all members of a collection, - succeeding if all of them fail. - - - - - Returns a new ConstraintExpression, which will apply the following - constraint to the Length property of the object being tested. - - - - - Returns a new ConstraintExpression, which will apply the following - constraint to the Count property of the object being tested. - - - - - Returns a new ConstraintExpression, which will apply the following - constraint to the Message property of the object being tested. - - - - - With is currently a NOP - reserved for future use. - - - - - Returns a constraint that tests for null - - - - - Returns a constraint that tests for True - - - - - Returns a constraint that tests for False - - - - - Returns a constraint that tests for NaN - - - - - Returns a constraint that tests for empty - - - - - Returns a constraint that tests whether a collection - contains all unique items. - - - - - Returns a constraint that tests whether an object graph is serializable in binary format. - - - - - Returns a constraint that tests whether an object graph is serializable in xml format. - - - - - Returns a constraint that tests whether a collection is ordered - - - - - RangeConstraint tests whethe two values are within a - specified range. - - - - - Initializes a new instance of the class. - - From. - To. - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for success, false for failure - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - Modifies the constraint to use an IComparer and returns self. - - - - - Modifies the constraint to use an IComparer<T> and returns self. - - - - - Modifies the constraint to use a Comparison<T> and returns self. - - - - - EqualConstraint is able to compare an actual value with the - expected value provided in its constructor. Two objects are - considered equal if both are null, or if both have the same - value. NUnit has special semantics for some object types. - - - - - If true, strings in error messages will be clipped - - - - - NUnitEqualityComparer used to test equality. - - - - - Initializes a new instance of the class. - - The expected value. - - - - Flag the constraint to use a tolerance when determining equality. - - Tolerance value to be used - Self. - - - - Flag the constraint to use the supplied IComparer object. - - The IComparer object to use. - Self. - - - - Flag the constraint to use the supplied IComparer object. - - The IComparer object to use. - Self. - - - - Flag the constraint to use the supplied IComparer object. - - The IComparer object to use. - Self. - - - - Flag the constraint to use the supplied Comparison object. - - The IComparer object to use. - Self. - - - - Flag the constraint to use the supplied IEqualityComparer object. - - The IComparer object to use. - Self. - - - - Flag the constraint to use the supplied IEqualityComparer object. - - The IComparer object to use. - Self. - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for success, false for failure - - - - Write a failure message. Overridden to provide custom - failure messages for EqualConstraint. - - The MessageWriter to write to - - - - Write description of this constraint - - The MessageWriter to write to - - - - Display the failure information for two collections that did not match. - - The MessageWriter on which to display - The expected collection. - The actual collection - The depth of this failure in a set of nested collections - - - - Displays a single line showing the types and sizes of the expected - and actual collections or arrays. If both are identical, the value is - only shown once. - - The MessageWriter on which to display - The expected collection or array - The actual collection or array - The indentation level for the message line - - - - Displays a single line showing the point in the expected and actual - arrays at which the comparison failed. If the arrays have different - structures or dimensions, both values are shown. - - The MessageWriter on which to display - The expected array - The actual array - Index of the failure point in the underlying collections - The indentation level for the message line - - - - Flag the constraint to ignore case and return self. - - - - - Flag the constraint to suppress string clipping - and return self. - - - - - Flag the constraint to compare arrays as collections - and return self. - - - - - Switches the .Within() modifier to interpret its tolerance as - a distance in representable values (see remarks). - - Self. - - Ulp stands for "unit in the last place" and describes the minimum - amount a given value can change. For any integers, an ulp is 1 whole - digit. For floating point values, the accuracy of which is better - for smaller numbers and worse for larger numbers, an ulp depends - on the size of the number. Using ulps for comparison of floating - point results instead of fixed tolerances is safer because it will - automatically compensate for the added inaccuracy of larger numbers. - - - - - Switches the .Within() modifier to interpret its tolerance as - a percentage that the actual values is allowed to deviate from - the expected value. - - Self - - - - Causes the tolerance to be interpreted as a TimeSpan in days. - - Self - - - - Causes the tolerance to be interpreted as a TimeSpan in hours. - - Self - - - - Causes the tolerance to be interpreted as a TimeSpan in minutes. - - Self - - - - Causes the tolerance to be interpreted as a TimeSpan in seconds. - - Self - - - - Causes the tolerance to be interpreted as a TimeSpan in milliseconds. - - Self - - - - Causes the tolerance to be interpreted as a TimeSpan in clock ticks. - - Self - - - - NotConstraint negates the effect of some other constraint - - - - - Initializes a new instance of the class. - - The base constraint to be negated. - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for if the base constraint fails, false if it succeeds - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - Write the actual value for a failing constraint test to a MessageWriter. - - The writer on which the actual value is displayed - - - - AllItemsConstraint applies another constraint to each - item in a collection, succeeding if they all succeed. - - - - - Construct an AllItemsConstraint on top of an existing constraint - - - - - - Apply the item constraint to each item in the collection, - failing if any item fails. - - - - - - - Write a description of this constraint to a MessageWriter - - - - - - SomeItemsConstraint applies another constraint to each - item in a collection, succeeding if any of them succeeds. - - - - - Construct a SomeItemsConstraint on top of an existing constraint - - - - - - Apply the item constraint to each item in the collection, - succeeding if any item succeeds. - - - - - - - Write a description of this constraint to a MessageWriter - - - - - - NoItemConstraint applies another constraint to each - item in a collection, failing if any of them succeeds. - - - - - Construct a SomeItemsConstraint on top of an existing constraint - - - - - - Apply the item constraint to each item in the collection, - failing if any item fails. - - - - - - - Write a description of this constraint to a MessageWriter - - - - - - ContainsConstraint tests a whether a string contains a substring - or a collection contains an object. It postpones the decision of - which test to use until the type of the actual argument is known. - This allows testing whether a string is contained in a collection - or as a substring of another string using the same syntax. - - - - - Initializes a new instance of the class. - - The expected. - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for success, false for failure - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - Flag the constraint to ignore case and return self. - - - - - Static methods used in creating messages - - - - - Static string used when strings are clipped - - - - - Returns the representation of a type as used in NUnitLite. - This is the same as Type.ToString() except for arrays, - which are displayed with their declared sizes. - - - - - - - Converts any control characters in a string - to their escaped representation. - - The string to be converted - The converted string - - - - Return the a string representation for a set of indices into an array - - Array of indices for which a string is needed - - - - Get an array of indices representing the point in a collection or - array corresponding to a single int index into the collection. - - The collection to which the indices apply - Index in the collection - Array of indices - - - - Clip a string to a given length, starting at a particular offset, returning the clipped - string with ellipses representing the removed parts - - The string to be clipped - The maximum permitted length of the result string - The point at which to start clipping - The clipped string - - - - Clip the expected and actual strings in a coordinated fashion, - so that they may be displayed together. - - - - - - - - - Shows the position two strings start to differ. Comparison - starts at the start index. - - The expected string - The actual string - The index in the strings at which comparison should start - Boolean indicating whether case should be ignored - -1 if no mismatch found, or the index where mismatch found - - - - BasicConstraint is the abstract base for constraints that - perform a simple comparison to a constant value. - - - - - Initializes a new instance of the class. - - The expected. - The description. - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for success, false for failure - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - NullConstraint tests that the actual value is null - - - - - Initializes a new instance of the class. - - - - - TrueConstraint tests that the actual value is true - - - - - Initializes a new instance of the class. - - - - - FalseConstraint tests that the actual value is false - - - - - Initializes a new instance of the class. - - - - - NaNConstraint tests that the actual value is a double or float NaN - - - - - Test that the actual value is an NaN - - - - - - - Write the constraint description to a specified writer - - - - - - MessageWriter is the abstract base for classes that write - constraint descriptions and messages in some form. The - class has separate methods for writing various components - of a message, allowing implementations to tailor the - presentation as needed. - - - - - Construct a MessageWriter given a culture - - - - - Method to write single line message with optional args, usually - written to precede the general failure message. - - The message to be written - Any arguments used in formatting the message - - - - Method to write single line message with optional args, usually - written to precede the general failure message, at a givel - indentation level. - - The indentation level of the message - The message to be written - Any arguments used in formatting the message - - - - Display Expected and Actual lines for a constraint. This - is called by MessageWriter's default implementation of - WriteMessageTo and provides the generic two-line display. - - The constraint that failed - - - - Display Expected and Actual lines for given values. This - method may be called by constraints that need more control over - the display of actual and expected values than is provided - by the default implementation. - - The expected value - The actual value causing the failure - - - - Display Expected and Actual lines for given values, including - a tolerance value on the Expected line. - - The expected value - The actual value causing the failure - The tolerance within which the test was made - - - - Display the expected and actual string values on separate lines. - If the mismatch parameter is >=0, an additional line is displayed - line containing a caret that points to the mismatch point. - - The expected string value - The actual string value - The point at which the strings don't match or -1 - If true, case is ignored in locating the point where the strings differ - If true, the strings should be clipped to fit the line - - - - Writes the text for a connector. - - The connector. - - - - Writes the text for a predicate. - - The predicate. - - - - Writes the text for an expected value. - - The expected value. - - - - Writes the text for a modifier - - The modifier. - - - - Writes the text for an actual value. - - The actual value. - - - - Writes the text for a generalized value. - - The value. - - - - Writes the text for a collection value, - starting at a particular point, to a max length - - The collection containing elements to write. - The starting point of the elements to write - The maximum number of elements to write - - - - Abstract method to get the max line length - - - - - Modes in which the tolerance value for a comparison can - be interpreted. - - - - - The tolerance was created with a value, without specifying - how the value would be used. This is used to prevent setting - the mode more than once and is generally changed to Linear - upon execution of the test. - - - - - The tolerance is used as a numeric range within which - two compared values are considered to be equal. - - - - - Interprets the tolerance as the percentage by which - the two compared values my deviate from each other. - - - - - Compares two values based in their distance in - representable numbers. - - - - - The Tolerance class generalizes the notion of a tolerance - within which an equality test succeeds. Normally, it is - used with numeric types, but it can be used with any - type that supports taking a difference between two - objects and comparing that difference to a value. - - - - - Constructs a linear tolerance of a specdified amount - - - - - Constructs a tolerance given an amount and ToleranceMode - - - - - Tests that the current Tolerance is linear with a - numeric value, throwing an exception if it is not. - - - - - Returns an empty Tolerance object, equivalent to - specifying an exact match. - - - - - Gets the ToleranceMode for the current Tolerance - - - - - Gets the value of the current Tolerance instance. - - - - - Returns a new tolerance, using the current amount as a percentage. - - - - - Returns a new tolerance, using the current amount in Ulps. - - - - - Returns a new tolerance with a TimeSpan as the amount, using - the current amount as a number of days. - - - - - Returns a new tolerance with a TimeSpan as the amount, using - the current amount as a number of hours. - - - - - Returns a new tolerance with a TimeSpan as the amount, using - the current amount as a number of minutes. - - - - - Returns a new tolerance with a TimeSpan as the amount, using - the current amount as a number of seconds. - - - - - Returns a new tolerance with a TimeSpan as the amount, using - the current amount as a number of milliseconds. - - - - - Returns a new tolerance with a TimeSpan as the amount, using - the current amount as a number of clock ticks. - - - - - Returns true if the current tolerance is empty. - - - - - The Numerics class contains common operations on numeric values. - - - - - Checks the type of the object, returning true if - the object is a numeric type. - - The object to check - true if the object is a numeric type - - - - Checks the type of the object, returning true if - the object is a floating point numeric type. - - The object to check - true if the object is a floating point numeric type - - - - Checks the type of the object, returning true if - the object is a fixed point numeric type. - - The object to check - true if the object is a fixed point numeric type - - - - Test two numeric values for equality, performing the usual numeric - conversions and using a provided or default tolerance. If the tolerance - provided is Empty, this method may set it to a default tolerance. - - The expected value - The actual value - A reference to the tolerance in effect - True if the values are equal - - - - Compare two numeric values, performing the usual numeric conversions. - - The expected value - The actual value - The relationship of the values to each other - - - - EmptyConstraint tests a whether a string or collection is empty, - postponing the decision about which test is applied until the - type of the actual argument is known. - - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for success, false for failure - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - StringConstraint is the abstract base for constraints - that operate on strings. It supports the IgnoreCase - modifier for string operations. - - - - - The expected value - - - - - Indicates whether tests should be case-insensitive - - - - - Constructs a StringConstraint given an expected value - - The expected value - - - - Modify the constraint to ignore case in matching. - - - - - EmptyStringConstraint tests whether a string is empty. - - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for success, false for failure - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - NullEmptyStringConstraint tests whether a string is either null or empty. - - - - - Constructs a new NullOrEmptyStringConstraint - - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for success, false for failure - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - SubstringConstraint can test whether a string contains - the expected substring. - - - - - Initializes a new instance of the class. - - The expected. - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for success, false for failure - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - StartsWithConstraint can test whether a string starts - with an expected substring. - - - - - Initializes a new instance of the class. - - The expected string - - - - Test whether the constraint is matched by the actual value. - This is a template method, which calls the IsMatch method - of the derived class. - - - - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - EndsWithConstraint can test whether a string ends - with an expected substring. - - - - - Initializes a new instance of the class. - - The expected string - - - - Test whether the constraint is matched by the actual value. - This is a template method, which calls the IsMatch method - of the derived class. - - - - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - RegexConstraint can test whether a string matches - the pattern provided. - - - - - Initializes a new instance of the class. - - The pattern. - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for success, false for failure - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - Abstract base class for constraints that compare values to - determine if one is greater than, equal to or less than - the other. - - - - - The value against which a comparison is to be made - - - - - If true, less than returns success - - - - - if true, equal returns success - - - - - if true, greater than returns success - - - - - The predicate used as a part of the description - - - - - ComparisonAdapter to be used in making the comparison - - - - - Initializes a new instance of the class. - - The value against which to make a comparison. - if set to true less succeeds. - if set to true equal succeeds. - if set to true greater succeeds. - String used in describing the constraint. - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for success, false for failure - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - Modifies the constraint to use an IComparer and returns self - - - - - Modifies the constraint to use an IComparer<T> and returns self - - - - - Modifies the constraint to use a Comparison<T> and returns self - - - - - Tests whether a value is greater than the value supplied to its constructor - - - - - Initializes a new instance of the class. - - The expected value. - - - - Tests whether a value is greater than or equal to the value supplied to its constructor - - - - - Initializes a new instance of the class. - - The expected value. - - - - Tests whether a value is less than the value supplied to its constructor - - - - - Initializes a new instance of the class. - - The expected value. - - - - Tests whether a value is less than or equal to the value supplied to its constructor - - - - - Initializes a new instance of the class. - - The expected value. - - - - SameAsConstraint tests whether an object is identical to - the object passed to its constructor - - - - - Initializes a new instance of the class. - - The expected object. - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for success, false for failure - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - BinaryConstraint is the abstract base of all constraints - that combine two other constraints in some fashion. - - - - - The first constraint being combined - - - - - The second constraint being combined - - - - - Construct a BinaryConstraint from two other constraints - - The first constraint - The second constraint - - - - AndConstraint succeeds only if both members succeed. - - - - - Create an AndConstraint from two other constraints - - The first constraint - The second constraint - - - - Apply both member constraints to an actual value, succeeding - succeeding only if both of them succeed. - - The actual value - True if the constraints both succeeded - - - - Write a description for this contraint to a MessageWriter - - The MessageWriter to receive the description - - - - Write the actual value for a failing constraint test to a - MessageWriter. The default implementation simply writes - the raw value of actual, leaving it to the writer to - perform any formatting. - - The writer on which the actual value is displayed - - - - OrConstraint succeeds if either member succeeds - - - - - Create an OrConstraint from two other constraints - - The first constraint - The second constraint - - - - Apply the member constraints to an actual value, succeeding - succeeding as soon as one of them succeeds. - - The actual value - True if either constraint succeeded - - - - Write a description for this contraint to a MessageWriter - - The MessageWriter to receive the description - - - - Helper class with properties and methods that supply - a number of constraints used in Asserts. - - - - - Returns a new PropertyConstraintExpression, which will either - test for the existence of the named property on the object - being tested or apply any following constraint to that property. - - - - - Returns a new AttributeConstraint checking for the - presence of a particular attribute on an object. - - - - - Returns a new AttributeConstraint checking for the - presence of a particular attribute on an object. - - - - - Returns a constraint that tests two items for equality - - - - - Returns a constraint that tests that two references are the same object - - - - - Returns a constraint that tests whether the - actual value is greater than the suppled argument - - - - - Returns a constraint that tests whether the - actual value is greater than the suppled argument - - - - - Returns a constraint that tests whether the - actual value is greater than the suppled argument - - - - - Returns a constraint that tests whether the - actual value is greater than the suppled argument - - - - - Returns a constraint that tests whether the - actual value is greater than the suppled argument - - - - - Returns a constraint that tests whether the - actual value is greater than the suppled argument - - - - - Returns a constraint that tests whether the actual - value is of the exact type supplied as an argument. - - - - - Returns a constraint that tests whether the actual - value is of the exact type supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is of the type supplied as an argument or a derived type. - - - - - Returns a constraint that tests whether the actual value - is of the type supplied as an argument or a derived type. - - - - - Returns a constraint that tests whether the actual value - is of the type supplied as an argument or a derived type. - - - - - Returns a constraint that tests whether the actual value - is of the type supplied as an argument or a derived type. - - - - - Returns a constraint that tests whether the actual value - is assignable from the type supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is assignable from the type supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is assignable from the type supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is assignable from the type supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is a collection containing the same elements as the - collection supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is a subset of the collection supplied as an argument. - - - - - Returns a new CollectionContainsConstraint checking for the - presence of a particular object in the collection. - - - - - Returns a new CollectionContainsConstraint checking for the - presence of a particular object in the collection. - - - - - Returns a new ContainsConstraint. This constraint - will, in turn, make use of the appropriate second-level - constraint, depending on the type of the actual argument. - This overload is only used if the item sought is a string, - since any other type implies that we are looking for a - collection member. - - - - - Returns a constraint that succeeds if the actual - value contains the substring supplied as an argument. - - - - - Returns a constraint that fails if the actual - value contains the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value starts with the substring supplied as an argument. - - - - - Returns a constraint that fails if the actual - value starts with the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value ends with the substring supplied as an argument. - - - - - Returns a constraint that fails if the actual - value ends with the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value matches the Regex pattern supplied as an argument. - - - - - Returns a constraint that fails if the actual - value matches the pattern supplied as an argument. - - - - - Returns a constraint that tests whether the path provided - is the same as an expected path after canonicalization. - - - - - Returns a constraint that tests whether the path provided - is the same path or under an expected path after canonicalization. - - - - - Returns a constraint that tests whether the actual value falls - within a specified range. - - - - - Returns a ConstraintExpression that negates any - following constraint. - - - - - Returns a ConstraintExpression that negates any - following constraint. - - - - - Returns a ConstraintExpression, which will apply - the following constraint to all members of a collection, - succeeding if all of them succeed. - - - - - Returns a ConstraintExpression, which will apply - the following constraint to all members of a collection, - succeeding if at least one of them succeeds. - - - - - Returns a ConstraintExpression, which will apply - the following constraint to all members of a collection, - succeeding if all of them fail. - - - - - Returns a new ConstraintExpression, which will apply the following - constraint to the Length property of the object being tested. - - - - - Returns a new ConstraintExpression, which will apply the following - constraint to the Count property of the object being tested. - - - - - Returns a new ConstraintExpression, which will apply the following - constraint to the Message property of the object being tested. - - - - - Returns a constraint that tests for null - - - - - Returns a constraint that tests for True - - - - - Returns a constraint that tests for False - - - - - Returns a constraint that tests for NaN - - - - - Returns a constraint that tests for empty - - - - - Returns a constraint that tests whether a collection - contains all unique items. - - - - - Returns a constraint that tests whether an object graph is serializable in binary format. - - - - - Returns a constraint that tests whether an object graph is serializable in xml format. - - - - - Returns a constraint that tests whether a collection is ordered - - - - - Applies a delay to the match so that a match can be evaluated in the future. - - - - - Creates a new DelayedConstraint - - The inner constraint two decorate - The time interval after which the match is performed - If the value of is less than 0 - - - - Creates a new DelayedConstraint - - The inner constraint two decorate - The time interval after which the match is performed - The time interval used for polling - If the value of is less than 0 - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for if the base constraint fails, false if it succeeds - - - - Test whether the constraint is satisfied by a delegate - - The delegate whose value is to be tested - True for if the base constraint fails, false if it succeeds - - - - Test whether the constraint is satisfied by a given reference. - Overridden to wait for the specified delay period before - calling the base constraint with the dereferenced value. - - A reference to the value to be tested - True for success, false for failure - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - Write the actual value for a failing constraint test to a MessageWriter. - - The writer on which the actual value is displayed - - - - Returns the string representation of the constraint. - - - - - NUnitComparer encapsulates NUnit's default behavior - in comparing two objects. - - - - - Compares two objects - - - - - - - - Returns the default NUnitComparer. - - - - - Delegate used to delay evaluation of the actual value - to be used in evaluating a constraint - - - - - NUnitEqualityComparer encapsulates NUnit's handling of - equality tests between objects. - - - - - If true, all string comparisons will ignore case - - - - - If true, arrays will be treated as collections, allowing - those of different dimensions to be compared - - - - - If non-zero, equality comparisons within the specified - tolerance will succeed. - - - - - Comparison object used in comparisons for some constraints. - - - - - Compares two objects for equality. - - - - - Helper method to compare two arrays - - - - - Method to compare two DirectoryInfo objects - - first directory to compare - second directory to compare - true if equivalent, false if not - - - - Returns the default NUnitEqualityComparer - - - - - Gets and sets a flag indicating whether case should - be ignored in determining equality. - - - - - Gets and sets a flag indicating that arrays should be - compared as collections, without regard to their shape. - - - - - Gets and sets an external comparer to be used to - test for equality. It is applied to members of - collections, in place of NUnit's own logic. - - - - - Gets and sets a tolerance used to compare objects of - certin types. - - - - - Gets the list of failure points for the last Match performed. - - - - - ComparisonAdapter class centralizes all comparisons of - values in NUnit, adapting to the use of any provided - IComparer, IComparer<T> or Comparison<T> - - - - - Returns a ComparisonAdapter that wraps an IComparer - - - - - Returns a ComparisonAdapter that wraps an IComparer<T> - - - - - Returns a ComparisonAdapter that wraps a Comparison<T> - - - - - Compares two objects - - - - - Gets the default ComparisonAdapter, which wraps an - NUnitComparer object. - - - - - Construct a ComparisonAdapter for an IComparer - - - - - Compares two objects - - - - - - - - Construct a default ComparisonAdapter - - - - - ComparisonAdapter<T> extends ComparisonAdapter and - allows use of an IComparer<T> or Comparison<T> - to actually perform the comparison. - - - - - Construct a ComparisonAdapter for an IComparer<T> - - - - - Compare a Type T to an object - - - - - Construct a ComparisonAdapter for a Comparison<T> - - - - - Compare a Type T to an object - - - - - The ConstraintOperator class is used internally by a - ConstraintBuilder to represent an operator that - modifies or combines constraints. - - Constraint operators use left and right precedence - values to determine whether the top operator on the - stack should be reduced before pushing a new operator. - - - - - The precedence value used when the operator - is about to be pushed to the stack. - - - - - The precedence value used when the operator - is on the top of the stack. - - - - - Reduce produces a constraint from the operator and - any arguments. It takes the arguments from the constraint - stack and pushes the resulting constraint on it. - - - - - - The syntax element preceding this operator - - - - - The syntax element folowing this operator - - - - - The precedence value used when the operator - is about to be pushed to the stack. - - - - - The precedence value used when the operator - is on the top of the stack. - - - - - PrefixOperator takes a single constraint and modifies - it's action in some way. - - - - - Reduce produces a constraint from the operator and - any arguments. It takes the arguments from the constraint - stack and pushes the resulting constraint on it. - - - - - - Returns the constraint created by applying this - prefix to another constraint. - - - - - - - Negates the test of the constraint it wraps. - - - - - Constructs a new NotOperator - - - - - Returns a NotConstraint applied to its argument. - - - - - Abstract base for operators that indicate how to - apply a constraint to items in a collection. - - - - - Constructs a CollectionOperator - - - - - Represents a constraint that succeeds if all the - members of a collection match a base constraint. - - - - - Returns a constraint that will apply the argument - to the members of a collection, succeeding if - they all succeed. - - - - - Represents a constraint that succeeds if any of the - members of a collection match a base constraint. - - - - - Returns a constraint that will apply the argument - to the members of a collection, succeeding if - any of them succeed. - - - - - Represents a constraint that succeeds if none of the - members of a collection match a base constraint. - - - - - Returns a constraint that will apply the argument - to the members of a collection, succeeding if - none of them succeed. - - - - - Represents a constraint that simply wraps the - constraint provided as an argument, without any - further functionality, but which modifes the - order of evaluation because of its precedence. - - - - - Constructor for the WithOperator - - - - - Returns a constraint that wraps its argument - - - - - Abstract base class for operators that are able to reduce to a - constraint whether or not another syntactic element follows. - - - - - Operator used to test for the presence of a named Property - on an object and optionally apply further tests to the - value of that property. - - - - - Constructs a PropOperator for a particular named property - - - - - Reduce produces a constraint from the operator and - any arguments. It takes the arguments from the constraint - stack and pushes the resulting constraint on it. - - - - - - Gets the name of the property to which the operator applies - - - - - Operator that tests for the presence of a particular attribute - on a type and optionally applies further tests to the attribute. - - - - - Construct an AttributeOperator for a particular Type - - The Type of attribute tested - - - - Reduce produces a constraint from the operator and - any arguments. It takes the arguments from the constraint - stack and pushes the resulting constraint on it. - - - - - Operator that tests that an exception is thrown and - optionally applies further tests to the exception. - - - - - Construct a ThrowsOperator - - - - - Reduce produces a constraint from the operator and - any arguments. It takes the arguments from the constraint - stack and pushes the resulting constraint on it. - - - - - Abstract base class for all binary operators - - - - - Reduce produces a constraint from the operator and - any arguments. It takes the arguments from the constraint - stack and pushes the resulting constraint on it. - - - - - - Abstract method that produces a constraint by applying - the operator to its left and right constraint arguments. - - - - - Gets the left precedence of the operator - - - - - Gets the right precedence of the operator - - - - - Operator that requires both it's arguments to succeed - - - - - Construct an AndOperator - - - - - Apply the operator to produce an AndConstraint - - - - - Operator that requires at least one of it's arguments to succeed - - - - - Construct an OrOperator - - - - - Apply the operator to produce an OrConstraint - - - - - BinarySerializableConstraint tests whether - an object is serializable in binary format. - - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for success, false for failure - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - Write the actual value for a failing constraint test to a - MessageWriter. The default implementation simply writes - the raw value of actual, leaving it to the writer to - perform any formatting. - - The writer on which the actual value is displayed - - - - Returns the string representation - - - - - BinarySerializableConstraint tests whether - an object is serializable in binary format. - - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for success, false for failure - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - Write the actual value for a failing constraint test to a - MessageWriter. The default implementation simply writes - the raw value of actual, leaving it to the writer to - perform any formatting. - - The writer on which the actual value is displayed - - - - Returns the string representation of this constraint - - - - - ResolvableConstraintExpression is used to represent a compound - constraint being constructed at a point where the last operator - may either terminate the expression or may have additional - qualifying constraints added to it. - - It is used, for example, for a Property element or for - an Exception element, either of which may be optionally - followed by constraints that apply to the property or - exception. - - - - - Create a new instance of ResolvableConstraintExpression - - - - - Create a new instance of ResolvableConstraintExpression, - passing in a pre-populated ConstraintBuilder. - - - - - Resolve the current expression to a Constraint - - - - - Appends an And Operator to the expression - - - - - Appends an Or operator to the expression. - - - - - EqualityAdapter class handles all equality comparisons - that use an IEqualityComparer, IEqualityComparer<T> - or a ComparisonAdapter. - - - - - Compares two objects, returning true if they are equal - - - - - Returns an EqualityAdapter that wraps an IComparer. - - - - - Returns an EqualityAdapter that wraps an IEqualityComparer. - - - - - Returns an EqualityAdapter that wraps an IEqualityComparer<T>. - - - - - Returns an EqualityAdapter that wraps an IComparer<T>. - - - - - Returns an EqualityAdapter that wraps a Comparison<T>. - - - - - AttributeExistsConstraint tests for the presence of a - specified attribute on a Type. - - - - - Constructs an AttributeExistsConstraint for a specific attribute Type - - - - - - Tests whether the object provides the expected attribute. - - A Type, MethodInfo, or other ICustomAttributeProvider - True if the expected attribute is present, otherwise false - - - - Writes the description of the constraint to the specified writer - - - - - AttributeConstraint tests that a specified attribute is present - on a Type or other provider and that the value of the attribute - satisfies some other constraint. - - - - - Constructs an AttributeConstraint for a specified attriute - Type and base constraint. - - - - - - - Determines whether the Type or other provider has the - expected attribute and if its value matches the - additional constraint specified. - - - - - Writes a description of the attribute to the specified writer. - - - - - Writes the actual value supplied to the specified writer. - - - - - Returns a string representation of the constraint. - - - - Helper routines for working with floating point numbers - - - The floating point comparison code is based on this excellent article: - http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm - - - "ULP" means Unit in the Last Place and in the context of this library refers to - the distance between two adjacent floating point numbers. IEEE floating point - numbers can only represent a finite subset of natural numbers, with greater - accuracy for smaller numbers and lower accuracy for very large numbers. - - - If a comparison is allowed "2 ulps" of deviation, that means the values are - allowed to deviate by up to 2 adjacent floating point values, which might be - as low as 0.0000001 for small numbers or as high as 10.0 for large numbers. - - - - - Compares two floating point values for equality - First floating point value to be compared - Second floating point value t be compared - - Maximum number of representable floating point values that are allowed to - be between the left and the right floating point values - - True if both numbers are equal or close to being equal - - - Floating point values can only represent a finite subset of natural numbers. - For example, the values 2.00000000 and 2.00000024 can be stored in a float, - but nothing inbetween them. - - - This comparison will count how many possible floating point values are between - the left and the right number. If the number of possible values between both - numbers is less than or equal to maxUlps, then the numbers are considered as - being equal. - - - Implementation partially follows the code outlined here: - http://www.anttirt.net/2007/08/19/proper-floating-point-comparisons/ - - - - - Compares two double precision floating point values for equality - First double precision floating point value to be compared - Second double precision floating point value t be compared - - Maximum number of representable double precision floating point values that are - allowed to be between the left and the right double precision floating point values - - True if both numbers are equal or close to being equal - - - Double precision floating point values can only represent a limited series of - natural numbers. For example, the values 2.0000000000000000 and 2.0000000000000004 - can be stored in a double, but nothing inbetween them. - - - This comparison will count how many possible double precision floating point - values are between the left and the right number. If the number of possible - values between both numbers is less than or equal to maxUlps, then the numbers - are considered as being equal. - - - Implementation partially follows the code outlined here: - http://www.anttirt.net/2007/08/19/proper-floating-point-comparisons/ - - - - - - Reinterprets the memory contents of a floating point value as an integer value - - - Floating point value whose memory contents to reinterpret - - - The memory contents of the floating point value interpreted as an integer - - - - - Reinterprets the memory contents of a double precision floating point - value as an integer value - - - Double precision floating point value whose memory contents to reinterpret - - - The memory contents of the double precision floating point value - interpreted as an integer - - - - - Reinterprets the memory contents of an integer as a floating point value - - Integer value whose memory contents to reinterpret - - The memory contents of the integer value interpreted as a floating point value - - - - - Reinterprets the memory contents of an integer value as a double precision - floating point value - - Integer whose memory contents to reinterpret - - The memory contents of the integer interpreted as a double precision - floating point value - - - - Union of a floating point variable and an integer - - - The union's value as a floating point variable - - - The union's value as an integer - - - The union's value as an unsigned integer - - - Union of a double precision floating point variable and a long - - - The union's value as a double precision floating point variable - - - The union's value as a long - - - The union's value as an unsigned long - - - - Predicate constraint wraps a Predicate in a constraint, - returning success if the predicate is true. - - - - - Construct a PredicateConstraint from a predicate - - - - - Determines whether the predicate succeeds when applied - to the actual value. - - - - - Writes the description to a MessageWriter - - - - - The TestCaseData class represents a set of arguments - and other parameter info to be used for a parameterized - test case. It provides a number of instance modifiers - for use in initializing the test case. - - Note: Instance modifiers are getters that return - the same instance after modifying it's state. - - - - - The ITestCaseData interface is implemented by a class - that is able to return complete testcases for use by - a parameterized test method. - - NOTE: This interface is used in both the framework - and the core, even though that results in two different - types. However, sharing the source code guarantees that - the various implementations will be compatible and that - the core is able to reflect successfully over the - framework implementations of ITestCaseData. - - - - - Gets the argument list to be provided to the test - - - - - Gets the expected result - - - - - Gets the expected exception Type - - - - - Gets the FullName of the expected exception - - - - - Gets the name to be used for the test - - - - - Gets the description of the test - - - - - The argument list to be provided to the test - - - - - The expected result to be returned - - - - - The expected exception Type - - - - - The FullName of the expected exception - - - - - The name to be used for the test - - - - - The description of the test - - - - - A dictionary of properties, used to add information - to tests without requiring the class to change. - - - - - Initializes a new instance of the class. - - The first argument - The remaining arguments. - - - - Initializes a new instance of the class. - - The argument. - - - - Sets the expected result for the test - - The expected result - A modified TestCaseData - - - - Sets the expected exception type for the test - - Type of the expected exception. - The modified TestCaseData instance - - - - Sets the expected exception type for the test - - FullName of the expected exception. - The modified TestCaseData instance - - - - Sets the name of the test case - - The modified TestCaseData instance - - - - Sets the description for the test case - being constructed. - - The description. - The modified TestCaseData instance. - - - - Applies a category to the test - - - - - - - Applies a named property to the test - - - - - - - - Applies a named property to the test - - - - - - - - Applies a named property to the test - - - - - - - - Gets the argument list to be provided to the test - - - - - Gets the expected result - - - - - Gets the expected exception Type - - - - - Gets the FullName of the expected exception - - - - - Gets the name to be used for the test - - - - - Gets the description of the test - - - - - Gets a list of categories associated with this test. - - - - - Gets the property dictionary for this test - - - - - FactoryAttribute indicates the source to be used to - provide test cases for a test method. - - - - - Construct with the name of the factory - for use with languages - that don't support params arrays. - - An array of the names of the factories that will provide data - - - - Construct with a Type and name - for use with languages - that don't support params arrays. - - The Type that will provide data - The name of the method, property or field that will provide data - - - - The name of a the method, property or fiend to be used as a source - - - - - A Type to be used as a source - - - - - Helper class with properties and methods that supply - a number of constraints used in Asserts. - - - - - Returns a new PropertyConstraintExpression, which will either - test for the existence of the named property on the object - being tested or apply any following constraint to that property. - - - - - Returns a new AttributeConstraint checking for the - presence of a particular attribute on an object. - - - - - Returns a new AttributeConstraint checking for the - presence of a particular attribute on an object. - - - - - Returns a new CollectionContainsConstraint checking for the - presence of a particular object in the collection. - - - - - Returns a ConstraintExpression that negates any - following constraint. - - - - - Returns a ConstraintExpression, which will apply - the following constraint to all members of a collection, - succeeding if all of them succeed. - - - - - Returns a ConstraintExpression, which will apply - the following constraint to all members of a collection, - succeeding if at least one of them succeeds. - - - - - Returns a ConstraintExpression, which will apply - the following constraint to all members of a collection, - succeeding if all of them fail. - - - - - Returns a new ConstraintExpression, which will apply the following - constraint to the Length property of the object being tested. - - - - - Returns a new ConstraintExpression, which will apply the following - constraint to the Count property of the object being tested. - - - - - Returns a new ConstraintExpression, which will apply the following - constraint to the Message property of the object being tested. - - - - - The List class is a helper class with properties and methods - that supply a number of constraints used with lists and collections. - - - - - List.Map returns a ListMapper, which can be used to map - the original collection to another collection. - - - - - - - Enumeration indicating how the expected message parameter is to be used - - - - Expect an exact match - - - Expect a message containing the parameter string - - - Match the regular expression provided as a parameter - - - Expect a message that starts with the parameter string - - - - ExpectedExceptionAttribute - - - - - - Constructor for a non-specific exception - - - - - Constructor for a given type of exception - - The type of the expected exception - - - - Constructor for a given exception name - - The full name of the expected exception - - - - Gets or sets the expected exception type - - - - - Gets or sets the full Type name of the expected exception - - - - - Gets or sets the expected message text - - - - - Gets or sets the user message displayed in case of failure - - - - - Gets or sets the type of match to be performed on the expected message - - - - - Gets the name of a method to be used as an exception handler - - - - - TestCaseAttribute is used to mark parameterized test cases - and provide them with their arguments. - - - - - Construct a TestCaseAttribute with a list of arguments. - This constructor is not CLS-Compliant - - - - - - Construct a TestCaseAttribute with a single argument - - - - - - Construct a TestCaseAttribute with a two arguments - - - - - - - Construct a TestCaseAttribute with a three arguments - - - - - - - - Gets the list of arguments to a test case - - - - - Gets or sets the expected result. - - The result. - - - - Gets or sets the expected exception. - - The expected exception. - - - - Gets or sets the name the expected exception. - - The expected name of the exception. - - - - Gets or sets the expected message of the expected exception - - The expected message of the exception. - - - - Gets or sets the type of match to be performed on the expected message - - - - - Gets or sets the description. - - The description. - - - - Gets or sets the name of the test. - - The name of the test. - - - - Thrown when an assertion failed. - - - - - - - The error message that explains - the reason for the exception - The exception that caused the - current exception - - - - Serialization Constructor - - - - - Thrown when a test executes inconclusively. - - - - - The error message that explains - the reason for the exception - - - The error message that explains - the reason for the exception - The exception that caused the - current exception - - - - Serialization Constructor - - - - - Delegate used by tests that execute code and - capture any thrown exception. - - - - - The Assert class contains a collection of static methods that - implement the most common assertions used in NUnit. - - - - - We don't actually want any instances of this object, but some people - like to inherit from it to add other static methods. Hence, the - protected constructor disallows any instances of this object. - - - - - The Equals method throws an AssertionException. This is done - to make sure there is no mistake by calling this function. - - - - - - - override the default ReferenceEquals to throw an AssertionException. This - implementation makes sure there is no mistake in calling this function - as part of Assert. - - - - - - - Helper for Assert.AreEqual(double expected, double actual, ...) - allowing code generation to work consistently. - - The expected value - The actual value - The maximum acceptable difference between the - the expected and the actual - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Throws a with the message and arguments - that are passed in. This allows a test to be cut short, with a result - of success returned to NUnit. - - The message to initialize the with. - Arguments to be used in formatting the message - - - - Throws a with the message and arguments - that are passed in. This allows a test to be cut short, with a result - of success returned to NUnit. - - The message to initialize the with. - - - - Throws a with the message and arguments - that are passed in. This allows a test to be cut short, with a result - of success returned to NUnit. - - - - - Throws an with the message and arguments - that are passed in. This is used by the other Assert functions. - - The message to initialize the with. - Arguments to be used in formatting the message - - - - Throws an with the message that is - passed in. This is used by the other Assert functions. - - The message to initialize the with. - - - - Throws an . - This is used by the other Assert functions. - - - - - Throws an with the message and arguments - that are passed in. This causes the test to be reported as ignored. - - The message to initialize the with. - Arguments to be used in formatting the message - - - - Throws an with the message that is - passed in. This causes the test to be reported as ignored. - - The message to initialize the with. - - - - Throws an . - This causes the test to be reported as ignored. - - - - - Throws an with the message and arguments - that are passed in. This causes the test to be reported as inconclusive. - - The message to initialize the with. - Arguments to be used in formatting the message - - - - Throws an with the message that is - passed in. This causes the test to be reported as inconclusive. - - The message to initialize the with. - - - - Throws an . - This causes the test to be reported as Inconclusive. - - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. - - A Constraint to be applied - The actual value to test - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. - - A Constraint to be applied - The actual value to test - The message that will be displayed on failure - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. - - A Constraint expression to be applied - The actual value to test - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. - - A Constraint expression to be applied - An ActualValueDelegate returning the value to be tested - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. - - A Constraint expression to be applied - An ActualValueDelegate returning the value to be tested - The message that will be displayed on failure - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. - - An ActualValueDelegate returning the value to be tested - A Constraint expression to be applied - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Apply a constraint to a referenced value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. - - A Constraint to be applied - The actual value to test - - - - Apply a constraint to a referenced value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. - - A Constraint to be applied - The actual value to test - The message that will be displayed on failure - - - - Apply a constraint to a referenced value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. - - A Constraint to be applied - The actual value to test - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Asserts that a condition is true. If the condition is false the method throws - an . - - The evaluated condition - The message to display if the condition is false - Arguments to be used in formatting the message - - - - Asserts that a condition is true. If the condition is false the method throws - an . - - The evaluated condition - The message to display if the condition is false - - - - Asserts that a condition is true. If the condition is false the method throws - an . - - The evaluated condition - - - - Asserts that the code represented by a delegate throws an exception - that satisfies the constraint provided. - - A TestDelegate to be executed - A ThrowsConstraint used in the test - - - - Verifies that a delegate throws a particular exception when called. - - A constraint to be satisfied by the exception - A TestSnippet delegate - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Verifies that a delegate throws a particular exception when called. - - A constraint to be satisfied by the exception - A TestSnippet delegate - The message that will be displayed on failure - - - - Verifies that a delegate throws a particular exception when called. - - A constraint to be satisfied by the exception - A TestSnippet delegate - - - - Verifies that a delegate throws a particular exception when called. - - The exception Type expected - A TestSnippet delegate - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Verifies that a delegate throws a particular exception when called. - - The exception Type expected - A TestSnippet delegate - The message that will be displayed on failure - - - - Verifies that a delegate throws a particular exception when called. - - The exception Type expected - A TestSnippet delegate - - - - Verifies that a delegate throws a particular exception when called. - - Type of the expected exception - A TestSnippet delegate - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Verifies that a delegate throws a particular exception when called. - - Type of the expected exception - A TestSnippet delegate - The message that will be displayed on failure - - - - Verifies that a delegate throws a particular exception when called. - - Type of the expected exception - A TestSnippet delegate - - - - Verifies that a delegate does not throw an exception - - A TestSnippet delegate - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Verifies that a delegate does not throw an exception. - - A TestSnippet delegate - The message that will be displayed on failure - - - - Verifies that a delegate does not throw an exception. - - A TestSnippet delegate - - - - Asserts that a condition is true. If the condition is false the method throws - an . - - The evaluated condition - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Asserts that a condition is true. If the condition is false the method throws - an . - - The evaluated condition - The message to display in case of failure - - - - Asserts that a condition is true. If the condition is false the method throws - an . - - The evaluated condition - - - - Asserts that a condition is true. If the condition is false the method throws - an . - - The evaluated condition - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Asserts that a condition is true. If the condition is false the method throws - an . - - The evaluated condition - The message to display in case of failure - - - - Asserts that a condition is true. If the condition is false the method throws - an . - - The evaluated condition - - - - Asserts that a condition is false. If the condition is true the method throws - an . - - The evaluated condition - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Asserts that a condition is false. If the condition is true the method throws - an . - - The evaluated condition - The message to display in case of failure - - - - Asserts that a condition is false. If the condition is true the method throws - an . - - The evaluated condition - - - - Asserts that a condition is false. If the condition is true the method throws - an . - - The evaluated condition - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Asserts that a condition is false. If the condition is true the method throws - an . - - The evaluated condition - The message to display in case of failure - - - - Asserts that a condition is false. If the condition is true the method throws - an . - - The evaluated condition - - - - Verifies that the object that is passed in is not equal to null - If the object is null then an - is thrown. - - The object that is to be tested - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the object that is passed in is not equal to null - If the object is null then an - is thrown. - - The object that is to be tested - The message to display in case of failure - - - - Verifies that the object that is passed in is not equal to null - If the object is null then an - is thrown. - - The object that is to be tested - - - - Verifies that the object that is passed in is not equal to null - If the object is null then an - is thrown. - - The object that is to be tested - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the object that is passed in is not equal to null - If the object is null then an - is thrown. - - The object that is to be tested - The message to display in case of failure - - - - Verifies that the object that is passed in is not equal to null - If the object is null then an - is thrown. - - The object that is to be tested - - - - Verifies that the object that is passed in is equal to null - If the object is not null then an - is thrown. - - The object that is to be tested - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the object that is passed in is equal to null - If the object is not null then an - is thrown. - - The object that is to be tested - The message to display in case of failure - - - - Verifies that the object that is passed in is equal to null - If the object is not null then an - is thrown. - - The object that is to be tested - - - - Verifies that the object that is passed in is equal to null - If the object is not null then an - is thrown. - - The object that is to be tested - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the object that is passed in is equal to null - If the object is not null then an - is thrown. - - The object that is to be tested - The message to display in case of failure - - - - Verifies that the object that is passed in is equal to null - If the object is not null then an - is thrown. - - The object that is to be tested - - - - Verifies that the double that is passed in is an NaN value. - If the object is not NaN then an - is thrown. - - The value that is to be tested - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the double that is passed in is an NaN value. - If the object is not NaN then an - is thrown. - - The value that is to be tested - The message to display in case of failure - - - - Verifies that the double that is passed in is an NaN value. - If the object is not NaN then an - is thrown. - - The value that is to be tested - - - - Verifies that the double that is passed in is an NaN value. - If the object is not NaN then an - is thrown. - - The value that is to be tested - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the double that is passed in is an NaN value. - If the object is not NaN then an - is thrown. - - The value that is to be tested - The message to display in case of failure - - - - Verifies that the double that is passed in is an NaN value. - If the object is not NaN then an - is thrown. - - The value that is to be tested - - - - Assert that a string is empty - that is equal to string.Empty - - The string to be tested - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Assert that a string is empty - that is equal to string.Empty - - The string to be tested - The message to display in case of failure - - - - Assert that a string is empty - that is equal to string.Empty - - The string to be tested - - - - Assert that an array, list or other collection is empty - - An array, list or other collection implementing ICollection - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Assert that an array, list or other collection is empty - - An array, list or other collection implementing ICollection - The message to display in case of failure - - - - Assert that an array, list or other collection is empty - - An array, list or other collection implementing ICollection - - - - Assert that a string is not empty - that is not equal to string.Empty - - The string to be tested - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Assert that a string is not empty - that is not equal to string.Empty - - The string to be tested - The message to display in case of failure - - - - Assert that a string is not empty - that is not equal to string.Empty - - The string to be tested - - - - Assert that an array, list or other collection is not empty - - An array, list or other collection implementing ICollection - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Assert that an array, list or other collection is not empty - - An array, list or other collection implementing ICollection - The message to display in case of failure - - - - Assert that an array, list or other collection is not empty - - An array, list or other collection implementing ICollection - - - - Assert that a string is either null or equal to string.Empty - - The string to be tested - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Assert that a string is either null or equal to string.Empty - - The string to be tested - The message to display in case of failure - - - - Assert that a string is either null or equal to string.Empty - - The string to be tested - - - - Assert that a string is not null or empty - - The string to be tested - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Assert that a string is not null or empty - - The string to be tested - The message to display in case of failure - - - - Assert that a string is not null or empty - - The string to be tested - - - - Asserts that an object may be assigned a value of a given Type. - - The expected Type. - The object under examination - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Asserts that an object may be assigned a value of a given Type. - - The expected Type. - The object under examination - The message to display in case of failure - - - - Asserts that an object may be assigned a value of a given Type. - - The expected Type. - The object under examination - - - - Asserts that an object may be assigned a value of a given Type. - - The expected Type. - The object under examination - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Asserts that an object may be assigned a value of a given Type. - - The expected Type. - The object under examination - The message to display in case of failure - - - - Asserts that an object may be assigned a value of a given Type. - - The expected Type. - The object under examination - - - - Asserts that an object may not be assigned a value of a given Type. - - The expected Type. - The object under examination - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Asserts that an object may not be assigned a value of a given Type. - - The expected Type. - The object under examination - The message to display in case of failure - - - - Asserts that an object may not be assigned a value of a given Type. - - The expected Type. - The object under examination - - - - Asserts that an object may not be assigned a value of a given Type. - - The expected Type. - The object under examination - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Asserts that an object may not be assigned a value of a given Type. - - The expected Type. - The object under examination - The message to display in case of failure - - - - Asserts that an object may not be assigned a value of a given Type. - - The expected Type. - The object under examination - - - - Asserts that an object is an instance of a given type. - - The expected Type - The object being examined - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Asserts that an object is an instance of a given type. - - The expected Type - The object being examined - The message to display in case of failure - - - - Asserts that an object is an instance of a given type. - - The expected Type - The object being examined - - - - Asserts that an object is an instance of a given type. - - The expected Type - The object being examined - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Asserts that an object is an instance of a given type. - - The expected Type - The object being examined - The message to display in case of failure - - - - Asserts that an object is an instance of a given type. - - The expected Type - The object being examined - - - - Asserts that an object is an instance of a given type. - - The expected Type - The object being examined - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Asserts that an object is an instance of a given type. - - The expected Type - The object being examined - The message to display in case of failure - - - - Asserts that an object is an instance of a given type. - - The expected Type - The object being examined - - - - Asserts that an object is not an instance of a given type. - - The expected Type - The object being examined - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Asserts that an object is not an instance of a given type. - - The expected Type - The object being examined - The message to display in case of failure - - - - Asserts that an object is not an instance of a given type. - - The expected Type - The object being examined - - - - Asserts that an object is not an instance of a given type. - - The expected Type - The object being examined - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Asserts that an object is not an instance of a given type. - - The expected Type - The object being examined - The message to display in case of failure - - - - Asserts that an object is not an instance of a given type. - - The expected Type - The object being examined - - - - Asserts that an object is not an instance of a given type. - - The expected Type - The object being examined - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Asserts that an object is not an instance of a given type. - - The expected Type - The object being examined - The message to display in case of failure - - - - Asserts that an object is not an instance of a given type. - - The expected Type - The object being examined - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - - - - Verifies that two doubles are equal considering a delta. If the - expected value is infinity then the delta value is ignored. If - they are not equal then an is - thrown. - - The expected value - The actual value - The maximum acceptable difference between the - the expected and the actual - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two doubles are equal considering a delta. If the - expected value is infinity then the delta value is ignored. If - they are not equal then an is - thrown. - - The expected value - The actual value - The maximum acceptable difference between the - the expected and the actual - The message to display in case of failure - - - - Verifies that two doubles are equal considering a delta. If the - expected value is infinity then the delta value is ignored. If - they are not equal then an is - thrown. - - The expected value - The actual value - The maximum acceptable difference between the - the expected and the actual - - - - Verifies that two doubles are equal considering a delta. If the - expected value is infinity then the delta value is ignored. If - they are not equal then an is - thrown. - - The expected value - The actual value - The maximum acceptable difference between the - the expected and the actual - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two doubles are equal considering a delta. If the - expected value is infinity then the delta value is ignored. If - they are not equal then an is - thrown. - - The expected value - The actual value - The maximum acceptable difference between the - the expected and the actual - The message to display in case of failure - - - - Verifies that two doubles are equal considering a delta. If the - expected value is infinity then the delta value is ignored. If - they are not equal then an is - thrown. - - The expected value - The actual value - The maximum acceptable difference between the - the expected and the actual - - - - Verifies that two objects are equal. Two objects are considered - equal if both are null, or if both have the same value. NUnit - has special semantics for some object types. - If they are not equal an is thrown. - - The value that is expected - The actual value - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two objects are equal. Two objects are considered - equal if both are null, or if both have the same value. NUnit - has special semantics for some object types. - If they are not equal an is thrown. - - The value that is expected - The actual value - The message to display in case of failure - - - - Verifies that two objects are equal. Two objects are considered - equal if both are null, or if both have the same value. NUnit - has special semantics for some object types. - If they are not equal an is thrown. - - The value that is expected - The actual value - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - - - - Verifies that two objects are not equal. Two objects are considered - equal if both are null, or if both have the same value. NUnit - has special semantics for some object types. - If they are equal an is thrown. - - The value that is expected - The actual value - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two objects are not equal. Two objects are considered - equal if both are null, or if both have the same value. NUnit - has special semantics for some object types. - If they are equal an is thrown. - - The value that is expected - The actual value - The message to display in case of failure - - - - Verifies that two objects are not equal. Two objects are considered - equal if both are null, or if both have the same value. NUnit - has special semantics for some object types. - If they are equal an is thrown. - - The value that is expected - The actual value - - - - Asserts that two objects refer to the same object. If they - are not the same an is thrown. - - The expected object - The actual object - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Asserts that two objects refer to the same object. If they - are not the same an is thrown. - - The expected object - The actual object - The message to display in case of failure - - - - Asserts that two objects refer to the same object. If they - are not the same an is thrown. - - The expected object - The actual object - - - - Asserts that two objects do not refer to the same object. If they - are the same an is thrown. - - The expected object - The actual object - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Asserts that two objects do not refer to the same object. If they - are the same an is thrown. - - The expected object - The actual object - The message to display in case of failure - - - - Asserts that two objects do not refer to the same object. If they - are the same an is thrown. - - The expected object - The actual object - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - - - - Asserts that an object is contained in a list. - - The expected object - The list to be examined - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Asserts that an object is contained in a list. - - The expected object - The list to be examined - The message to display in case of failure - - - - Asserts that an object is contained in a list. - - The expected object - The list to be examined - - - - Gets the number of assertions executed so far and - resets the counter to zero. - - - - - RequiredAddinAttribute may be used to indicate the names of any addins - that must be present in order to run some or all of the tests in an - assembly. If the addin is not loaded, the entire assembly is marked - as NotRunnable. - - - - - Initializes a new instance of the class. - - The required addin. - - - - Gets the name of required addin. - - The required addin name. - - - - Marks a test to use a combinatorial join of any argument - data provided. Since this is the default, the attribute is - not needed. - - - - - PropertyAttribute is used to attach information to a test as a name/value pair.. - - - - - Construct a PropertyAttribute with a name and string value - - The name of the property - The property value - - - - Construct a PropertyAttribute with a name and int value - - The name of the property - The property value - - - - Construct a PropertyAttribute with a name and double value - - The name of the property - The property value - - - - Constructor for derived classes that set the - property dictionary directly. - - - - - Constructor for use by derived classes that use the - name of the type as the property name. Derived classes - must ensure that the Type of the property value is - a standard type supported by the BCL. Any custom - types will cause a serialization Exception when - in the client. - - - - - Gets the property dictionary for this attribute - - - - - Default constructor - - - - - Marks a test to use a combinatorial join of any argument - data provided. Since this is the default, the attribute is - not needed. - - - - - Default constructor - - - - - Marks a test to use a combinatorial join of any argument - data provided. Since this is the default, the attribute is - not needed. - - - - - Default constructor - - - - - Adding this attribute to a method within a - class makes the method callable from the NUnit test runner. There is a property - called Description which is optional which you can provide a more detailed test - description. This class cannot be inherited. - - - - [TestFixture] - public class Fixture - { - [Test] - public void MethodToTest() - {} - - [Test(Description = "more detailed description")] - publc void TestDescriptionMethod() - {} - } - - - - - - Descriptive text for this test - - - - - [TestFixture] - public class ExampleClass - {} - - - - - Default constructor - - - - - Construct with a object[] representing a set of arguments. - In .NET 2.0, the arguments may later be separated into - type arguments and constructor arguments. - - - - - - Descriptive text for this fixture - - - - - The arguments originally provided to the attribute - - - - - Get or set the type arguments. If not set - explicitly, any leading arguments that are - Types are taken as type arguments. - - - - - A set of Assert methods operationg on one or more collections - - - - - The Equals method throws an AssertionException. This is done - to make sure there is no mistake by calling this function. - - - - - - - override the default ReferenceEquals to throw an AssertionException. This - implementation makes sure there is no mistake in calling this function - as part of Assert. - - - - - - - Asserts that all items contained in collection are of the type specified by expectedType. - - IEnumerable containing objects to be considered - System.Type that all objects in collection must be instances of - - - - Asserts that all items contained in collection are of the type specified by expectedType. - - IEnumerable containing objects to be considered - System.Type that all objects in collection must be instances of - The message that will be displayed on failure - - - - Asserts that all items contained in collection are of the type specified by expectedType. - - IEnumerable containing objects to be considered - System.Type that all objects in collection must be instances of - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Asserts that all items contained in collection are not equal to null. - - IEnumerable containing objects to be considered - - - - Asserts that all items contained in collection are not equal to null. - - IEnumerable containing objects to be considered - The message that will be displayed on failure - - - - Asserts that all items contained in collection are not equal to null. - - IEnumerable of objects to be considered - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Ensures that every object contained in collection exists within the collection - once and only once. - - IEnumerable of objects to be considered - - - - Ensures that every object contained in collection exists within the collection - once and only once. - - IEnumerable of objects to be considered - The message that will be displayed on failure - - - - Ensures that every object contained in collection exists within the collection - once and only once. - - IEnumerable of objects to be considered - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Asserts that expected and actual are exactly equal. The collections must have the same count, - and contain the exact same objects in the same order. - - The first IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - - - - Asserts that expected and actual are exactly equal. The collections must have the same count, - and contain the exact same objects in the same order. - If comparer is not null then it will be used to compare the objects. - - The first IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - The IComparer to use in comparing objects from each IEnumerable - - - - Asserts that expected and actual are exactly equal. The collections must have the same count, - and contain the exact same objects in the same order. - - The first IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - The message that will be displayed on failure - - - - Asserts that expected and actual are exactly equal. The collections must have the same count, - and contain the exact same objects in the same order. - If comparer is not null then it will be used to compare the objects. - - The first IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - The IComparer to use in comparing objects from each IEnumerable - The message that will be displayed on failure - - - - Asserts that expected and actual are exactly equal. The collections must have the same count, - and contain the exact same objects in the same order. - - The first IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Asserts that expected and actual are exactly equal. The collections must have the same count, - and contain the exact same objects in the same order. - If comparer is not null then it will be used to compare the objects. - - The first IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - The IComparer to use in comparing objects from each IEnumerable - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Asserts that expected and actual are equivalent, containing the same objects but the match may be in any order. - - The first IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - - - - Asserts that expected and actual are equivalent, containing the same objects but the match may be in any order. - - The first IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - The message that will be displayed on failure - - - - Asserts that expected and actual are equivalent, containing the same objects but the match may be in any order. - - The first IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Asserts that expected and actual are not exactly equal. - - The first IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - - - - Asserts that expected and actual are not exactly equal. - If comparer is not null then it will be used to compare the objects. - - The first IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - The IComparer to use in comparing objects from each IEnumerable - - - - Asserts that expected and actual are not exactly equal. - - The first IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - The message that will be displayed on failure - - - - Asserts that expected and actual are not exactly equal. - If comparer is not null then it will be used to compare the objects. - - The first IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - The IComparer to use in comparing objects from each IEnumerable - The message that will be displayed on failure - - - - Asserts that expected and actual are not exactly equal. - - The first IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Asserts that expected and actual are not exactly equal. - If comparer is not null then it will be used to compare the objects. - - The first IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - The IComparer to use in comparing objects from each IEnumerable - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Asserts that expected and actual are not equivalent. - - The first IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - - - - Asserts that expected and actual are not equivalent. - - The first IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - The message that will be displayed on failure - - - - Asserts that expected and actual are not equivalent. - - The first IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Asserts that collection contains actual as an item. - - IEnumerable of objects to be considered - Object to be found within collection - - - - Asserts that collection contains actual as an item. - - IEnumerable of objects to be considered - Object to be found within collection - The message that will be displayed on failure - - - - Asserts that collection contains actual as an item. - - IEnumerable of objects to be considered - Object to be found within collection - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Asserts that collection does not contain actual as an item. - - IEnumerable of objects to be considered - Object that cannot exist within collection - - - - Asserts that collection does not contain actual as an item. - - IEnumerable of objects to be considered - Object that cannot exist within collection - The message that will be displayed on failure - - - - Asserts that collection does not contain actual as an item. - - IEnumerable of objects to be considered - Object that cannot exist within collection - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Asserts that superset is not a subject of subset. - - The IEnumerable superset to be considered - The IEnumerable subset to be considered - - - - Asserts that superset is not a subject of subset. - - The IEnumerable superset to be considered - The IEnumerable subset to be considered - The message that will be displayed on failure - - - - Asserts that superset is not a subject of subset. - - The IEnumerable superset to be considered - The IEnumerable subset to be considered - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Asserts that superset is a subset of subset. - - The IEnumerable superset to be considered - The IEnumerable subset to be considered - - - - Asserts that superset is a subset of subset. - - The IEnumerable superset to be considered - The IEnumerable subset to be considered - The message that will be displayed on failure - - - - Asserts that superset is a subset of subset. - - The IEnumerable superset to be considered - The IEnumerable subset to be considered - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Assert that an array, list or other collection is empty - - An array, list or other collection implementing IEnumerable - The message to be displayed on failure - Arguments to be used in formatting the message - - - - Assert that an array, list or other collection is empty - - An array, list or other collection implementing IEnumerable - The message to be displayed on failure - - - - Assert that an array,list or other collection is empty - - An array, list or other collection implementing IEnumerable - - - - Assert that an array, list or other collection is empty - - An array, list or other collection implementing IEnumerable - The message to be displayed on failure - Arguments to be used in formatting the message - - - - Assert that an array, list or other collection is empty - - An array, list or other collection implementing IEnumerable - The message to be displayed on failure - - - - Assert that an array,list or other collection is empty - - An array, list or other collection implementing IEnumerable - - - - Assert that an array, list or other collection is ordered - - An array, list or other collection implementing IEnumerable - The message to be displayed on failure - Arguments to be used in formatting the message - - - - Assert that an array, list or other collection is ordered - - An array, list or other collection implementing IEnumerable - The message to be displayed on failure - - - - Assert that an array, list or other collection is ordered - - An array, list or other collection implementing IEnumerable - - - - Assert that an array, list or other collection is ordered - - An array, list or other collection implementing IEnumerable - A custom comparer to perform the comparisons - The message to be displayed on failure - Arguments to be used in formatting the message - - - - Assert that an array, list or other collection is ordered - - An array, list or other collection implementing IEnumerable - A custom comparer to perform the comparisons - The message to be displayed on failure - - - - Assert that an array, list or other collection is ordered - - An array, list or other collection implementing IEnumerable - A custom comparer to perform the comparisons - - - - Abstract base class for attributes that apply to parameters - and supply data for the parameter. - - - - - Gets the data to be provided to the specified parameter - - - - - ValuesAttribute is used to provide literal arguments for - an individual parameter of a test. - - - - - The collection of data to be returned. Must - be set by any derived attribute classes. - - - - - Construct with one argument - - - - - - Construct with two arguments - - - - - - - Construct with three arguments - - - - - - - - Construct with an array of arguments - - - - - - Get the collection of values to be used as arguments - - - - - Thrown when an assertion failed. - - - - - The error message that explains - the reason for the exception - - - The error message that explains - the reason for the exception - The exception that caused the - current exception - - - - Serialization Constructor - - - - - Marks a test with a timeout value in milliseconds. The - test will be run in a separate thread and cancelled if - the timeout is exceeded. - - - - - Construct a TimeoutAttribute given a time in milliseconds - - - - - - Marks a test that must run in the STA, causing it - to run in a separate thread if necessary. - - On methods, you may also use STAThreadAttribute - to serve the same purpose. - - - - - Construct a RequiresSTAAttribute - - - - - Marks a test that must run in the MTA, causing it - to run in a separate thread if necessary. - - On methods, you may also use MTAThreadAttribute - to serve the same purpose. - - - - - Construct a RequiresMTAAttribute - - - - - Marks a test that must run on a separate thread. - - - - - Construct a RequiresThreadAttribute - - - - - Construct a RequiresThreadAttribute, specifying the apartment - - - - - AssertionHelper is an optional base class for user tests, - allowing the use of shorter names for constraints and - asserts and avoiding conflict with the definition of - , from which it inherits much of its - behavior, in certain mock object frameworks. - - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. Works - identically to - - A Constraint to be applied - The actual value to test - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. Works - identically to - - A Constraint to be applied - The actual value to test - The message that will be displayed on failure - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. Works - identically to - - A Constraint to be applied - The actual value to test - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. - - A Constraint expression to be applied - An ActualValueDelegate returning the value to be tested - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. - - A Constraint expression to be applied - An ActualValueDelegate returning the value to be tested - The message that will be displayed on failure - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. - - An ActualValueDelegate returning the value to be tested - A Constraint expression to be applied - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Apply a constraint to a referenced value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. - - A Constraint to be applied - The actual value to test - - - - Apply a constraint to a referenced value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. - - A Constraint to be applied - The actual value to test - The message that will be displayed on failure - - - - Apply a constraint to a referenced value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. - - A Constraint to be applied - The actual value to test - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Asserts that a condition is true. If the condition is false the method throws - an . Works Identically to - . - - The evaluated condition - The message to display if the condition is false - Arguments to be used in formatting the message - - - - Asserts that a condition is true. If the condition is false the method throws - an . Works Identically to - . - - The evaluated condition - The message to display if the condition is false - - - - Asserts that a condition is true. If the condition is false the method throws - an . Works Identically to . - - The evaluated condition - - - - Asserts that the code represented by a delegate throws an exception - that satisfies the constraint provided. - - A TestDelegate to be executed - A ThrowsConstraint used in the test - - - - Returns a ListMapper based on a collection. - - The original collection - - - - - Attribute used to apply a category to a test - - - - - The name of the category - - - - - Construct attribute for a given category - - The name of the category - - - - Protected constructor uses the Type name as the name - of the category. - - - - - The name of the category - - - - - RandomAttribute is used to supply a set of random values - to a single parameter of a parameterized test. - - - - - Construct a set of doubles from 0.0 to 1.0, - specifying only the count. - - - - - - Construct a set of doubles from min to max - - - - - - - - Construct a set of ints from min to max - - - - - - - - Get the collection of values to be used as arguments - - - - - Attribute used to provide descriptive text about a - test case or fixture. - - - - - Construct the attribute - - Text describing the test - - - - Gets the test description - - - - - ExplicitAttribute marks a test or test fixture so that it will - only be run if explicitly executed from the gui or command line - or if it is included by use of a filter. The test will not be - run simply because an enclosing suite is run. - - - - - Default constructor - - - - - Constructor with a reason - - The reason test is marked explicit - - - - The reason test is marked explicit - - - - - Provides static methods to express the assumptions - that must be met for a test to give a meaningful - result. If an assumption is not met, the test - should produce an inconclusive result. - - - - - The Equals method throws an AssertionException. This is done - to make sure there is no mistake by calling this function. - - - - - - - override the default ReferenceEquals to throw an AssertionException. This - implementation makes sure there is no mistake in calling this function - as part of Assert. - - - - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an InconclusiveException on failure. - - A Constraint expression to be applied - The actual value to test - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an InconclusiveException on failure. - - A Constraint expression to be applied - The actual value to test - The message that will be displayed on failure - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an InconclusiveException on failure. - - A Constraint expression to be applied - The actual value to test - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an InconclusiveException on failure. - - A Constraint expression to be applied - An ActualValueDelegate returning the value to be tested - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an InconclusiveException on failure. - - A Constraint expression to be applied - An ActualValueDelegate returning the value to be tested - The message that will be displayed on failure - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an InconclusiveException on failure. - - An ActualValueDelegate returning the value to be tested - A Constraint expression to be applied - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Apply a constraint to a referenced value, succeeding if the constraint - is satisfied and throwing an InconclusiveException on failure. - - A Constraint expression to be applied - The actual value to test - - - - Apply a constraint to a referenced value, succeeding if the constraint - is satisfied and throwing an InconclusiveException on failure. - - A Constraint expression to be applied - The actual value to test - The message that will be displayed on failure - - - - Apply a constraint to a referenced value, succeeding if the constraint - is satisfied and throwing an InconclusiveException on failure. - - A Constraint expression to be applied - The actual value to test - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Asserts that a condition is true. If the condition is false the method throws - an . - - The evaluated condition - The message to display if the condition is false - Arguments to be used in formatting the message - - - - Asserts that a condition is true. If the condition is false the method throws - an . - - The evaluated condition - The message to display if the condition is false - - - - Asserts that a condition is true. If the condition is false the - method throws an . - - The evaluated condition - - - - Asserts that the code represented by a delegate throws an exception - that satisfies the constraint provided. - - A TestDelegate to be executed - A ThrowsConstraint used in the test - - - - GlobalSettings is a place for setting default values used - by the framework in performing asserts. - - - - - Default tolerance for floating point equality - - - - - Helper class with properties and methods that supply - a number of constraints used in Asserts. - - - - - Returns a constraint that tests two items for equality - - - - - Returns a constraint that tests that two references are the same object - - - - - Returns a constraint that tests whether the - actual value is greater than the suppled argument - - - - - Returns a constraint that tests whether the - actual value is greater than the suppled argument - - - - - Returns a constraint that tests whether the - actual value is greater than the suppled argument - - - - - Returns a constraint that tests whether the - actual value is greater than the suppled argument - - - - - Returns a constraint that tests whether the - actual value is greater than the suppled argument - - - - - Returns a constraint that tests whether the - actual value is greater than the suppled argument - - - - - Returns a constraint that tests whether the actual - value is of the exact type supplied as an argument. - - - - - Returns a constraint that tests whether the actual - value is of the exact type supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is of the type supplied as an argument or a derived type. - - - - - Returns a constraint that tests whether the actual value - is of the type supplied as an argument or a derived type. - - - - - Returns a constraint that tests whether the actual value - is of the type supplied as an argument or a derived type. - - - - - Returns a constraint that tests whether the actual value - is of the type supplied as an argument or a derived type. - - - - - Returns a constraint that tests whether the actual value - is assignable from the type supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is assignable from the type supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is assignable from the type supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is assignable from the type supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is a collection containing the same elements as the - collection supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is a subset of the collection supplied as an argument. - - - - - Returns a constraint that tests whether the path provided - is the same as an expected path after canonicalization. - - - - - Returns a constraint that tests whether the path provided - is the same path or under an expected path after canonicalization. - - - - - Returns a constraint that tests whether the actual value falls - within a specified range. - - - - - Returns a ConstraintExpression that negates any - following constraint. - - - - - Returns a ConstraintExpression, which will apply - the following constraint to all members of a collection, - succeeding if all of them succeed. - - - - - Returns a constraint that tests for null - - - - - Returns a constraint that tests for True - - - - - Returns a constraint that tests for False - - - - - Returns a constraint that tests for NaN - - - - - Returns a constraint that tests for empty - - - - - Returns a constraint that tests whether a collection - contains all unique items. - - - - - Returns a constraint that tests whether an object graph is serializable in binary format. - - - - - Returns a constraint that tests whether an object graph is serializable in xml format. - - - - - Returns a constraint that tests whether a collection is ordered - - - - - Interface implemented by a user fixture in order to - validate any expected exceptions. It is only called - for test methods marked with the ExpectedException - attribute. - - - - - Method to handle an expected exception - - The exception to be handled - - - - Attribute used to mark a test that is to be ignored. - Ignored tests result in a warning message when the - tests are run. - - - - - Constructs the attribute without giving a reason - for ignoring the test. - - - - - Constructs the attribute giving a reason for ignoring the test - - The reason for ignoring the test - - - - The reason for ignoring a test - - - - - Thrown when an assertion failed. - - - - - - - The error message that explains - the reason for the exception - The exception that caused the - current exception - - - - Serialization Constructor - - - - - Abstract base for Attributes that are used to include tests - in the test run based on environmental settings. - - - - - Constructor with no included items specified, for use - with named property syntax. - - - - - Constructor taking one or more included items - - Comma-delimited list of included items - - - - Name of the item that is needed in order for - a test to run. Multiple itemss may be given, - separated by a comma. - - - - - Name of the item to be excluded. Multiple items - may be given, separated by a comma. - - - - - The reason for including or excluding the test - - - - - PlatformAttribute is used to mark a test fixture or an - individual method as applying to a particular platform only. - - - - - Constructor with no platforms specified, for use - with named property syntax. - - - - - Constructor taking one or more platforms - - Comma-deliminted list of platforms - - - - CultureAttribute is used to mark a test fixture or an - individual method as applying to a particular Culture only. - - - - - Constructor with no cultures specified, for use - with named property syntax. - - - - - Constructor taking one or more cultures - - Comma-deliminted list of cultures - - - - RangeAttribute is used to supply a range of values to an - individual parameter of a parameterized test. - - - - - Construct a range of ints using default step of 1 - - - - - - - Construct a range of ints specifying the step size - - - - - - - - Construct a range of longs - - - - - - - - Construct a range of doubles - - - - - - - - Construct a range of floats - - - - - - - - Summary description for SetCultureAttribute. - - - - - Construct given the name of a culture - - - - - - ValueSourceAttribute indicates the source to be used to - provide data for one parameter of a test method. - - - - - Construct with the name of the factory - for use with languages - that don't support params arrays. - - The name of the data source to be used - - - - Construct with a Type and name - for use with languages - that don't support params arrays. - - The Type that will provide data - The name of the method, property or field that will provide data - - - - The name of a the method, property or fiend to be used as a source - - - - - A Type to be used as a source - - - - - TextMessageWriter writes constraint descriptions and messages - in displayable form as a text stream. It tailors the display - of individual message components to form the standard message - format of NUnit assertion failure messages. - - - - - Prefix used for the expected value line of a message - - - - - Prefix used for the actual value line of a message - - - - - Length of a message prefix - - - - - Construct a TextMessageWriter - - - - - Construct a TextMessageWriter, specifying a user message - and optional formatting arguments. - - - - - - - Method to write single line message with optional args, usually - written to precede the general failure message, at a givel - indentation level. - - The indentation level of the message - The message to be written - Any arguments used in formatting the message - - - - Display Expected and Actual lines for a constraint. This - is called by MessageWriter's default implementation of - WriteMessageTo and provides the generic two-line display. - - The constraint that failed - - - - Display Expected and Actual lines for given values. This - method may be called by constraints that need more control over - the display of actual and expected values than is provided - by the default implementation. - - The expected value - The actual value causing the failure - - - - Display Expected and Actual lines for given values, including - a tolerance value on the expected line. - - The expected value - The actual value causing the failure - The tolerance within which the test was made - - - - Display the expected and actual string values on separate lines. - If the mismatch parameter is >=0, an additional line is displayed - line containing a caret that points to the mismatch point. - - The expected string value - The actual string value - The point at which the strings don't match or -1 - If true, case is ignored in string comparisons - If true, clip the strings to fit the max line length - - - - Writes the text for a connector. - - The connector. - - - - Writes the text for a predicate. - - The predicate. - - - - Write the text for a modifier. - - The modifier. - - - - Writes the text for an expected value. - - The expected value. - - - - Writes the text for an actual value. - - The actual value. - - - - Writes the text for a generalized value. - - The value. - - - - Writes the text for a collection value, - starting at a particular point, to a max length - - The collection containing elements to write. - The starting point of the elements to write - The maximum number of elements to write - - - - Write the generic 'Expected' line for a constraint - - The constraint that failed - - - - Write the generic 'Expected' line for a given value - - The expected value - - - - Write the generic 'Expected' line for a given value - and tolerance. - - The expected value - The tolerance within which the test was made - - - - Write the generic 'Actual' line for a constraint - - The constraint for which the actual value is to be written - - - - Write the generic 'Actual' line for a given value - - The actual value causing a failure - - - - Gets or sets the maximum line length for this writer - - - - - Basic Asserts on strings. - - - - - The Equals method throws an AssertionException. This is done - to make sure there is no mistake by calling this function. - - - - - - - override the default ReferenceEquals to throw an AssertionException. This - implementation makes sure there is no mistake in calling this function - as part of Assert. - - - - - - - Asserts that a string is found within another string. - - The expected string - The string to be examined - The message to display in case of failure - Arguments used in formatting the message - - - - Asserts that a string is found within another string. - - The expected string - The string to be examined - The message to display in case of failure - - - - Asserts that a string is found within another string. - - The expected string - The string to be examined - - - - Asserts that a string is not found within another string. - - The expected string - The string to be examined - The message to display in case of failure - Arguments used in formatting the message - - - - Asserts that a string is found within another string. - - The expected string - The string to be examined - The message to display in case of failure - - - - Asserts that a string is found within another string. - - The expected string - The string to be examined - - - - Asserts that a string starts with another string. - - The expected string - The string to be examined - The message to display in case of failure - Arguments used in formatting the message - - - - Asserts that a string starts with another string. - - The expected string - The string to be examined - The message to display in case of failure - - - - Asserts that a string starts with another string. - - The expected string - The string to be examined - - - - Asserts that a string does not start with another string. - - The expected string - The string to be examined - The message to display in case of failure - Arguments used in formatting the message - - - - Asserts that a string does not start with another string. - - The expected string - The string to be examined - The message to display in case of failure - - - - Asserts that a string does not start with another string. - - The expected string - The string to be examined - - - - Asserts that a string ends with another string. - - The expected string - The string to be examined - The message to display in case of failure - Arguments used in formatting the message - - - - Asserts that a string ends with another string. - - The expected string - The string to be examined - The message to display in case of failure - - - - Asserts that a string ends with another string. - - The expected string - The string to be examined - - - - Asserts that a string does not end with another string. - - The expected string - The string to be examined - The message to display in case of failure - Arguments used in formatting the message - - - - Asserts that a string does not end with another string. - - The expected string - The string to be examined - The message to display in case of failure - - - - Asserts that a string does not end with another string. - - The expected string - The string to be examined - - - - Asserts that two strings are equal, without regard to case. - - The expected string - The actual string - The message to display in case of failure - Arguments used in formatting the message - - - - Asserts that two strings are equal, without regard to case. - - The expected string - The actual string - The message to display in case of failure - - - - Asserts that two strings are equal, without regard to case. - - The expected string - The actual string - - - - Asserts that two strings are not equal, without regard to case. - - The expected string - The actual string - The message to display in case of failure - Arguments used in formatting the message - - - - Asserts that two strings are Notequal, without regard to case. - - The expected string - The actual string - The message to display in case of failure - - - - Asserts that two strings are not equal, without regard to case. - - The expected string - The actual string - - - - Asserts that a string matches an expected regular expression pattern. - - The regex pattern to be matched - The actual string - The message to display in case of failure - Arguments used in formatting the message - - - - Asserts that a string matches an expected regular expression pattern. - - The regex pattern to be matched - The actual string - The message to display in case of failure - - - - Asserts that a string matches an expected regular expression pattern. - - The regex pattern to be matched - The actual string - - - - Asserts that a string does not match an expected regular expression pattern. - - The regex pattern to be used - The actual string - The message to display in case of failure - Arguments used in formatting the message - - - - Asserts that a string does not match an expected regular expression pattern. - - The regex pattern to be used - The actual string - The message to display in case of failure - - - - Asserts that a string does not match an expected regular expression pattern. - - The regex pattern to be used - The actual string - - - - Attribute used to mark a class that contains one-time SetUp - and/or TearDown methods that apply to all the tests in a - namespace or an assembly. - - - - - SetUpFixtureAttribute is used to identify a SetUpFixture - - - - - RepeatAttribute may be applied to test case in order - to run it multiple times. - - - - - Construct a RepeatAttribute - - The number of times to run the test - - - - Attribute used to mark a static (shared in VB) property - that returns a list of tests. - - - - - Attribute used to identify a method that is called - immediately after each test is run. The method is - guaranteed to be called, even if an exception is thrown. - - - - - The Iz class is a synonym for Is intended for use in VB, - which regards Is as a keyword. - - - - - Helper class with properties and methods that supply - constraints that operate on exceptions. - - - - - Creates a constraint specifying the exact type of exception expected - - - - - Creates a constraint specifying the exact type of exception expected - - - - - Creates a constraint specifying the type of exception expected - - - - - Creates a constraint specifying the type of exception expected - - - - - Creates a constraint specifying an expected exception - - - - - Creates a constraint specifying that no exception is thrown - - - - - ListMapper is used to transform a collection used as an actual argument - producing another collection to be used in the assertion. - - - - - Construct a ListMapper based on a collection - - The collection to be transformed - - - - Produces a collection containing all the values of a property - - The collection of property values - - - - - Attribute used to identify a method that is - called before any tests in a fixture are run. - - - - - Attribute used to identify a method that is called after - all the tests in a fixture have run. The method is - guaranteed to be called, even if an exception is thrown. - - - - - The Catch class is used to capture an exception. - - - - - Capture any exception that is thrown by the delegate - - A TestDelegate - The exception thrown, or null - - - - Helper class with static methods used to supply constraints - that operate on strings. - - - - - Returns a constraint that succeeds if the actual - value contains the substring supplied as an argument. - - - - - Returns a constraint that fails if the actual - value contains the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value starts with the substring supplied as an argument. - - - - - Returns a constraint that fails if the actual - value starts with the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value ends with the substring supplied as an argument. - - - - - Returns a constraint that fails if the actual - value ends with the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value matches the Regex pattern supplied as an argument. - - - - - Returns a constraint that fails if the actual - value matches the pattern supplied as an argument. - - - - - Returns a ConstraintExpression, which will apply - the following constraint to all members of a collection, - succeeding if all of them succeed. - - - - - Summary description for MaxTimeAttribute. - - - - - Construct a MaxTimeAttribute, given a time in milliseconds. - - The maximum elapsed time in milliseconds - - - - Summary description for DirectoryAssert - - - - - The Equals method throws an AssertionException. This is done - to make sure there is no mistake by calling this function. - - - - - - - override the default ReferenceEquals to throw an AssertionException. This - implementation makes sure there is no mistake in calling this function - as part of Assert. - - - - - - - We don't actually want any instances of this object, but some people - like to inherit from it to add other static methods. Hence, the - protected constructor disallows any instances of this object. - - - - - Verifies that two directories are equal. Two directories are considered - equal if both are null, or if both have the same value byte for byte. - If they are not equal an is thrown. - - A directory containing the value that is expected - A directory containing the actual value - The message to display if directories are not equal - Arguments to be used in formatting the message - - - - Verifies that two directories are equal. Two directories are considered - equal if both are null, or if both have the same value byte for byte. - If they are not equal an is thrown. - - A directory containing the value that is expected - A directory containing the actual value - The message to display if directories are not equal - - - - Verifies that two directories are equal. Two directories are considered - equal if both are null, or if both have the same value byte for byte. - If they are not equal an is thrown. - - A directory containing the value that is expected - A directory containing the actual value - - - - Verifies that two directories are equal. Two directories are considered - equal if both are null, or if both have the same value byte for byte. - If they are not equal an is thrown. - - A directory path string containing the value that is expected - A directory path string containing the actual value - The message to display if directories are not equal - Arguments to be used in formatting the message - - - - Verifies that two directories are equal. Two directories are considered - equal if both are null, or if both have the same value byte for byte. - If they are not equal an is thrown. - - A directory path string containing the value that is expected - A directory path string containing the actual value - The message to display if directories are not equal - - - - Verifies that two directories are equal. Two directories are considered - equal if both are null, or if both have the same value byte for byte. - If they are not equal an is thrown. - - A directory path string containing the value that is expected - A directory path string containing the actual value - - - - Asserts that two directories are not equal. If they are equal - an is thrown. - - A directory containing the value that is expected - A directory containing the actual value - The message to display if directories are not equal - Arguments to be used in formatting the message - - - - Asserts that two directories are not equal. If they are equal - an is thrown. - - A directory containing the value that is expected - A directory containing the actual value - The message to display if directories are not equal - - - - Asserts that two directories are not equal. If they are equal - an is thrown. - - A directory containing the value that is expected - A directory containing the actual value - - - - Asserts that two directories are not equal. If they are equal - an is thrown. - - A directory path string containing the value that is expected - A directory path string containing the actual value - The message to display if directories are equal - Arguments to be used in formatting the message - - - - Asserts that two directories are not equal. If they are equal - an is thrown. - - A directory path string containing the value that is expected - A directory path string containing the actual value - The message to display if directories are equal - - - - Asserts that two directories are not equal. If they are equal - an is thrown. - - A directory path string containing the value that is expected - A directory path string containing the actual value - - - - Asserts that the directory is empty. If it is not empty - an is thrown. - - A directory to search - The message to display if directories are not equal - Arguments to be used in formatting the message - - - - Asserts that the directory is empty. If it is not empty - an is thrown. - - A directory to search - The message to display if directories are not equal - - - - Asserts that the directory is empty. If it is not empty - an is thrown. - - A directory to search - - - - Asserts that the directory is empty. If it is not empty - an is thrown. - - A directory to search - The message to display if directories are not equal - Arguments to be used in formatting the message - - - - Asserts that the directory is empty. If it is not empty - an is thrown. - - A directory to search - The message to display if directories are not equal - - - - Asserts that the directory is empty. If it is not empty - an is thrown. - - A directory to search - - - - Asserts that the directory is not empty. If it is empty - an is thrown. - - A directory to search - The message to display if directories are not equal - Arguments to be used in formatting the message - - - - Asserts that the directory is not empty. If it is empty - an is thrown. - - A directory to search - The message to display if directories are not equal - - - - Asserts that the directory is not empty. If it is empty - an is thrown. - - A directory to search - - - - Asserts that the directory is not empty. If it is empty - an is thrown. - - A directory to search - The message to display if directories are not equal - Arguments to be used in formatting the message - - - - Asserts that the directory is not empty. If it is empty - an is thrown. - - A directory to search - The message to display if directories are not equal - - - - Asserts that the directory is not empty. If it is empty - an is thrown. - - A directory to search - - - - Asserts that path contains actual as a subdirectory or - an is thrown. - - A directory to search - sub-directory asserted to exist under directory - The message to display if directory is not within the path - Arguments to be used in formatting the message - - - - Asserts that path contains actual as a subdirectory or - an is thrown. - - A directory to search - sub-directory asserted to exist under directory - The message to display if directory is not within the path - - - - Asserts that path contains actual as a subdirectory or - an is thrown. - - A directory to search - sub-directory asserted to exist under directory - - - - Asserts that path contains actual as a subdirectory or - an is thrown. - - A directory to search - sub-directory asserted to exist under directory - The message to display if directory is not within the path - Arguments to be used in formatting the message - - - - Asserts that path contains actual as a subdirectory or - an is thrown. - - A directory to search - sub-directory asserted to exist under directory - The message to display if directory is not within the path - - - - Asserts that path contains actual as a subdirectory or - an is thrown. - - A directory to search - sub-directory asserted to exist under directory - - - - Asserts that path does not contain actual as a subdirectory or - an is thrown. - - A directory to search - sub-directory asserted to exist under directory - The message to display if directory is not within the path - Arguments to be used in formatting the message - - - - Asserts that path does not contain actual as a subdirectory or - an is thrown. - - A directory to search - sub-directory asserted to exist under directory - The message to display if directory is not within the path - - - - Asserts that path does not contain actual as a subdirectory or - an is thrown. - - A directory to search - sub-directory asserted to exist under directory - - - - Asserts that path does not contain actual as a subdirectory or - an is thrown. - - A directory to search - sub-directory asserted to exist under directory - The message to display if directory is not within the path - Arguments to be used in formatting the message - - - - Asserts that path does not contain actual as a subdirectory or - an is thrown. - - A directory to search - sub-directory asserted to exist under directory - The message to display if directory is not within the path - - - - Asserts that path does not contain actual as a subdirectory or - an is thrown. - - A directory to search - sub-directory asserted to exist under directory - - - - The SpecialValue enum is used to represent TestCase arguments - that cannot be used as arguments to an Attribute. - - - - - Null represents a null value, which cannot be used as an - argument to an attriute under .NET 1.x - - - - - Summary description for FileAssert. - - - - - The Equals method throws an AssertionException. This is done - to make sure there is no mistake by calling this function. - - - - - - - override the default ReferenceEquals to throw an AssertionException. This - implementation makes sure there is no mistake in calling this function - as part of Assert. - - - - - - - We don't actually want any instances of this object, but some people - like to inherit from it to add other static methods. Hence, the - protected constructor disallows any instances of this object. - - - - - Verifies that two Streams are equal. Two Streams are considered - equal if both are null, or if both have the same value byte for byte. - If they are not equal an is thrown. - - The expected Stream - The actual Stream - The message to display if Streams are not equal - Arguments to be used in formatting the message - - - - Verifies that two Streams are equal. Two Streams are considered - equal if both are null, or if both have the same value byte for byte. - If they are not equal an is thrown. - - The expected Stream - The actual Stream - The message to display if objects are not equal - - - - Verifies that two Streams are equal. Two Streams are considered - equal if both are null, or if both have the same value byte for byte. - If they are not equal an is thrown. - - The expected Stream - The actual Stream - - - - Verifies that two files are equal. Two files are considered - equal if both are null, or if both have the same value byte for byte. - If they are not equal an is thrown. - - A file containing the value that is expected - A file containing the actual value - The message to display if Streams are not equal - Arguments to be used in formatting the message - - - - Verifies that two files are equal. Two files are considered - equal if both are null, or if both have the same value byte for byte. - If they are not equal an is thrown. - - A file containing the value that is expected - A file containing the actual value - The message to display if objects are not equal - - - - Verifies that two files are equal. Two files are considered - equal if both are null, or if both have the same value byte for byte. - If they are not equal an is thrown. - - A file containing the value that is expected - A file containing the actual value - - - - Verifies that two files are equal. Two files are considered - equal if both are null, or if both have the same value byte for byte. - If they are not equal an is thrown. - - The path to a file containing the value that is expected - The path to a file containing the actual value - The message to display if Streams are not equal - Arguments to be used in formatting the message - - - - Verifies that two files are equal. Two files are considered - equal if both are null, or if both have the same value byte for byte. - If they are not equal an is thrown. - - The path to a file containing the value that is expected - The path to a file containing the actual value - The message to display if objects are not equal - - - - Verifies that two files are equal. Two files are considered - equal if both are null, or if both have the same value byte for byte. - If they are not equal an is thrown. - - The path to a file containing the value that is expected - The path to a file containing the actual value - - - - Asserts that two Streams are not equal. If they are equal - an is thrown. - - The expected Stream - The actual Stream - The message to be displayed when the two Stream are the same. - Arguments to be used in formatting the message - - - - Asserts that two Streams are not equal. If they are equal - an is thrown. - - The expected Stream - The actual Stream - The message to be displayed when the Streams are the same. - - - - Asserts that two Streams are not equal. If they are equal - an is thrown. - - The expected Stream - The actual Stream - - - - Asserts that two files are not equal. If they are equal - an is thrown. - - A file containing the value that is expected - A file containing the actual value - The message to display if Streams are not equal - Arguments to be used in formatting the message - - - - Asserts that two files are not equal. If they are equal - an is thrown. - - A file containing the value that is expected - A file containing the actual value - The message to display if objects are not equal - - - - Asserts that two files are not equal. If they are equal - an is thrown. - - A file containing the value that is expected - A file containing the actual value - - - - Asserts that two files are not equal. If they are equal - an is thrown. - - The path to a file containing the value that is expected - The path to a file containing the actual value - The message to display if Streams are not equal - Arguments to be used in formatting the message - - - - Asserts that two files are not equal. If they are equal - an is thrown. - - The path to a file containing the value that is expected - The path to a file containing the actual value - The message to display if objects are not equal - - - - Asserts that two files are not equal. If they are equal - an is thrown. - - The path to a file containing the value that is expected - The path to a file containing the actual value - - - - Adding this attribute to a method within a - class makes the method callable from the NUnit test runner. There is a property - called Description which is optional which you can provide a more detailed test - description. This class cannot be inherited. - - - - [TestFixture] - public class Fixture - { - [Test] - public void MethodToTest() - {} - - [Test(Description = "more detailed description")] - publc void TestDescriptionMethod() - {} - } - - - - - - Randomizer returns a set of random values in a repeatable - way, to allow re-running of tests if necessary. - - - - - Get a randomizer for a particular member, returning - one that has already been created if it exists. - This ensures that the same values are generated - each time the tests are reloaded. - - - - - Get a randomizer for a particular parameter, returning - one that has already been created if it exists. - This ensures that the same values are generated - each time the tests are reloaded. - - - - - Construct a randomizer using a random seed - - - - - Construct a randomizer using a specified seed - - - - - Return an array of random doubles between 0.0 and 1.0. - - - - - - - Return an array of random doubles with values in a specified range. - - - - - Return an array of random ints with values in a specified range. - - - - - Get a random seed for use in creating a randomizer. - - - - - Used to mark a field for use as a datapoint when executing a theory - within the same fixture that requires an argument of the field's Type. - - - - - Used to mark an array as containing a set of datapoints to be used - executing a theory within the same fixture that requires an argument - of the Type of the array elements. - - - - diff --git a/build.cake b/build.cake new file mode 100644 index 000000000..cdf017cf4 --- /dev/null +++ b/build.cake @@ -0,0 +1,332 @@ +// ADDINS +#addin nuget:?package=Cake.Coveralls&version=1.1.0 +#addin nuget:?package=Cake.FileHelpers&version=4.0.1 +#addin nuget:?package=Cake.AppVeyor&version=5.0.1 +#addin nuget:?package=Cake.ReSharperReports&version=0.11.1 + +// TOOLS +#tool nuget:?package=GitReleaseManager&version=0.11.0 +#tool nuget:?package=GitVersion.CommandLine&version=5.6.7 +#tool nuget:?package=coveralls.io&version=1.4.2 +#tool nuget:?package=OpenCover&version=4.7.922 +#tool nuget:?package=ReportGenerator&version=4.8.7 +#tool nuget:?package=JetBrains.ReSharper.CommandLineTools&version=2020.3.4 + +// ARGUMENTS +var target = Argument("target", "Default"); +if (string.IsNullOrWhiteSpace(target)) +{ + target = "Default"; +} + +var buildConfig = Argument("buildConfig", "Release"); +if (string.IsNullOrEmpty(buildConfig)) { + buildConfig = "Release"; +} + +// Build configuration + +var repoOwner = "sharparchitecture"; +var repoName = "Sharp-Architecture"; + +var local = BuildSystem.IsLocalBuild; +var isPullRequest = AppVeyor.Environment.PullRequest.IsPullRequest; +var isRepository = StringComparer.OrdinalIgnoreCase.Equals($"{repoOwner}/{repoName}", AppVeyor.Environment.Repository.Name); + +var isDebugBuild = string.Equals(buildConfig, "Debug", StringComparison.OrdinalIgnoreCase); +var isReleaseBuild = string.Equals(buildConfig, "Release", StringComparison.OrdinalIgnoreCase); + +var isDevelopBranch = StringComparer.OrdinalIgnoreCase.Equals("develop", AppVeyor.Environment.Repository.Branch); +var isReleaseBranch = AppVeyor.Environment.Repository.Branch.IndexOf("releases/", StringComparison.OrdinalIgnoreCase) >= 0 + || AppVeyor.Environment.Repository.Branch.IndexOf("hotfixes/", StringComparison.OrdinalIgnoreCase) >= 0; + +var isTagged = AppVeyor.Environment.Repository.Tag.IsTag; +var appVeyorJobId = AppVeyor.Environment.JobId; + +// Solution settings + +// Calculate version and commit hash +GitVersion semVersion = GitVersion(); +var nugetVersion = semVersion.NuGetVersion; +var buildVersion = semVersion.FullBuildMetaData; +var informationalVersion = semVersion.InformationalVersion; +var nextMajorRelease = $"{semVersion.Major+1}.0.0"; +var commitHash = semVersion.Sha; +var milestone = semVersion.MajorMinorPatch; + +// Artifacts +var artifactsDir = "./Drops"; +var artifactsDirAbsolutePath = MakeAbsolute(Directory(artifactsDir)); + +var testCoverageOutputFile = new FilePath(artifactsDir + "/OpenCover.xml"); +var codeCoverageReportDir = artifactsDir + "/CodeCoverageReport"; +var codeInspectionsOutputFile = artifactsDir + "/Inspections/CodeInspections.xml"; +var duplicateFinderOutputFile = artifactsDir + "/Inspections/CodeDuplicates.xml"; + +var packagesDir = artifactsDir + "/packages"; +var srcDir = "./Src"; +var testsRootDir = srcDir + "/tests"; +var solutionFile = new FilePath(srcDir + "/SharpArch.sln"); +var samplesDir = "./Samples"; +var coverageFilter="+[SharpArch*]* -[SharpArch.Tests*]* -[SharpArch.Xunit*]* -[SharpArch.Infrastructure]SharpArch.Infrastructure.Logging.*"; + +string githubToken = null; + +// SETUP / TEARDOWN + +Setup((context) => +{ + Information("Building version {0} (tagged: {1}, local: {2}, release branch: {3})...", nugetVersion, isTagged, local, isReleaseBranch); + CreateDirectory(artifactsDir); + CleanDirectory(artifactsDir); + githubToken = context.EnvironmentVariable("GITHUB_TOKEN"); +}); + +Teardown((context) => +{ + // Executed AFTER the last task. +}); + +Task("SetVersion") + .Does(() => + { + CreateAssemblyInfo($"{srcDir}/Common/AssemblyVersion.cs", new AssemblyInfoSettings{ + FileVersion = semVersion.MajorMinorPatch, + InformationalVersion = semVersion.InformationalVersion, + Version = semVersion.MajorMinorPatch + }); + }); + + +Task("UpdateAppVeyorBuildNumber") + .WithCriteria(() => AppVeyor.IsRunningOnAppVeyor) + .ContinueOnError() + .Does(() => + { + AppVeyor.UpdateBuildVersion(buildVersion); + }); + + +Task("Restore") + .DoesForEach(GetFiles(solutionFile.ToString()).Union(GetFiles($"{samplesDir}/**/*.sln")), + (sln) => { + Information("Running in {0}", sln.GetDirectory().FullPath); + DotNetCoreRestore(sln.GetDirectory().FullPath); + } + ); + + +Task("InspectCode") + .Does(() => { + DupFinder(solutionFile, new DupFinderSettings { + CachesHome = "./tmp/DupFinderCaches", + DiscardCost = 70, + DiscardFieldsName = false, + DiscardLiterals = false, + NormalizeTypes = true, + ShowStats = true, + ShowText = true, + OutputFile = duplicateFinderOutputFile, + ExcludePattern = new string [] { + "../Docker/**/*", + "Solution Items/**/*", + "Tests/**/*", + "Samples/**/*" + } + }); + ReSharperReports( + duplicateFinderOutputFile, + System.IO.Path.ChangeExtension(duplicateFinderOutputFile, "html") + ); + + InspectCode(solutionFile, new InspectCodeSettings() { + OutputFile = codeInspectionsOutputFile, + Profile = "SharpArch.AutoLoad.DotSettings", + CachesHome = "./tmp/ReSharperCaches", + SolutionWideAnalysis = true + }); + ReSharperReports( + codeInspectionsOutputFile, + System.IO.Path.ChangeExtension(codeInspectionsOutputFile, "html") + ); + }); + + +Task("RunXunitTests") + .DoesForEach(GetFiles(solutionFile.ToString()).Union(GetFiles($"{samplesDir}/**/*.sln")), + (testProj) => { + var projectPath = testProj.GetDirectory(); + var projectFilename = testProj.GetFilenameWithoutExtension(); + Information("Calculating code coverage for {0} ...", projectFilename); + + var openCoverSettings = new OpenCoverSettings { + OldStyle = true, + ReturnTargetCodeOffset = 0, + ArgumentCustomization = args => args.Append("-mergeoutput").Append("-hideskipped:File;Filter;Attribute"), + WorkingDirectory = projectPath, + } + .WithFilter(coverageFilter) + .ExcludeByAttribute("*.ExcludeFromCodeCoverage*") + .ExcludeByFile("*/*Designer.cs"); + + Func buildProcessArgs = (buildCfg) => { + var pb = new ProcessArgumentBuilder() + .AppendSwitch("--configuration", buildCfg) + .AppendSwitch("--filter", "Category!=IntegrationTests") + .AppendSwitch("--results-directory", artifactsDirAbsolutePath.FullPath) + .Append("--no-build"); + if (!local) { + pb.AppendSwitch("--test-adapter-path", ".") + .AppendSwitch("--logger", $"AppVeyor"); + } else { + pb.AppendSwitch("--logger", $"trx;LogFileName={projectFilename}.trx"); + } + return pb; + }; + + // run open cover for debug build configuration + OpenCover( + tool => tool.DotNetCoreTool(projectPath.FullPath, + "test", + buildProcessArgs("Debug") + ), + testCoverageOutputFile, + openCoverSettings); + + // run tests again if Release mode was requested + if (isReleaseBuild) { + Information("Running Release mode tests for {0}", projectFilename.ToString()); + DotNetCoreTool(testProj.FullPath, + "test", + buildProcessArgs("Release") + ); + } + }) + .DeferOnError(); + + +Task("CleanPreviousTestResults") + .Does(() => + { + if (FileExists(testCoverageOutputFile)) + DeleteFile(testCoverageOutputFile); + DeleteFiles(artifactsDir + "/*.trx"); + if (DirectoryExists(codeCoverageReportDir)) + DeleteDirectory(codeCoverageReportDir, new DeleteDirectorySettings{ + Recursive = true, + Force = true + }); + }); + + +Task("GenerateCoverageReport") + .WithCriteria(() => local) + .Does(() => + { + ReportGenerator(testCoverageOutputFile, codeCoverageReportDir); + }); + + +Task("RunUnitTests") + .IsDependentOn("Build") + .IsDependentOn("CleanPreviousTestResults") + .IsDependentOn("RunXunitTests") + .IsDependentOn("GenerateCoverageReport") + .Does(() => + { + Information("Done Test"); + }) + .Finally(() => { + if (!local) { + CoverallsIo(testCoverageOutputFile); + } + }); + + +Task("Build") + .IsDependentOn("SetVersion") + .IsDependentOn("UpdateAppVeyorBuildNumber") + .IsDependentOn("Restore") + .DoesForEach(GetFiles($"{srcDir}/**/*.sln").Union(GetFiles($"{samplesDir}/**/*.sln")), + (solutionFile) => { + var slnPath = solutionFile.GetDirectory().FullPath; + var sln = solutionFile.GetFilenameWithoutExtension(); + if (isReleaseBuild) { + Information("Running {0} {1} build to calculate code coverage", sln, "Debug"); + // need Debug mode build for code coverage calculation + DotNetCoreBuild(slnPath, new DotNetCoreBuildSettings { + NoRestore = true, + Configuration = "Debug", + }); + } + Information("Running {0} {1} build in {2}", sln, buildConfig, slnPath); + DotNetCoreBuild(slnPath, new DotNetCoreBuildSettings { + NoRestore = true, + Configuration = buildConfig, + }); + }); + + +Task("CreateNugetPackages") + .Does(() => { + Action buildPackage = (string projectName) => { + var projectFileName=projectName; + Information("Pack {0}", projectFileName); + + DotNetCorePack(projectFileName, new DotNetCorePackSettings { + Configuration = buildConfig, + OutputDirectory = packagesDir, + NoBuild = true, + NoRestore = true, + ArgumentCustomization = args => args.Append($"-p:Version={nugetVersion}") + }); + }; + + if (isTagged) { + var releaseNotes = $"https://github.com/{repoOwner}/{repoName}/releases/tag/{milestone}"; + Information("Updating ReleaseNotes Link: {0}", releaseNotes); + XmlPoke("./Directory.Build.props", + "/Project/PropertyGroup[@Label=\"Package\"]/PackageReleaseNotes", + releaseNotes + ); + } + + foreach(var projectName in new[] {$"{solutionFile}"}) { + buildPackage(projectName); + }; + }); + + +Task("CreateRelease") + .WithCriteria(() => isRepository && isReleaseBranch && !isPullRequest) + .Does(() => { + GitReleaseManagerCreate(githubToken, repoOwner, repoName, + new GitReleaseManagerCreateSettings { + Milestone = milestone, + TargetCommitish = "master" + }); + }); + + +Task("CloseMilestone") + .WithCriteria(() => isRepository && isTagged && !isPullRequest) + .Does(() => { + GitReleaseManagerClose(githubToken, repoOwner, repoName, milestone); + }); + + +Task("Default") + .IsDependentOn("UpdateAppVeyorBuildNumber") + .IsDependentOn("Build") + .IsDependentOn("RunUnitTests") +// .IsDependentOn("InspectCode") + .IsDependentOn("CreateNugetPackages") + .IsDependentOn("CreateRelease") + .IsDependentOn("CloseMilestone") + .Does( + () => {} + ); + + +// EXECUTION +RunTarget(target); diff --git a/build.sh b/build.sh new file mode 100755 index 000000000..b9e12527f --- /dev/null +++ b/build.sh @@ -0,0 +1,117 @@ +#!/usr/bin/env bash + +########################################################################## +# This is the Cake bootstrapper script for Linux and OS X. +# This file was downloaded from https://github.com/cake-build/resources +# Feel free to change this file to fit your needs. +########################################################################## + +# Define directories. +SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) +TOOLS_DIR=$SCRIPT_DIR/tools +ADDINS_DIR=$TOOLS_DIR/Addins +MODULES_DIR=$TOOLS_DIR/Modules +NUGET_EXE=$TOOLS_DIR/nuget.exe +CAKE_EXE=$TOOLS_DIR/Cake/Cake.exe +PACKAGES_CONFIG=$TOOLS_DIR/packages.config +PACKAGES_CONFIG_MD5=$TOOLS_DIR/packages.config.md5sum +ADDINS_PACKAGES_CONFIG=$ADDINS_DIR/packages.config +MODULES_PACKAGES_CONFIG=$MODULES_DIR/packages.config + +# Define md5sum or md5 depending on Linux/OSX +MD5_EXE= +if [[ "$(uname -s)" == "Darwin" ]]; then + MD5_EXE="md5 -r" +else + MD5_EXE="md5sum" +fi + +# Define default arguments. +SCRIPT="build.cake" +CAKE_ARGUMENTS=() + +# Parse arguments. +for i in "$@"; do + case $1 in + -s|--script) SCRIPT="$2"; shift ;; + --) shift; CAKE_ARGUMENTS+=("$@"); break ;; + *) CAKE_ARGUMENTS+=("$1") ;; + esac + shift +done + +# Make sure the tools folder exist. +if [ ! -d "$TOOLS_DIR" ]; then + mkdir "$TOOLS_DIR" +fi + +# Make sure that packages.config exist. +if [ ! -f "$TOOLS_DIR/packages.config" ]; then + echo "Downloading packages.config..." + curl -Lsfo "$TOOLS_DIR/packages.config" https://cakebuild.net/download/bootstrapper/packages + if [ $? -ne 0 ]; then + echo "An error occurred while downloading packages.config." + exit 1 + fi +fi + +# Download NuGet if it does not exist. +if [ ! -f "$NUGET_EXE" ]; then + echo "Downloading NuGet..." + curl -Lsfo "$NUGET_EXE" https://dist.nuget.org/win-x86-commandline/latest/nuget.exe + if [ $? -ne 0 ]; then + echo "An error occurred while downloading nuget.exe." + exit 1 + fi +fi + +# Restore tools from NuGet. +pushd "$TOOLS_DIR" >/dev/null +if [ ! -f "$PACKAGES_CONFIG_MD5" ] || [ "$( cat "$PACKAGES_CONFIG_MD5" | sed 's/\r$//' )" != "$( $MD5_EXE "$PACKAGES_CONFIG" | awk '{ print $1 }' )" ]; then + find . -type d ! -name . ! -name 'Cake.Bakery' | xargs rm -rf +fi + +mono "$NUGET_EXE" install -ExcludeVersion +if [ $? -ne 0 ]; then + echo "Could not restore NuGet tools." + exit 1 +fi + +$MD5_EXE "$PACKAGES_CONFIG" | awk '{ print $1 }' >| "$PACKAGES_CONFIG_MD5" + +popd >/dev/null + +# Restore addins from NuGet. +if [ -f "$ADDINS_PACKAGES_CONFIG" ]; then + pushd "$ADDINS_DIR" >/dev/null + + mono "$NUGET_EXE" install -ExcludeVersion + if [ $? -ne 0 ]; then + echo "Could not restore NuGet addins." + exit 1 + fi + + popd >/dev/null +fi + +# Restore modules from NuGet. +if [ -f "$MODULES_PACKAGES_CONFIG" ]; then + pushd "$MODULES_DIR" >/dev/null + + mono "$NUGET_EXE" install -ExcludeVersion + if [ $? -ne 0 ]; then + echo "Could not restore NuGet modules." + exit 1 + fi + + popd >/dev/null +fi + +# Make sure that Cake has been installed. +if [ ! -f "$CAKE_EXE" ]; then + echo "Could not find Cake.exe at '$CAKE_EXE'." + exit 1 +fi + +# Start Cake +exec mono "$CAKE_EXE" $SCRIPT "${CAKE_ARGUMENTS[@]}" diff --git a/docs/S#arp Architecture Online Documentation.url b/docs/S#arp Architecture Online Documentation.url deleted file mode 100644 index eed3c3a7e..000000000 --- a/docs/S#arp Architecture Online Documentation.url +++ /dev/null @@ -1,5 +0,0 @@ -[InternetShortcut] -URL=http://wiki.sharparchitecture.net/ -IDList= -[{000214A0-0000-0000-C000-000000000046}] -Prop3=19,2 diff --git a/dotnet-install.ps1 b/dotnet-install.ps1 new file mode 100644 index 000000000..e64af09d2 --- /dev/null +++ b/dotnet-install.ps1 @@ -0,0 +1,1402 @@ +# +# Copyright (c) .NET Foundation and contributors. All rights reserved. +# Licensed under the MIT license. See LICENSE file in the project root for full license information. +# + +<# +.SYNOPSIS + Installs dotnet cli +.DESCRIPTION + Installs dotnet cli. If dotnet installation already exists in the given directory + it will update it only if the requested version differs from the one already installed. +.PARAMETER Channel + Default: LTS + Download from the Channel specified. Possible values: + - Current - most current release + - LTS - most current supported release + - 2-part version in a format A.B - represents a specific release + examples: 2.0, 1.0 + - 3-part version in a format A.B.Cxx - represents a specific SDK release + examples: 5.0.1xx, 5.0.2xx + Supported since 5.0 release + Note: The version parameter overrides the channel parameter when any version other than 'latest' is used. +.PARAMETER Quality + Download the latest build of specified quality in the channel. The possible values are: daily, signed, validated, preview, GA. + Works only in combination with channel. Not applicable for current and LTS channels and will be ignored if those channels are used. + For SDK use channel in A.B.Cxx format: using quality together with channel in A.B format is not supported. + Supported since 5.0 release. + Note: The version parameter overrides the channel parameter when any version other than 'latest' is used, and therefore overrides the quality. +.PARAMETER Version + Default: latest + Represents a build version on specific channel. Possible values: + - latest - most latest build on specific channel + - 3-part version in a format A.B.C - represents specific version of build + examples: 2.0.0-preview2-006120, 1.1.0 +.PARAMETER Internal + Download internal builds. Requires providing credentials via -FeedCredential parameter. +.PARAMETER FeedCredential + Token to access Azure feed. Used as a query string to append to the Azure feed. + This parameter typically is not specified. +.PARAMETER InstallDir + Default: %LocalAppData%\Microsoft\dotnet + Path to where to install dotnet. Note that binaries will be placed directly in a given directory. +.PARAMETER Architecture + Default: - this value represents currently running OS architecture + Architecture of dotnet binaries to be installed. + Possible values are: , amd64, x64, x86, arm64, arm +.PARAMETER SharedRuntime + This parameter is obsolete and may be removed in a future version of this script. + The recommended alternative is '-Runtime dotnet'. + Installs just the shared runtime bits, not the entire SDK. +.PARAMETER Runtime + Installs just a shared runtime, not the entire SDK. + Possible values: + - dotnet - the Microsoft.NETCore.App shared runtime + - aspnetcore - the Microsoft.AspNetCore.App shared runtime + - windowsdesktop - the Microsoft.WindowsDesktop.App shared runtime +.PARAMETER DryRun + If set it will not perform installation but instead display what command line to use to consistently install + currently requested version of dotnet cli. In example if you specify version 'latest' it will display a link + with specific version so that this command can be used deterministicly in a build script. + It also displays binaries location if you prefer to install or download it yourself. +.PARAMETER NoPath + By default this script will set environment variable PATH for the current process to the binaries folder inside installation folder. + If set it will display binaries location but not set any environment variable. +.PARAMETER Verbose + Displays diagnostics information. +.PARAMETER AzureFeed + Default: https://dotnetcli.azureedge.net/dotnet + This parameter typically is not changed by the user. + It allows changing the URL for the Azure feed used by this installer. +.PARAMETER UncachedFeed + This parameter typically is not changed by the user. + It allows changing the URL for the Uncached feed used by this installer. +.PARAMETER ProxyAddress + If set, the installer will use the proxy when making web requests +.PARAMETER ProxyUseDefaultCredentials + Default: false + Use default credentials, when using proxy address. +.PARAMETER ProxyBypassList + If set with ProxyAddress, will provide the list of comma separated urls that will bypass the proxy +.PARAMETER SkipNonVersionedFiles + Default: false + Skips installing non-versioned files if they already exist, such as dotnet.exe. +.PARAMETER NoCdn + Disable downloading from the Azure CDN, and use the uncached feed directly. +.PARAMETER JSonFile + Determines the SDK version from a user specified global.json file + Note: global.json must have a value for 'SDK:Version' +.PARAMETER DownloadTimeout + Determines timeout duration in seconds for dowloading of the SDK file + Default: 1200 seconds (20 minutes) +#> +[cmdletbinding()] +param( + [string]$Channel="LTS", + [string]$Quality, + [string]$Version="Latest", + [switch]$Internal, + [string]$JSonFile, + [Alias('i')][string]$InstallDir="", + [string]$Architecture="", + [string]$Runtime, + [Obsolete("This parameter may be removed in a future version of this script. The recommended alternative is '-Runtime dotnet'.")] + [switch]$SharedRuntime, + [switch]$DryRun, + [switch]$NoPath, + [string]$AzureFeed="https://dotnetcli.azureedge.net/dotnet", + [string]$UncachedFeed="https://dotnetcli.blob.core.windows.net/dotnet", + [string]$FeedCredential, + [string]$ProxyAddress, + [switch]$ProxyUseDefaultCredentials, + [string[]]$ProxyBypassList=@(), + [switch]$SkipNonVersionedFiles, + [switch]$NoCdn, + [int]$DownloadTimeout=1200 +) + +Set-StrictMode -Version Latest +$ErrorActionPreference="Stop" +$ProgressPreference="SilentlyContinue" + +if ($NoCdn) { + $AzureFeed = $UncachedFeed +} + +$BinFolderRelativePath="" + +if ($SharedRuntime -and (-not $Runtime)) { + $Runtime = "dotnet" +} + +# example path with regex: shared/1.0.0-beta-12345/somepath +$VersionRegEx="/\d+\.\d+[^/]+/" +$OverrideNonVersionedFiles = !$SkipNonVersionedFiles + +function Say($str) { + try { + Write-Host "dotnet-install: $str" + } + catch { + # Some platforms cannot utilize Write-Host (Azure Functions, for instance). Fall back to Write-Output + Write-Output "dotnet-install: $str" + } +} + +function Say-Warning($str) { + try { + Write-Warning "dotnet-install: $str" + } + catch { + # Some platforms cannot utilize Write-Warning (Azure Functions, for instance). Fall back to Write-Output + Write-Output "dotnet-install: Warning: $str" + } +} + +# Writes a line with error style settings. +# Use this function to show a human-readable comment along with an exception. +function Say-Error($str) { + try { + # Write-Error is quite oververbose for the purpose of the function, let's write one line with error style settings. + $Host.UI.WriteErrorLine("dotnet-install: $str") + } + catch { + Write-Output "dotnet-install: Error: $str" + } +} + +function Say-Verbose($str) { + try { + Write-Verbose "dotnet-install: $str" + } + catch { + # Some platforms cannot utilize Write-Verbose (Azure Functions, for instance). Fall back to Write-Output + Write-Output "dotnet-install: $str" + } +} + +function Say-Invocation($Invocation) { + $command = $Invocation.MyCommand; + $args = (($Invocation.BoundParameters.Keys | foreach { "-$_ `"$($Invocation.BoundParameters[$_])`"" }) -join " ") + Say-Verbose "$command $args" +} + +function Invoke-With-Retry([ScriptBlock]$ScriptBlock, [System.Threading.CancellationToken]$cancellationToken = [System.Threading.CancellationToken]::None, [int]$MaxAttempts = 3, [int]$SecondsBetweenAttempts = 1) { + $Attempts = 0 + + while ($true) { + try { + return & $ScriptBlock + } + catch { + $Attempts++ + if (($Attempts -lt $MaxAttempts) -and -not $cancellationToken.IsCancellationRequested) { + Start-Sleep $SecondsBetweenAttempts + } + else { + throw + } + } + } +} + +function Get-Machine-Architecture() { + Say-Invocation $MyInvocation + + # On PS x86, PROCESSOR_ARCHITECTURE reports x86 even on x64 systems. + # To get the correct architecture, we need to use PROCESSOR_ARCHITEW6432. + # PS x64 doesn't define this, so we fall back to PROCESSOR_ARCHITECTURE. + # Possible values: amd64, x64, x86, arm64, arm + + if( $ENV:PROCESSOR_ARCHITEW6432 -ne $null ) + { + return $ENV:PROCESSOR_ARCHITEW6432 + } + + return $ENV:PROCESSOR_ARCHITECTURE +} + +function Get-CLIArchitecture-From-Architecture([string]$Architecture) { + Say-Invocation $MyInvocation + + switch ($Architecture.ToLowerInvariant()) { + { $_ -eq "" } { return Get-CLIArchitecture-From-Architecture $(Get-Machine-Architecture) } + { ($_ -eq "amd64") -or ($_ -eq "x64") } { return "x64" } + { $_ -eq "x86" } { return "x86" } + { $_ -eq "arm" } { return "arm" } + { $_ -eq "arm64" } { return "arm64" } + default { throw "Architecture '$Architecture' not supported. If you think this is a bug, report it at https://github.com/dotnet/install-scripts/issues" } + } +} + + +function Get-NormalizedQuality([string]$Quality) { + Say-Invocation $MyInvocation + + if ([string]::IsNullOrEmpty($Quality)) { + return "" + } + + switch ($Quality) { + { @("daily", "signed", "validated", "preview") -contains $_ } { return $Quality.ToLowerInvariant() } + #ga quality is available without specifying quality, so normalizing it to empty + { $_ -eq "ga" } { return "" } + default { throw "'$Quality' is not a supported value for -Quality option. Supported values are: daily, signed, validated, preview, ga. If you think this is a bug, report it at https://github.com/dotnet/install-scripts/issues." } + } +} + +function Get-NormalizedChannel([string]$Channel) { + Say-Invocation $MyInvocation + + if ([string]::IsNullOrEmpty($Channel)) { + return "" + } + + if ($Channel.StartsWith('release/')) { + Say-Warning 'Using branch name with -Channel option is no longer supported with newer releases. Use -Quality option with a channel in X.Y format instead, such as "-Channel 5.0 -Quality Daily."' + } + + switch ($Channel) { + { $_ -eq "lts" } { return "LTS" } + { $_ -eq "current" } { return "current" } + default { return $Channel.ToLowerInvariant() } + } +} + +function Get-NormalizedProduct([string]$Runtime) { + Say-Invocation $MyInvocation + + switch ($Runtime) { + { $_ -eq "dotnet" } { return "dotnet-runtime" } + { $_ -eq "aspnetcore" } { return "aspnetcore-runtime" } + { $_ -eq "windowsdesktop" } { return "windowsdesktop-runtime" } + { [string]::IsNullOrEmpty($_) } { return "dotnet-sdk" } + default { throw "'$Runtime' is not a supported value for -Runtime option, supported values are: dotnet, aspnetcore, windowsdesktop. If you think this is a bug, report it at https://github.com/dotnet/install-scripts/issues." } + } +} + + +# The version text returned from the feeds is a 1-line or 2-line string: +# For the SDK and the dotnet runtime (2 lines): +# Line 1: # commit_hash +# Line 2: # 4-part version +# For the aspnetcore runtime (1 line): +# Line 1: # 4-part version +function Get-Version-Info-From-Version-Text([string]$VersionText) { + Say-Invocation $MyInvocation + + $Data = -split $VersionText + + $VersionInfo = @{ + CommitHash = $(if ($Data.Count -gt 1) { $Data[0] }) + Version = $Data[-1] # last line is always the version number. + } + return $VersionInfo +} + +function Load-Assembly([string] $Assembly) { + try { + Add-Type -Assembly $Assembly | Out-Null + } + catch { + # On Nano Server, Powershell Core Edition is used. Add-Type is unable to resolve base class assemblies because they are not GAC'd. + # Loading the base class assemblies is not unnecessary as the types will automatically get resolved. + } +} + +function GetHTTPResponse([Uri] $Uri, [bool]$HeaderOnly, [bool]$DisableRedirect, [bool]$DisableFeedCredential) +{ + $cts = New-Object System.Threading.CancellationTokenSource + + $downloadScript = { + + $HttpClient = $null + + try { + # HttpClient is used vs Invoke-WebRequest in order to support Nano Server which doesn't support the Invoke-WebRequest cmdlet. + Load-Assembly -Assembly System.Net.Http + + if(-not $ProxyAddress) { + try { + # Despite no proxy being explicitly specified, we may still be behind a default proxy + $DefaultProxy = [System.Net.WebRequest]::DefaultWebProxy; + if($DefaultProxy -and (-not $DefaultProxy.IsBypassed($Uri))) { + $ProxyAddress = $DefaultProxy.GetProxy($Uri).OriginalString + $ProxyUseDefaultCredentials = $true + } + } catch { + # Eat the exception and move forward as the above code is an attempt + # at resolving the DefaultProxy that may not have been a problem. + $ProxyAddress = $null + Say-Verbose("Exception ignored: $_.Exception.Message - moving forward...") + } + } + + $HttpClientHandler = New-Object System.Net.Http.HttpClientHandler + if($ProxyAddress) { + $HttpClientHandler.Proxy = New-Object System.Net.WebProxy -Property @{ + Address=$ProxyAddress; + UseDefaultCredentials=$ProxyUseDefaultCredentials; + BypassList = $ProxyBypassList; + } + } + if ($DisableRedirect) + { + $HttpClientHandler.AllowAutoRedirect = $false + } + $HttpClient = New-Object System.Net.Http.HttpClient -ArgumentList $HttpClientHandler + + # Default timeout for HttpClient is 100s. For a 50 MB download this assumes 500 KB/s average, any less will time out + # Defaulting to 20 minutes allows it to work over much slower connections. + $HttpClient.Timeout = New-TimeSpan -Seconds $DownloadTimeout + + if ($HeaderOnly){ + $completionOption = [System.Net.Http.HttpCompletionOption]::ResponseHeadersRead + } + else { + $completionOption = [System.Net.Http.HttpCompletionOption]::ResponseContentRead + } + + if ($DisableFeedCredential) { + $UriWithCredential = $Uri + } + else { + $UriWithCredential = "${Uri}${FeedCredential}" + } + + $Task = $HttpClient.GetAsync("$UriWithCredential", $completionOption).ConfigureAwait("false"); + $Response = $Task.GetAwaiter().GetResult(); + + if (($null -eq $Response) -or ((-not $HeaderOnly) -and (-not ($Response.IsSuccessStatusCode)))) { + # The feed credential is potentially sensitive info. Do not log FeedCredential to console output. + $DownloadException = [System.Exception] "Unable to download $Uri." + + if ($null -ne $Response) { + $DownloadException.Data["StatusCode"] = [int] $Response.StatusCode + $DownloadException.Data["ErrorMessage"] = "Unable to download $Uri. Returned HTTP status code: " + $DownloadException.Data["StatusCode"] + + if (404 -eq [int] $Response.StatusCode) + { + $cts.Cancel() + } + } + + throw $DownloadException + } + + return $Response + } + catch [System.Net.Http.HttpRequestException] { + $DownloadException = [System.Exception] "Unable to download $Uri." + + # Pick up the exception message and inner exceptions' messages if they exist + $CurrentException = $PSItem.Exception + $ErrorMsg = $CurrentException.Message + "`r`n" + while ($CurrentException.InnerException) { + $CurrentException = $CurrentException.InnerException + $ErrorMsg += $CurrentException.Message + "`r`n" + } + + # Check if there is an issue concerning TLS. + if ($ErrorMsg -like "*SSL/TLS*") { + $ErrorMsg += "Ensure that TLS 1.2 or higher is enabled to use this script.`r`n" + } + + $DownloadException.Data["ErrorMessage"] = $ErrorMsg + throw $DownloadException + } + finally { + if ($null -ne $HttpClient) { + $HttpClient.Dispose() + } + } + } + + try { + return Invoke-With-Retry $downloadScript $cts.Token + } + finally + { + if ($null -ne $cts) + { + $cts.Dispose() + } + } +} + +function Get-Latest-Version-Info([string]$AzureFeed, [string]$Channel) { + Say-Invocation $MyInvocation + + $VersionFileUrl = $null + if ($Runtime -eq "dotnet") { + $VersionFileUrl = "$UncachedFeed/Runtime/$Channel/latest.version" + } + elseif ($Runtime -eq "aspnetcore") { + $VersionFileUrl = "$UncachedFeed/aspnetcore/Runtime/$Channel/latest.version" + } + elseif ($Runtime -eq "windowsdesktop") { + $VersionFileUrl = "$UncachedFeed/WindowsDesktop/$Channel/latest.version" + } + elseif (-not $Runtime) { + $VersionFileUrl = "$UncachedFeed/Sdk/$Channel/latest.version" + } + else { + throw "Invalid value for `$Runtime" + } + + Say-Verbose "Constructed latest.version URL: $VersionFileUrl" + + try { + $Response = GetHTTPResponse -Uri $VersionFileUrl + } + catch { + Say-Error "Could not resolve version information." + throw + } + $StringContent = $Response.Content.ReadAsStringAsync().Result + + switch ($Response.Content.Headers.ContentType) { + { ($_ -eq "application/octet-stream") } { $VersionText = $StringContent } + { ($_ -eq "text/plain") } { $VersionText = $StringContent } + { ($_ -eq "text/plain; charset=UTF-8") } { $VersionText = $StringContent } + default { throw "``$Response.Content.Headers.ContentType`` is an unknown .version file content type." } + } + + $VersionInfo = Get-Version-Info-From-Version-Text $VersionText + + return $VersionInfo +} + +function Parse-Jsonfile-For-Version([string]$JSonFile) { + Say-Invocation $MyInvocation + + If (-Not (Test-Path $JSonFile)) { + throw "Unable to find '$JSonFile'" + } + try { + $JSonContent = Get-Content($JSonFile) -Raw | ConvertFrom-Json | Select-Object -expand "sdk" -ErrorAction SilentlyContinue + } + catch { + Say-Error "Json file unreadable: '$JSonFile'" + throw + } + if ($JSonContent) { + try { + $JSonContent.PSObject.Properties | ForEach-Object { + $PropertyName = $_.Name + if ($PropertyName -eq "version") { + $Version = $_.Value + Say-Verbose "Version = $Version" + } + } + } + catch { + Say-Error "Unable to parse the SDK node in '$JSonFile'" + throw + } + } + else { + throw "Unable to find the SDK node in '$JSonFile'" + } + If ($Version -eq $null) { + throw "Unable to find the SDK:version node in '$JSonFile'" + } + return $Version +} + +function Get-Specific-Version-From-Version([string]$AzureFeed, [string]$Channel, [string]$Version, [string]$JSonFile) { + Say-Invocation $MyInvocation + + if (-not $JSonFile) { + if ($Version.ToLowerInvariant() -eq "latest") { + $LatestVersionInfo = Get-Latest-Version-Info -AzureFeed $AzureFeed -Channel $Channel + return $LatestVersionInfo.Version + } + else { + return $Version + } + } + else { + return Parse-Jsonfile-For-Version $JSonFile + } +} + +function Get-Download-Link([string]$AzureFeed, [string]$SpecificVersion, [string]$CLIArchitecture) { + Say-Invocation $MyInvocation + + # If anything fails in this lookup it will default to $SpecificVersion + $SpecificProductVersion = Get-Product-Version -AzureFeed $AzureFeed -SpecificVersion $SpecificVersion + + if ($Runtime -eq "dotnet") { + $PayloadURL = "$AzureFeed/Runtime/$SpecificVersion/dotnet-runtime-$SpecificProductVersion-win-$CLIArchitecture.zip" + } + elseif ($Runtime -eq "aspnetcore") { + $PayloadURL = "$AzureFeed/aspnetcore/Runtime/$SpecificVersion/aspnetcore-runtime-$SpecificProductVersion-win-$CLIArchitecture.zip" + } + elseif ($Runtime -eq "windowsdesktop") { + # The windows desktop runtime is part of the core runtime layout prior to 5.0 + $PayloadURL = "$AzureFeed/Runtime/$SpecificVersion/windowsdesktop-runtime-$SpecificProductVersion-win-$CLIArchitecture.zip" + if ($SpecificVersion -match '^(\d+)\.(.*)$') + { + $majorVersion = [int]$Matches[1] + if ($majorVersion -ge 5) + { + $PayloadURL = "$AzureFeed/WindowsDesktop/$SpecificVersion/windowsdesktop-runtime-$SpecificProductVersion-win-$CLIArchitecture.zip" + } + } + } + elseif (-not $Runtime) { + $PayloadURL = "$AzureFeed/Sdk/$SpecificVersion/dotnet-sdk-$SpecificProductVersion-win-$CLIArchitecture.zip" + } + else { + throw "Invalid value for `$Runtime" + } + + Say-Verbose "Constructed primary named payload URL: $PayloadURL" + + return $PayloadURL, $SpecificProductVersion +} + +function Get-LegacyDownload-Link([string]$AzureFeed, [string]$SpecificVersion, [string]$CLIArchitecture) { + Say-Invocation $MyInvocation + + if (-not $Runtime) { + $PayloadURL = "$AzureFeed/Sdk/$SpecificVersion/dotnet-dev-win-$CLIArchitecture.$SpecificVersion.zip" + } + elseif ($Runtime -eq "dotnet") { + $PayloadURL = "$AzureFeed/Runtime/$SpecificVersion/dotnet-win-$CLIArchitecture.$SpecificVersion.zip" + } + else { + return $null + } + + Say-Verbose "Constructed legacy named payload URL: $PayloadURL" + + return $PayloadURL +} + +function Get-Product-Version([string]$AzureFeed, [string]$SpecificVersion, [string]$PackageDownloadLink) { + Say-Invocation $MyInvocation + + # Try to get the version number, using the productVersion.txt file located next to the installer file. + $ProductVersionTxtURLs = (Get-Product-Version-Url $AzureFeed $SpecificVersion $PackageDownloadLink -Flattened $true), + (Get-Product-Version-Url $AzureFeed $SpecificVersion $PackageDownloadLink -Flattened $false) + + Foreach ($ProductVersionTxtURL in $ProductVersionTxtURLs) { + Say-Verbose "Checking for the existence of $ProductVersionTxtURL" + + try { + $productVersionResponse = GetHTTPResponse($productVersionTxtUrl) + + if ($productVersionResponse.StatusCode -eq 200) { + $productVersion = $productVersionResponse.Content.ReadAsStringAsync().Result.Trim() + if ($productVersion -ne $SpecificVersion) + { + Say "Using alternate version $productVersion found in $ProductVersionTxtURL" + } + return $productVersion + } + else { + Say-Verbose "Got StatusCode $($productVersionResponse.StatusCode) when trying to get productVersion.txt at $productVersionTxtUrl." + } + } + catch { + Say-Verbose "Could not read productVersion.txt at $productVersionTxtUrl (Exception: '$($_.Exception.Message)'. )" + } + } + + # Getting the version number with productVersion.txt has failed. Try parsing the download link for a version number. + if ([string]::IsNullOrEmpty($PackageDownloadLink)) + { + Say-Verbose "Using the default value '$SpecificVersion' as the product version." + return $SpecificVersion + } + + $productVersion = Get-ProductVersionFromDownloadLink $PackageDownloadLink $SpecificVersion + return $productVersion +} + +function Get-Product-Version-Url([string]$AzureFeed, [string]$SpecificVersion, [string]$PackageDownloadLink, [bool]$Flattened) { + Say-Invocation $MyInvocation + + $majorVersion=$null + if ($SpecificVersion -match '^(\d+)\.(.*)') { + $majorVersion = $Matches[1] -as[int] + } + + $pvFileName='productVersion.txt' + if($Flattened) { + if(-not $Runtime) { + $pvFileName='sdk-productVersion.txt' + } + elseif($Runtime -eq "dotnet") { + $pvFileName='runtime-productVersion.txt' + } + else { + $pvFileName="$Runtime-productVersion.txt" + } + } + + if ([string]::IsNullOrEmpty($PackageDownloadLink)) { + if ($Runtime -eq "dotnet") { + $ProductVersionTxtURL = "$AzureFeed/Runtime/$SpecificVersion/$pvFileName" + } + elseif ($Runtime -eq "aspnetcore") { + $ProductVersionTxtURL = "$AzureFeed/aspnetcore/Runtime/$SpecificVersion/$pvFileName" + } + elseif ($Runtime -eq "windowsdesktop") { + # The windows desktop runtime is part of the core runtime layout prior to 5.0 + $ProductVersionTxtURL = "$AzureFeed/Runtime/$SpecificVersion/$pvFileName" + if ($majorVersion -ne $null -and $majorVersion -ge 5) { + $ProductVersionTxtURL = "$AzureFeed/WindowsDesktop/$SpecificVersion/$pvFileName" + } + } + elseif (-not $Runtime) { + $ProductVersionTxtURL = "$AzureFeed/Sdk/$SpecificVersion/$pvFileName" + } + else { + throw "Invalid value '$Runtime' specified for `$Runtime" + } + } + else { + $ProductVersionTxtURL = $PackageDownloadLink.Substring(0, $PackageDownloadLink.LastIndexOf("/")) + "/$pvFileName" + } + + Say-Verbose "Constructed productVersion link: $ProductVersionTxtURL" + + return $ProductVersionTxtURL +} + +function Get-ProductVersionFromDownloadLink([string]$PackageDownloadLink, [string]$SpecificVersion) +{ + Say-Invocation $MyInvocation + + #product specific version follows the product name + #for filename 'dotnet-sdk-3.1.404-win-x64.zip': the product version is 3.1.400 + $filename = $PackageDownloadLink.Substring($PackageDownloadLink.LastIndexOf("/") + 1) + $filenameParts = $filename.Split('-') + if ($filenameParts.Length -gt 2) + { + $productVersion = $filenameParts[2] + Say-Verbose "Extracted product version '$productVersion' from download link '$PackageDownloadLink'." + } + else { + Say-Verbose "Using the default value '$SpecificVersion' as the product version." + $productVersion = $SpecificVersion + } + return $productVersion +} + +function Get-User-Share-Path() { + Say-Invocation $MyInvocation + + $InstallRoot = $env:DOTNET_INSTALL_DIR + if (!$InstallRoot) { + $InstallRoot = "$env:LocalAppData\Microsoft\dotnet" + } + return $InstallRoot +} + +function Resolve-Installation-Path([string]$InstallDir) { + Say-Invocation $MyInvocation + + if ($InstallDir -eq "") { + return Get-User-Share-Path + } + return $InstallDir +} + +function Is-Dotnet-Package-Installed([string]$InstallRoot, [string]$RelativePathToPackage, [string]$SpecificVersion) { + Say-Invocation $MyInvocation + + $DotnetPackagePath = Join-Path -Path $InstallRoot -ChildPath $RelativePathToPackage | Join-Path -ChildPath $SpecificVersion + Say-Verbose "Is-Dotnet-Package-Installed: DotnetPackagePath=$DotnetPackagePath" + return Test-Path $DotnetPackagePath -PathType Container +} + +function Get-Absolute-Path([string]$RelativeOrAbsolutePath) { + # Too much spam + # Say-Invocation $MyInvocation + + return $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($RelativeOrAbsolutePath) +} + +function Get-Path-Prefix-With-Version($path) { + $match = [regex]::match($path, $VersionRegEx) + if ($match.Success) { + return $entry.FullName.Substring(0, $match.Index + $match.Length) + } + + return $null +} + +function Get-List-Of-Directories-And-Versions-To-Unpack-From-Dotnet-Package([System.IO.Compression.ZipArchive]$Zip, [string]$OutPath) { + Say-Invocation $MyInvocation + + $ret = @() + foreach ($entry in $Zip.Entries) { + $dir = Get-Path-Prefix-With-Version $entry.FullName + if ($dir -ne $null) { + $path = Get-Absolute-Path $(Join-Path -Path $OutPath -ChildPath $dir) + if (-Not (Test-Path $path -PathType Container)) { + $ret += $dir + } + } + } + + $ret = $ret | Sort-Object | Get-Unique + + $values = ($ret | foreach { "$_" }) -join ";" + Say-Verbose "Directories to unpack: $values" + + return $ret +} + +# Example zip content and extraction algorithm: +# Rule: files if extracted are always being extracted to the same relative path locally +# .\ +# a.exe # file does not exist locally, extract +# b.dll # file exists locally, override only if $OverrideFiles set +# aaa\ # same rules as for files +# ... +# abc\1.0.0\ # directory contains version and exists locally +# ... # do not extract content under versioned part +# abc\asd\ # same rules as for files +# ... +# def\ghi\1.0.1\ # directory contains version and does not exist locally +# ... # extract content +function Extract-Dotnet-Package([string]$ZipPath, [string]$OutPath) { + Say-Invocation $MyInvocation + + Load-Assembly -Assembly System.IO.Compression.FileSystem + Set-Variable -Name Zip + try { + $Zip = [System.IO.Compression.ZipFile]::OpenRead($ZipPath) + + $DirectoriesToUnpack = Get-List-Of-Directories-And-Versions-To-Unpack-From-Dotnet-Package -Zip $Zip -OutPath $OutPath + + foreach ($entry in $Zip.Entries) { + $PathWithVersion = Get-Path-Prefix-With-Version $entry.FullName + if (($PathWithVersion -eq $null) -Or ($DirectoriesToUnpack -contains $PathWithVersion)) { + $DestinationPath = Get-Absolute-Path $(Join-Path -Path $OutPath -ChildPath $entry.FullName) + $DestinationDir = Split-Path -Parent $DestinationPath + $OverrideFiles=$OverrideNonVersionedFiles -Or (-Not (Test-Path $DestinationPath)) + if ((-Not $DestinationPath.EndsWith("\")) -And $OverrideFiles) { + New-Item -ItemType Directory -Force -Path $DestinationDir | Out-Null + [System.IO.Compression.ZipFileExtensions]::ExtractToFile($entry, $DestinationPath, $OverrideNonVersionedFiles) + } + } + } + } + finally { + if ($Zip -ne $null) { + $Zip.Dispose() + } + } +} + +function DownloadFile($Source, [string]$OutPath) { + if ($Source -notlike "http*") { + # Using System.IO.Path.GetFullPath to get the current directory + # does not work in this context - $pwd gives the current directory + if (![System.IO.Path]::IsPathRooted($Source)) { + $Source = $(Join-Path -Path $pwd -ChildPath $Source) + } + $Source = Get-Absolute-Path $Source + Say "Copying file from $Source to $OutPath" + Copy-Item $Source $OutPath + return + } + + $Stream = $null + + try { + $Response = GetHTTPResponse -Uri $Source + $Stream = $Response.Content.ReadAsStreamAsync().Result + $File = [System.IO.File]::Create($OutPath) + $Stream.CopyTo($File) + $File.Close() + } + finally { + if ($Stream -ne $null) { + $Stream.Dispose() + } + } +} + +function SafeRemoveFile($Path) { + try { + if (Test-Path $Path) { + Remove-Item $Path + Say-Verbose "The temporary file `"$Path`" was removed." + } + else + { + Say-Verbose "The temporary file `"$Path`" does not exist, therefore is not removed." + } + } + catch + { + Say-Warning "Failed to remove the temporary file: `"$Path`", remove it manually." + } +} + +function Prepend-Sdk-InstallRoot-To-Path([string]$InstallRoot, [string]$BinFolderRelativePath) { + $BinPath = Get-Absolute-Path $(Join-Path -Path $InstallRoot -ChildPath $BinFolderRelativePath) + if (-Not $NoPath) { + $SuffixedBinPath = "$BinPath;" + if (-Not $env:path.Contains($SuffixedBinPath)) { + Say "Adding to current process PATH: `"$BinPath`". Note: This change will not be visible if PowerShell was run as a child process." + $env:path = $SuffixedBinPath + $env:path + } else { + Say-Verbose "Current process PATH already contains `"$BinPath`"" + } + } + else { + Say "Binaries of dotnet can be found in $BinPath" + } +} + +function Get-AkaMSDownloadLink([string]$Channel, [string]$Quality, [bool]$Internal, [string]$Product, [string]$Architecture) { + Say-Invocation $MyInvocation + + #quality is not supported for LTS or current channel + if (![string]::IsNullOrEmpty($Quality) -and (@("LTS", "current") -contains $Channel)) { + $Quality = "" + Say-Warning "Specifying quality for current or LTS channel is not supported, the quality will be ignored." + } + Say-Verbose "Retrieving primary payload URL from aka.ms link for channel: '$Channel', quality: '$Quality' product: '$Product', os: 'win', architecture: '$Architecture'." + + #construct aka.ms link + $akaMsLink = "https://aka.ms/dotnet" + if ($Internal) { + $akaMsLink += "/internal" + } + $akaMsLink += "/$Channel" + if (-not [string]::IsNullOrEmpty($Quality)) { + $akaMsLink +="/$Quality" + } + $akaMsLink +="/$Product-win-$Architecture.zip" + Say-Verbose "Constructed aka.ms link: '$akaMsLink'." + $akaMsDownloadLink=$null + + for ($maxRedirections = 9; $maxRedirections -ge 0; $maxRedirections--) + { + #get HTTP response + #do not pass credentials as a part of the $akaMsLink and do not apply credentials in the GetHTTPResponse function + #otherwise the redirect link would have credentials as well + #it would result in applying credentials twice to the resulting link and thus breaking it, and in echoing credentials to the output as a part of redirect link + $Response= GetHTTPResponse -Uri $akaMsLink -HeaderOnly $true -DisableRedirect $true -DisableFeedCredential $true + Say-Verbose "Received response:`n$Response" + + if ([string]::IsNullOrEmpty($Response)) { + Say-Verbose "The link '$akaMsLink' is not valid: failed to get redirect location. The resource is not available." + return $null + } + + #if HTTP code is 301 (Moved Permanently), the redirect link exists + if ($Response.StatusCode -eq 301) + { + try { + $akaMsDownloadLink = $Response.Headers.GetValues("Location")[0] + + if ([string]::IsNullOrEmpty($akaMsDownloadLink)) { + Say-Verbose "The link '$akaMsLink' is not valid: server returned 301 (Moved Permanently), but the headers do not contain the redirect location." + return $null + } + + Say-Verbose "The redirect location retrieved: '$akaMsDownloadLink'." + # This may yet be a link to another redirection. Attempt to retrieve the page again. + $akaMsLink = $akaMsDownloadLink + continue + } + catch { + Say-Verbose "The link '$akaMsLink' is not valid: failed to get redirect location." + return $null + } + } + elseif ((($Response.StatusCode -lt 300) -or ($Response.StatusCode -ge 400)) -and (-not [string]::IsNullOrEmpty($akaMsDownloadLink))) + { + # Redirections have ended. + return $akaMsDownloadLink + } + + Say-Verbose "The link '$akaMsLink' is not valid: failed to retrieve the redirection location." + return $null + } + + Say-Verbose "Aka.ms links have redirected more than the maximum allowed redirections. This may be caused by a cyclic redirection of aka.ms links." + return $null + +} + +Say "Note that the intended use of this script is for Continuous Integration (CI) scenarios, where:" +Say "- The SDK needs to be installed without user interaction and without admin rights." +Say "- The SDK installation doesn't need to persist across multiple CI runs." +Say "To set up a development environment or to run apps, use installers rather than this script. Visit https://dotnet.microsoft.com/download to get the installer.`r`n" + +if ($Internal -and [string]::IsNullOrWhitespace($FeedCredential)) { + $message = "Provide credentials via -FeedCredential parameter." + if ($DryRun) { + Say-Warning "$message" + } else { + throw "$message" + } +} + +#FeedCredential should start with "?", for it to be added to the end of the link. +#adding "?" at the beginning of the FeedCredential if needed. +if ((![string]::IsNullOrWhitespace($FeedCredential)) -and ($FeedCredential[0] -ne '?')) { + $FeedCredential = "?" + $FeedCredential +} + +$CLIArchitecture = Get-CLIArchitecture-From-Architecture $Architecture +$NormalizedQuality = Get-NormalizedQuality $Quality +Say-Verbose "Normalized quality: '$NormalizedQuality'" +$NormalizedChannel = Get-NormalizedChannel $Channel +Say-Verbose "Normalized channel: '$NormalizedChannel'" +$NormalizedProduct = Get-NormalizedProduct $Runtime +Say-Verbose "Normalized product: '$NormalizedProduct'" +$DownloadLink = $null + +#try to get download location from aka.ms link +#not applicable when exact version is specified via command or json file +if ([string]::IsNullOrEmpty($JSonFile) -and ($Version -eq "latest")) { + $AkaMsDownloadLink = Get-AkaMSDownloadLink -Channel $NormalizedChannel -Quality $NormalizedQuality -Internal $Internal -Product $NormalizedProduct -Architecture $CLIArchitecture + + if ([string]::IsNullOrEmpty($AkaMsDownloadLink)){ + if (-not [string]::IsNullOrEmpty($NormalizedQuality)) { + # if quality is specified - exit with error - there is no fallback approach + Say-Error "Failed to locate the latest version in the channel '$NormalizedChannel' with '$NormalizedQuality' quality for '$NormalizedProduct', os: 'win', architecture: '$CLIArchitecture'." + Say-Error "Refer to: https://aka.ms/dotnet-os-lifecycle for information on .NET Core support." + throw "aka.ms link resolution failure" + } + Say-Verbose "Falling back to latest.version file approach." + } + else { + Say-Verbose "Retrieved primary named payload URL from aka.ms link: '$AkaMsDownloadLink'." + $DownloadLink = $AkaMsDownloadLink + Say-Verbose "Downloading using legacy url will not be attempted." + $LegacyDownloadLink = $null + + #get version from the path + $pathParts = $DownloadLink.Split('/') + if ($pathParts.Length -ge 2) { + $SpecificVersion = $pathParts[$pathParts.Length - 2] + Say-Verbose "Version: '$SpecificVersion'." + } + else { + Say-Error "Failed to extract the version from download link '$DownloadLink'." + } + + #retrieve effective (product) version + $EffectiveVersion = Get-Product-Version -AzureFeed $AzureFeed -SpecificVersion $SpecificVersion -PackageDownloadLink $DownloadLink + Say-Verbose "Product version: '$EffectiveVersion'." + } +} + +if ([string]::IsNullOrEmpty($DownloadLink)) { + $SpecificVersion = Get-Specific-Version-From-Version -AzureFeed $AzureFeed -Channel $Channel -Version $Version -JSonFile $JSonFile + $DownloadLink, $EffectiveVersion = Get-Download-Link -AzureFeed $AzureFeed -SpecificVersion $SpecificVersion -CLIArchitecture $CLIArchitecture + $LegacyDownloadLink = Get-LegacyDownload-Link -AzureFeed $AzureFeed -SpecificVersion $SpecificVersion -CLIArchitecture $CLIArchitecture +} + + +$InstallRoot = Resolve-Installation-Path $InstallDir +Say-Verbose "InstallRoot: $InstallRoot" +$ScriptName = $MyInvocation.MyCommand.Name + +if ($DryRun) { + Say "Payload URLs:" + Say "Primary named payload URL: ${DownloadLink}" + if ($LegacyDownloadLink) { + Say "Legacy named payload URL: ${LegacyDownloadLink}" + } + $RepeatableCommand = ".\$ScriptName -Version `"$SpecificVersion`" -InstallDir `"$InstallRoot`" -Architecture `"$CLIArchitecture`"" + if ($Runtime -eq "dotnet") { + $RepeatableCommand+=" -Runtime `"dotnet`"" + } + elseif ($Runtime -eq "aspnetcore") { + $RepeatableCommand+=" -Runtime `"aspnetcore`"" + } + + if (-not [string]::IsNullOrEmpty($NormalizedQuality)) + { + $RepeatableCommand+=" -Quality `"$NormalizedQuality`"" + } + + foreach ($key in $MyInvocation.BoundParameters.Keys) { + if (-not (@("Architecture","Channel","DryRun","InstallDir","Runtime","SharedRuntime","Version","Quality","FeedCredential") -contains $key)) { + $RepeatableCommand+=" -$key `"$($MyInvocation.BoundParameters[$key])`"" + } + } + if ($MyInvocation.BoundParameters.Keys -contains "FeedCredential") { + $RepeatableCommand+=" -FeedCredential `"`"" + } + Say "Repeatable invocation: $RepeatableCommand" + if ($SpecificVersion -ne $EffectiveVersion) + { + Say "NOTE: Due to finding a version manifest with this runtime, it would actually install with version '$EffectiveVersion'" + } + + return +} + +if ($Runtime -eq "dotnet") { + $assetName = ".NET Core Runtime" + $dotnetPackageRelativePath = "shared\Microsoft.NETCore.App" +} +elseif ($Runtime -eq "aspnetcore") { + $assetName = "ASP.NET Core Runtime" + $dotnetPackageRelativePath = "shared\Microsoft.AspNetCore.App" +} +elseif ($Runtime -eq "windowsdesktop") { + $assetName = ".NET Core Windows Desktop Runtime" + $dotnetPackageRelativePath = "shared\Microsoft.WindowsDesktop.App" +} +elseif (-not $Runtime) { + $assetName = ".NET Core SDK" + $dotnetPackageRelativePath = "sdk" +} +else { + throw "Invalid value for `$Runtime" +} + +if ($SpecificVersion -ne $EffectiveVersion) +{ + Say "Performing installation checks for effective version: $EffectiveVersion" + $SpecificVersion = $EffectiveVersion +} + +# Check if the SDK version is already installed. +$isAssetInstalled = Is-Dotnet-Package-Installed -InstallRoot $InstallRoot -RelativePathToPackage $dotnetPackageRelativePath -SpecificVersion $SpecificVersion +if ($isAssetInstalled) { + Say "$assetName version $SpecificVersion is already installed." + Prepend-Sdk-InstallRoot-To-Path -InstallRoot $InstallRoot -BinFolderRelativePath $BinFolderRelativePath + return +} + +New-Item -ItemType Directory -Force -Path $InstallRoot | Out-Null + +$installDrive = $((Get-Item $InstallRoot -Force).PSDrive.Name); +$diskInfo = $null +try{ + $diskInfo = Get-PSDrive -Name $installDrive +} +catch{ + Say-Warning "Failed to check the disk space. Installation will continue, but it may fail if you do not have enough disk space." +} + +if ( ($diskInfo -ne $null) -and ($diskInfo.Free / 1MB -le 100)) { + throw "There is not enough disk space on drive ${installDrive}:" +} + +$ZipPath = [System.IO.Path]::combine([System.IO.Path]::GetTempPath(), [System.IO.Path]::GetRandomFileName()) +Say-Verbose "Zip path: $ZipPath" + +$DownloadFailed = $false + +$PrimaryDownloadStatusCode = 0 +$LegacyDownloadStatusCode = 0 + +$PrimaryDownloadFailedMsg = "" +$LegacyDownloadFailedMsg = "" + +Say "Downloading primary link $DownloadLink" +try { + DownloadFile -Source $DownloadLink -OutPath $ZipPath +} +catch { + if ($PSItem.Exception.Data.Contains("StatusCode")) { + $PrimaryDownloadStatusCode = $PSItem.Exception.Data["StatusCode"] + } + + if ($PSItem.Exception.Data.Contains("ErrorMessage")) { + $PrimaryDownloadFailedMsg = $PSItem.Exception.Data["ErrorMessage"] + } else { + $PrimaryDownloadFailedMsg = $PSItem.Exception.Message + } + + if ($PrimaryDownloadStatusCode -eq 404) { + Say "The resource at $DownloadLink is not available." + } else { + Say $PSItem.Exception.Message + } + + SafeRemoveFile -Path $ZipPath + + if ($LegacyDownloadLink) { + $DownloadLink = $LegacyDownloadLink + $ZipPath = [System.IO.Path]::combine([System.IO.Path]::GetTempPath(), [System.IO.Path]::GetRandomFileName()) + Say-Verbose "Legacy zip path: $ZipPath" + Say "Downloading legacy link $DownloadLink" + try { + DownloadFile -Source $DownloadLink -OutPath $ZipPath + } + catch { + if ($PSItem.Exception.Data.Contains("StatusCode")) { + $LegacyDownloadStatusCode = $PSItem.Exception.Data["StatusCode"] + } + + if ($PSItem.Exception.Data.Contains("ErrorMessage")) { + $LegacyDownloadFailedMsg = $PSItem.Exception.Data["ErrorMessage"] + } else { + $LegacyDownloadFailedMsg = $PSItem.Exception.Message + } + + if ($LegacyDownloadStatusCode -eq 404) { + Say "The resource at $DownloadLink is not available." + } else { + Say $PSItem.Exception.Message + } + + SafeRemoveFile -Path $ZipPath + $DownloadFailed = $true + } + } + else { + $DownloadFailed = $true + } +} + +if ($DownloadFailed) { + if (($PrimaryDownloadStatusCode -eq 404) -and ((-not $LegacyDownloadLink) -or ($LegacyDownloadStatusCode -eq 404))) { + throw "Could not find `"$assetName`" with version = $SpecificVersion`nRefer to: https://aka.ms/dotnet-os-lifecycle for information on .NET Core support" + } else { + # 404-NotFound is an expected response if it goes from only one of the links, do not show that error. + # If primary path is available (not 404-NotFound) then show the primary error else show the legacy error. + if ($PrimaryDownloadStatusCode -ne 404) { + throw "Could not download `"$assetName`" with version = $SpecificVersion`r`n$PrimaryDownloadFailedMsg" + } + if (($LegacyDownloadLink) -and ($LegacyDownloadStatusCode -ne 404)) { + throw "Could not download `"$assetName`" with version = $SpecificVersion`r`n$LegacyDownloadFailedMsg" + } + throw "Could not download `"$assetName`" with version = $SpecificVersion" + } +} + +Say "Extracting zip from $DownloadLink" +Extract-Dotnet-Package -ZipPath $ZipPath -OutPath $InstallRoot + +# Check if the SDK version is installed; if not, fail the installation. +$isAssetInstalled = $false + +# if the version contains "RTM" or "servicing"; check if a 'release-type' SDK version is installed. +if ($SpecificVersion -Match "rtm" -or $SpecificVersion -Match "servicing") { + $ReleaseVersion = $SpecificVersion.Split("-")[0] + Say-Verbose "Checking installation: version = $ReleaseVersion" + $isAssetInstalled = Is-Dotnet-Package-Installed -InstallRoot $InstallRoot -RelativePathToPackage $dotnetPackageRelativePath -SpecificVersion $ReleaseVersion +} + +# Check if the SDK version is installed. +if (!$isAssetInstalled) { + Say-Verbose "Checking installation: version = $SpecificVersion" + $isAssetInstalled = Is-Dotnet-Package-Installed -InstallRoot $InstallRoot -RelativePathToPackage $dotnetPackageRelativePath -SpecificVersion $SpecificVersion +} + +# Version verification failed. More likely something is wrong either with the downloaded content or with the verification algorithm. +if (!$isAssetInstalled) { + Say-Error "Failed to verify the version of installed `"$assetName`".`nInstallation source: $DownloadLink.`nInstallation location: $InstallRoot.`nReport the bug at https://github.com/dotnet/install-scripts/issues." + throw "`"$assetName`" with version = $SpecificVersion failed to install with an unknown error." +} + +SafeRemoveFile -Path $ZipPath + +Prepend-Sdk-InstallRoot-To-Path -InstallRoot $InstallRoot -BinFolderRelativePath $BinFolderRelativePath + +Say "Note that the script does not resolve dependencies during installation." +Say "To check the list of dependencies, go to https://docs.microsoft.com/dotnet/core/install/windows#dependencies" +Say "Installation finished" + +# SIG # Begin signature block +# MIIjhgYJKoZIhvcNAQcCoIIjdzCCI3MCAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDO8obeUp97UA1H +# qy3NSLDwxxLLlEbGxeCzMOcKVT/3eKCCDYEwggX/MIID56ADAgECAhMzAAAB32vw +# LpKnSrTQAAAAAAHfMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD +# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy +# b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p +# bmcgUENBIDIwMTEwHhcNMjAxMjE1MjEzMTQ1WhcNMjExMjAyMjEzMTQ1WjB0MQsw +# CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u +# ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy +# b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +# AQC2uxlZEACjqfHkuFyoCwfL25ofI9DZWKt4wEj3JBQ48GPt1UsDv834CcoUUPMn +# s/6CtPoaQ4Thy/kbOOg/zJAnrJeiMQqRe2Lsdb/NSI2gXXX9lad1/yPUDOXo4GNw +# PjXq1JZi+HZV91bUr6ZjzePj1g+bepsqd/HC1XScj0fT3aAxLRykJSzExEBmU9eS +# yuOwUuq+CriudQtWGMdJU650v/KmzfM46Y6lo/MCnnpvz3zEL7PMdUdwqj/nYhGG +# 3UVILxX7tAdMbz7LN+6WOIpT1A41rwaoOVnv+8Ua94HwhjZmu1S73yeV7RZZNxoh +# EegJi9YYssXa7UZUUkCCA+KnAgMBAAGjggF+MIIBejAfBgNVHSUEGDAWBgorBgEE +# AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQUOPbML8IdkNGtCfMmVPtvI6VZ8+Mw +# UAYDVR0RBEkwR6RFMEMxKTAnBgNVBAsTIE1pY3Jvc29mdCBPcGVyYXRpb25zIFB1 +# ZXJ0byBSaWNvMRYwFAYDVQQFEw0yMzAwMTIrNDYzMDA5MB8GA1UdIwQYMBaAFEhu +# ZOVQBdOCqhc3NyK1bajKdQKVMFQGA1UdHwRNMEswSaBHoEWGQ2h0dHA6Ly93d3cu +# bWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY0NvZFNpZ1BDQTIwMTFfMjAxMS0w +# Ny0wOC5jcmwwYQYIKwYBBQUHAQEEVTBTMFEGCCsGAQUFBzAChkVodHRwOi8vd3d3 +# Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY0NvZFNpZ1BDQTIwMTFfMjAx +# MS0wNy0wOC5jcnQwDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQsFAAOCAgEAnnqH +# tDyYUFaVAkvAK0eqq6nhoL95SZQu3RnpZ7tdQ89QR3++7A+4hrr7V4xxmkB5BObS +# 0YK+MALE02atjwWgPdpYQ68WdLGroJZHkbZdgERG+7tETFl3aKF4KpoSaGOskZXp +# TPnCaMo2PXoAMVMGpsQEQswimZq3IQ3nRQfBlJ0PoMMcN/+Pks8ZTL1BoPYsJpok +# t6cql59q6CypZYIwgyJ892HpttybHKg1ZtQLUlSXccRMlugPgEcNZJagPEgPYni4 +# b11snjRAgf0dyQ0zI9aLXqTxWUU5pCIFiPT0b2wsxzRqCtyGqpkGM8P9GazO8eao +# mVItCYBcJSByBx/pS0cSYwBBHAZxJODUqxSXoSGDvmTfqUJXntnWkL4okok1FiCD +# Z4jpyXOQunb6egIXvkgQ7jb2uO26Ow0m8RwleDvhOMrnHsupiOPbozKroSa6paFt +# VSh89abUSooR8QdZciemmoFhcWkEwFg4spzvYNP4nIs193261WyTaRMZoceGun7G +# CT2Rl653uUj+F+g94c63AhzSq4khdL4HlFIP2ePv29smfUnHtGq6yYFDLnT0q/Y+ +# Di3jwloF8EWkkHRtSuXlFUbTmwr/lDDgbpZiKhLS7CBTDj32I0L5i532+uHczw82 +# oZDmYmYmIUSMbZOgS65h797rj5JJ6OkeEUJoAVwwggd6MIIFYqADAgECAgphDpDS +# AAAAAAADMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMK +# V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0 +# IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0 +# ZSBBdXRob3JpdHkgMjAxMTAeFw0xMTA3MDgyMDU5MDlaFw0yNjA3MDgyMTA5MDla +# MH4xCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS +# ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMT +# H01pY3Jvc29mdCBDb2RlIFNpZ25pbmcgUENBIDIwMTEwggIiMA0GCSqGSIb3DQEB +# AQUAA4ICDwAwggIKAoICAQCr8PpyEBwurdhuqoIQTTS68rZYIZ9CGypr6VpQqrgG +# OBoESbp/wwwe3TdrxhLYC/A4wpkGsMg51QEUMULTiQ15ZId+lGAkbK+eSZzpaF7S +# 35tTsgosw6/ZqSuuegmv15ZZymAaBelmdugyUiYSL+erCFDPs0S3XdjELgN1q2jz +# y23zOlyhFvRGuuA4ZKxuZDV4pqBjDy3TQJP4494HDdVceaVJKecNvqATd76UPe/7 +# 4ytaEB9NViiienLgEjq3SV7Y7e1DkYPZe7J7hhvZPrGMXeiJT4Qa8qEvWeSQOy2u +# M1jFtz7+MtOzAz2xsq+SOH7SnYAs9U5WkSE1JcM5bmR/U7qcD60ZI4TL9LoDho33 +# X/DQUr+MlIe8wCF0JV8YKLbMJyg4JZg5SjbPfLGSrhwjp6lm7GEfauEoSZ1fiOIl +# XdMhSz5SxLVXPyQD8NF6Wy/VI+NwXQ9RRnez+ADhvKwCgl/bwBWzvRvUVUvnOaEP +# 6SNJvBi4RHxF5MHDcnrgcuck379GmcXvwhxX24ON7E1JMKerjt/sW5+v/N2wZuLB +# l4F77dbtS+dJKacTKKanfWeA5opieF+yL4TXV5xcv3coKPHtbcMojyyPQDdPweGF +# RInECUzF1KVDL3SV9274eCBYLBNdYJWaPk8zhNqwiBfenk70lrC8RqBsmNLg1oiM +# CwIDAQABo4IB7TCCAekwEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFEhuZOVQ +# BdOCqhc3NyK1bajKdQKVMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1Ud +# DwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFHItOgIxkEO5FAVO +# 4eqnxzHRI4k0MFoGA1UdHwRTMFEwT6BNoEuGSWh0dHA6Ly9jcmwubWljcm9zb2Z0 +# LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1dDIwMTFfMjAxMV8wM18y +# Mi5jcmwwXgYIKwYBBQUHAQEEUjBQME4GCCsGAQUFBzAChkJodHRwOi8vd3d3Lm1p +# Y3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jvb0NlckF1dDIwMTFfMjAxMV8wM18y +# Mi5jcnQwgZ8GA1UdIASBlzCBlDCBkQYJKwYBBAGCNy4DMIGDMD8GCCsGAQUFBwIB +# FjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2RvY3MvcHJpbWFyeWNw +# cy5odG0wQAYIKwYBBQUHAgIwNB4yIB0ATABlAGcAYQBsAF8AcABvAGwAaQBjAHkA +# XwBzAHQAYQB0AGUAbQBlAG4AdAAuIB0wDQYJKoZIhvcNAQELBQADggIBAGfyhqWY +# 4FR5Gi7T2HRnIpsLlhHhY5KZQpZ90nkMkMFlXy4sPvjDctFtg/6+P+gKyju/R6mj +# 82nbY78iNaWXXWWEkH2LRlBV2AySfNIaSxzzPEKLUtCw/WvjPgcuKZvmPRul1LUd +# d5Q54ulkyUQ9eHoj8xN9ppB0g430yyYCRirCihC7pKkFDJvtaPpoLpWgKj8qa1hJ +# Yx8JaW5amJbkg/TAj/NGK978O9C9Ne9uJa7lryft0N3zDq+ZKJeYTQ49C/IIidYf +# wzIY4vDFLc5bnrRJOQrGCsLGra7lstnbFYhRRVg4MnEnGn+x9Cf43iw6IGmYslmJ +# aG5vp7d0w0AFBqYBKig+gj8TTWYLwLNN9eGPfxxvFX1Fp3blQCplo8NdUmKGwx1j +# NpeG39rz+PIWoZon4c2ll9DuXWNB41sHnIc+BncG0QaxdR8UvmFhtfDcxhsEvt9B +# xw4o7t5lL+yX9qFcltgA1qFGvVnzl6UJS0gQmYAf0AApxbGbpT9Fdx41xtKiop96 +# eiL6SJUfq/tHI4D1nvi/a7dLl+LrdXga7Oo3mXkYS//WsyNodeav+vyL6wuA6mk7 +# r/ww7QRMjt/fdW1jkT3RnVZOT7+AVyKheBEyIXrvQQqxP/uozKRdwaGIm1dxVk5I +# RcBCyZt2WwqASGv9eZ/BvW1taslScxMNelDNMYIVWzCCFVcCAQEwgZUwfjELMAkG +# A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx +# HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEoMCYGA1UEAxMfTWljcm9z +# b2Z0IENvZGUgU2lnbmluZyBQQ0EgMjAxMQITMwAAAd9r8C6Sp0q00AAAAAAB3zAN +# BglghkgBZQMEAgEFAKCBrjAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgor +# BgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG9w0BCQQxIgQg7EExOCvj +# ZDkub0Fc7HAVivJIlz+Omt11fROkTFKR+KQwQgYKKwYBBAGCNwIBDDE0MDKgFIAS +# AE0AaQBjAHIAbwBzAG8AZgB0oRqAGGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbTAN +# BgkqhkiG9w0BAQEFAASCAQBPvflyU+HQEIM4XvImAK2eQp74ABDaxeWVbl21ZF0L +# cKf5GkIzdvlCoKxforXBkRIBtLxU9Sb4ff+AO3jiw2M36ZLwZQRYcn003FTR3BAY +# 3XVGdxb64vCEMUb6Dzh9Hb1lmJjyn2NHsB514ZuUez4v/UIsV9e3TV731kY6gcQV +# 3ridn3IKj3RMJGtPD5qxVMZohvVIy1Xiz4n/9BpBkk4HHsSuGPmBj08jWnIcI5TF +# eXYC4LonTOFZLcsKiW4eMRaDt0fXxJjhQF8DSJX3PAxCC73YkPrJJyXAkGNHcXCg +# 2Lyi9Yd6oV0nbJlCSLWK7jcn5lxUIgsrb+U6F8yXoNsXoYIS5TCCEuEGCisGAQQB +# gjcDAwExghLRMIISzQYJKoZIhvcNAQcCoIISvjCCEroCAQMxDzANBglghkgBZQME +# AgEFADCCAVEGCyqGSIb3DQEJEAEEoIIBQASCATwwggE4AgEBBgorBgEEAYRZCgMB +# MDEwDQYJYIZIAWUDBAIBBQAEIEwFz8qgqbYKKOXyaZMOTE0/ve/rpdJjnq1eyDVG +# mWB6AgZhHpsDT9wYEzIwMjEwODIzMTUxNzA2LjAyMVowBIACAfSggdCkgc0wgcox +# CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt +# b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJTAjBgNVBAsTHE1p +# Y3Jvc29mdCBBbWVyaWNhIE9wZXJhdGlvbnMxJjAkBgNVBAsTHVRoYWxlcyBUU1Mg +# RVNOOjhBODItRTM0Ri05RERBMSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFt +# cCBTZXJ2aWNloIIOPDCCBPEwggPZoAMCAQICEzMAAAFLT7KmSNXkwlEAAAAAAUsw +# DQYJKoZIhvcNAQELBQAwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0 +# b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh +# dGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwHhcN +# MjAxMTEyMTgyNTU5WhcNMjIwMjExMTgyNTU5WjCByjELMAkGA1UEBhMCVVMxEzAR +# BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1p +# Y3Jvc29mdCBDb3Jwb3JhdGlvbjElMCMGA1UECxMcTWljcm9zb2Z0IEFtZXJpY2Eg +# T3BlcmF0aW9uczEmMCQGA1UECxMdVGhhbGVzIFRTUyBFU046OEE4Mi1FMzRGLTlE +# REExJTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2UwggEiMA0G +# CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQChNnpQx3YuJr/ivobPoLtpQ9egUFl8 +# THdWZ6SAKIJdtP3L24D3/d63ommmjZjCyrQm+j/1tHDAwjQGuOwYvn79ecPCQfAB +# 91JnEp/wP4BMF2SXyMf8k9R84RthIdfGHPXTWqzpCCfNWolVEcUVm8Ad/r1LrikR +# O+4KKo6slDQJKsgKApfBU/9J7Rudvhw1rEQw0Nk1BRGWjrIp7/uWoUIfR4rcl6U1 +# utOiYIonC87PPpAJQXGRsDdKnVFF4NpWvMiyeuksn5t/Otwz82sGlne/HNQpmMzi +# gR8cZ8eXEDJJNIZxov9WAHHj28gUE29D8ivAT706ihxvTv50ZY8W51uxAgMBAAGj +# ggEbMIIBFzAdBgNVHQ4EFgQUUqpqftASlue6K3LePlTTn01K68YwHwYDVR0jBBgw +# FoAU1WM6XIoxkPNDe3xGG8UzaFqFbVUwVgYDVR0fBE8wTTBLoEmgR4ZFaHR0cDov +# L2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvTWljVGltU3RhUENB +# XzIwMTAtMDctMDEuY3JsMFoGCCsGAQUFBwEBBE4wTDBKBggrBgEFBQcwAoY+aHR0 +# cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNUaW1TdGFQQ0FfMjAx +# MC0wNy0wMS5jcnQwDAYDVR0TAQH/BAIwADATBgNVHSUEDDAKBggrBgEFBQcDCDAN +# BgkqhkiG9w0BAQsFAAOCAQEAFtq51Zc/O1AfJK4tEB2Nr8bGEVD5qQ8l8gXIQMrM +# ZYtddHH+cGiqgF/4GmvmPfl5FAYh+gf/8Yd3q4/iD2+K4LtJbs/3v6mpyBl1mQ4v +# usK65dAypWmiT1W3FiXjsmCIkjSDDsKLFBYH5yGFnNFOEMgL+O7u4osH42f80nc2 +# WdnZV6+OvW035XPV6ZttUBfFWHdIbUkdOG1O2n4yJm10OfacItZ08fzgMMqE+f/S +# TgVWNCHbR2EYqTWayrGP69jMwtVD9BGGTWti1XjpvE6yKdO8H9nuRi3L+C6jYntf +# aEmBTbnTFEV+kRx1CNcpSb9os86CAUehZU1aRzQ6CQ/pjzCCBnEwggRZoAMCAQIC +# CmEJgSoAAAAAAAIwDQYJKoZIhvcNAQELBQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYD +# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy +# b3NvZnQgQ29ycG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBSb290IENlcnRp +# ZmljYXRlIEF1dGhvcml0eSAyMDEwMB4XDTEwMDcwMTIxMzY1NVoXDTI1MDcwMTIx +# NDY1NVowfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV +# BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQG +# A1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwggEiMA0GCSqGSIb3 +# DQEBAQUAA4IBDwAwggEKAoIBAQCpHQ28dxGKOiDs/BOX9fp/aZRrdFQQ1aUKAIKF +# ++18aEssX8XD5WHCdrc+Zitb8BVTJwQxH0EbGpUdzgkTjnxhMFmxMEQP8WCIhFRD +# DNdNuDgIs0Ldk6zWczBXJoKjRQ3Q6vVHgc2/JGAyWGBG8lhHhjKEHnRhZ5FfgVSx +# z5NMksHEpl3RYRNuKMYa+YaAu99h/EbBJx0kZxJyGiGKr0tkiVBisV39dx898Fd1 +# rL2KQk1AUdEPnAY+Z3/1ZsADlkR+79BL/W7lmsqxqPJ6Kgox8NpOBpG2iAg16Hgc +# sOmZzTznL0S6p/TcZL2kAcEgCZN4zfy8wMlEXV4WnAEFTyJNAgMBAAGjggHmMIIB +# 4jAQBgkrBgEEAYI3FQEEAwIBADAdBgNVHQ4EFgQU1WM6XIoxkPNDe3xGG8UzaFqF +# bVUwGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud +# EwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU1fZWy4/oolxiaNE9lJBb186aGMQwVgYD +# VR0fBE8wTTBLoEmgR4ZFaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwv +# cHJvZHVjdHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3JsMFoGCCsGAQUFBwEB +# BE4wTDBKBggrBgEFBQcwAoY+aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9j +# ZXJ0cy9NaWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcnQwgaAGA1UdIAEB/wSBlTCB +# kjCBjwYJKwYBBAGCNy4DMIGBMD0GCCsGAQUFBwIBFjFodHRwOi8vd3d3Lm1pY3Jv +# c29mdC5jb20vUEtJL2RvY3MvQ1BTL2RlZmF1bHQuaHRtMEAGCCsGAQUFBwICMDQe +# MiAdAEwAZQBnAGEAbABfAFAAbwBsAGkAYwB5AF8AUwB0AGEAdABlAG0AZQBuAHQA +# LiAdMA0GCSqGSIb3DQEBCwUAA4ICAQAH5ohRDeLG4Jg/gXEDPZ2joSFvs+umzPUx +# vs8F4qn++ldtGTCzwsVmyWrf9efweL3HqJ4l4/m87WtUVwgrUYJEEvu5U4zM9GAS +# inbMQEBBm9xcF/9c+V4XNZgkVkt070IQyK+/f8Z/8jd9Wj8c8pl5SpFSAK84Dxf1 +# L3mBZdmptWvkx872ynoAb0swRCQiPM/tA6WWj1kpvLb9BOFwnzJKJ/1Vry/+tuWO +# M7tiX5rbV0Dp8c6ZZpCM/2pif93FSguRJuI57BlKcWOdeyFtw5yjojz6f32WapB4 +# pm3S4Zz5Hfw42JT0xqUKloakvZ4argRCg7i1gJsiOCC1JeVk7Pf0v35jWSUPei45 +# V3aicaoGig+JFrphpxHLmtgOR5qAxdDNp9DvfYPw4TtxCd9ddJgiCGHasFAeb73x +# 4QDf5zEHpJM692VHeOj4qEir995yfmFrb3epgcunCaw5u+zGy9iCtHLNHfS4hQEe +# gPsbiSpUObJb2sgNVZl6h3M7COaYLeqN4DMuEin1wC9UJyH3yKxO2ii4sanblrKn +# QqLJzxlBTeCG+SqaoxFmMNO7dDJL32N79ZmKLxvHIa9Zta7cRDyXUHHXodLFVeNp +# 3lfB0d4wwP3M5k37Db9dT+mdHhk4L7zPWAUu7w2gUDXa7wknHNWzfjUeCLraNtvT +# X4/edIhJEqGCAs4wggI3AgEBMIH4oYHQpIHNMIHKMQswCQYDVQQGEwJVUzETMBEG +# A1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWlj +# cm9zb2Z0IENvcnBvcmF0aW9uMSUwIwYDVQQLExxNaWNyb3NvZnQgQW1lcmljYSBP +# cGVyYXRpb25zMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVTTjo4QTgyLUUzNEYtOURE +# QTElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaIjCgEBMAcG +# BSsOAwIaAxUAkToz97fseHxNOUSQ5O/bBVSF+e6ggYMwgYCkfjB8MQswCQYDVQQG +# EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG +# A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQg +# VGltZS1TdGFtcCBQQ0EgMjAxMDANBgkqhkiG9w0BAQUFAAIFAOTNtrcwIhgPMjAy +# MTA4MjMxMzU1MDNaGA8yMDIxMDgyNDEzNTUwM1owdzA9BgorBgEEAYRZCgQBMS8w +# LTAKAgUA5M22twIBADAKAgEAAgIcfAIB/zAHAgEAAgIQOTAKAgUA5M8INwIBADA2 +# BgorBgEEAYRZCgQCMSgwJjAMBgorBgEEAYRZCgMCoAowCAIBAAIDB6EgoQowCAIB +# AAIDAYagMA0GCSqGSIb3DQEBBQUAA4GBADrUnASEIEovjIFdqxhyYsyiBSfNeD7e +# W4qeRl1B4DTAY8Z/U1SpnK8yy7r6oZn0D8og+QJmnWEnCPqNXAreyg8tlFyTF1TV +# K6uUlslIY4WCmrAECIFua/DuksTerny66SBw4aSEeQHtGiynnR87WcdqItBJxxRA +# pElXzs8QzC0EMYIDDTCCAwkCAQEwgZMwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgT +# Cldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29m +# dCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENB +# IDIwMTACEzMAAAFLT7KmSNXkwlEAAAAAAUswDQYJYIZIAWUDBAIBBQCgggFKMBoG +# CSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAvBgkqhkiG9w0BCQQxIgQg87M/Jiqh +# MlaXNWAIAn7CM9CZw6QCPgBx3voUSIH6+qUwgfoGCyqGSIb3DQEJEAIvMYHqMIHn +# MIHkMIG9BCBr9u6EInnsZYEts/Fj/rIFv0YZW1ynhXKOP2hVPUU5IzCBmDCBgKR+ +# MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS +# ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMT +# HU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwAhMzAAABS0+ypkjV5MJRAAAA +# AAFLMCIEIGs9Mn51TUGRleeUO5lQCRHZSu0G/8Ir92l3NgMGq1/GMA0GCSqGSIb3 +# DQEBCwUABIIBAA1oBIiM3guh89/Pvwwcn4hdZGGBsMk56MRMvOir8XQM0Je/rSwP +# P11S2VwYUMmBjfFX1QK7r280k3k9xcDWW79ZC4Kn2UsV7jxuUwFHgdVlgDNjg6QL +# unGuwFX5lStgNevwUH9DotoASXxgtwNNmtZNDB4NYVCxQLS7RtVSbxP+xFYXbokG +# G4DFVHBr3CGPga3OduE/YUBpxIRxtiDF/9WHo0tJEdS95tfdnsyaGo8eHNzyfTdS +# kjrNsAlqpJRT0Va/ooBXCV7Uny7PlCkRIQRTSJDy/kSXpsL22CTEHw6mU0jEU99k +# OL4uwu+aVnolWFlpbiJjQxBqfT3plBLIg88= +# SIG # End signature block diff --git a/dotnet-install.sh b/dotnet-install.sh new file mode 100755 index 000000000..190367354 --- /dev/null +++ b/dotnet-install.sh @@ -0,0 +1,1568 @@ +#!/usr/bin/env bash +# Copyright (c) .NET Foundation and contributors. All rights reserved. +# Licensed under the MIT license. See LICENSE file in the project root for full license information. +# + +# Stop script on NZEC +set -e +# Stop script if unbound variable found (use ${var:-} if intentional) +set -u +# By default cmd1 | cmd2 returns exit code of cmd2 regardless of cmd1 success +# This is causing it to fail +set -o pipefail + +# Use in the the functions: eval $invocation +invocation='say_verbose "Calling: ${yellow:-}${FUNCNAME[0]} ${green:-}$*${normal:-}"' + +# standard output may be used as a return value in the functions +# we need a way to write text on the screen in the functions so that +# it won't interfere with the return value. +# Exposing stream 3 as a pipe to standard output of the script itself +exec 3>&1 + +# Setup some colors to use. These need to work in fairly limited shells, like the Ubuntu Docker container where there are only 8 colors. +# See if stdout is a terminal +if [ -t 1 ] && command -v tput > /dev/null; then + # see if it supports colors + ncolors=$(tput colors || echo 0) + if [ -n "$ncolors" ] && [ $ncolors -ge 8 ]; then + bold="$(tput bold || echo)" + normal="$(tput sgr0 || echo)" + black="$(tput setaf 0 || echo)" + red="$(tput setaf 1 || echo)" + green="$(tput setaf 2 || echo)" + yellow="$(tput setaf 3 || echo)" + blue="$(tput setaf 4 || echo)" + magenta="$(tput setaf 5 || echo)" + cyan="$(tput setaf 6 || echo)" + white="$(tput setaf 7 || echo)" + fi +fi + +say_warning() { + printf "%b\n" "${yellow:-}dotnet_install: Warning: $1${normal:-}" >&3 +} + +say_err() { + printf "%b\n" "${red:-}dotnet_install: Error: $1${normal:-}" >&2 +} + +say() { + # using stream 3 (defined in the beginning) to not interfere with stdout of functions + # which may be used as return value + printf "%b\n" "${cyan:-}dotnet-install:${normal:-} $1" >&3 +} + +say_verbose() { + if [ "$verbose" = true ]; then + say "$1" + fi +} + +# This platform list is finite - if the SDK/Runtime has supported Linux distribution-specific assets, +# then and only then should the Linux distribution appear in this list. +# Adding a Linux distribution to this list does not imply distribution-specific support. +get_legacy_os_name_from_platform() { + eval $invocation + + platform="$1" + case "$platform" in + "centos.7") + echo "centos" + return 0 + ;; + "debian.8") + echo "debian" + return 0 + ;; + "debian.9") + echo "debian.9" + return 0 + ;; + "fedora.23") + echo "fedora.23" + return 0 + ;; + "fedora.24") + echo "fedora.24" + return 0 + ;; + "fedora.27") + echo "fedora.27" + return 0 + ;; + "fedora.28") + echo "fedora.28" + return 0 + ;; + "opensuse.13.2") + echo "opensuse.13.2" + return 0 + ;; + "opensuse.42.1") + echo "opensuse.42.1" + return 0 + ;; + "opensuse.42.3") + echo "opensuse.42.3" + return 0 + ;; + "rhel.7"*) + echo "rhel" + return 0 + ;; + "ubuntu.14.04") + echo "ubuntu" + return 0 + ;; + "ubuntu.16.04") + echo "ubuntu.16.04" + return 0 + ;; + "ubuntu.16.10") + echo "ubuntu.16.10" + return 0 + ;; + "ubuntu.18.04") + echo "ubuntu.18.04" + return 0 + ;; + "alpine.3.4.3") + echo "alpine" + return 0 + ;; + esac + return 1 +} + +get_linux_platform_name() { + eval $invocation + + if [ -n "$runtime_id" ]; then + echo "${runtime_id%-*}" + return 0 + else + if [ -e /etc/os-release ]; then + . /etc/os-release + echo "$ID${VERSION_ID:+.${VERSION_ID}}" + return 0 + elif [ -e /etc/redhat-release ]; then + local redhatRelease=$(&1 || true) | grep -q musl +} + +get_current_os_name() { + eval $invocation + + local uname=$(uname) + if [ "$uname" = "Darwin" ]; then + echo "osx" + return 0 + elif [ "$uname" = "FreeBSD" ]; then + echo "freebsd" + return 0 + elif [ "$uname" = "Linux" ]; then + local linux_platform_name + linux_platform_name="$(get_linux_platform_name)" || { echo "linux" && return 0 ; } + + if [ "$linux_platform_name" = "rhel.6" ]; then + echo $linux_platform_name + return 0 + elif is_musl_based_distro; then + echo "linux-musl" + return 0 + elif [ "$linux_platform_name" = "linux-musl" ]; then + echo "linux-musl" + return 0 + else + echo "linux" + return 0 + fi + fi + + say_err "OS name could not be detected: UName = $uname" + return 1 +} + +get_legacy_os_name() { + eval $invocation + + local uname=$(uname) + if [ "$uname" = "Darwin" ]; then + echo "osx" + return 0 + elif [ -n "$runtime_id" ]; then + echo $(get_legacy_os_name_from_platform "${runtime_id%-*}" || echo "${runtime_id%-*}") + return 0 + else + if [ -e /etc/os-release ]; then + . /etc/os-release + os=$(get_legacy_os_name_from_platform "$ID${VERSION_ID:+.${VERSION_ID}}" || echo "") + if [ -n "$os" ]; then + echo "$os" + return 0 + fi + fi + fi + + say_verbose "Distribution specific OS name and version could not be detected: UName = $uname" + return 1 +} + +machine_has() { + eval $invocation + + command -v "$1" > /dev/null 2>&1 + return $? +} + + +check_min_reqs() { + local hasMinimum=false + if machine_has "curl"; then + hasMinimum=true + elif machine_has "wget"; then + hasMinimum=true + fi + + if [ "$hasMinimum" = "false" ]; then + say_err "curl (recommended) or wget are required to download dotnet. Install missing prerequisite to proceed." + return 1 + fi + return 0 +} + +# args: +# input - $1 +to_lowercase() { + #eval $invocation + + echo "$1" | tr '[:upper:]' '[:lower:]' + return 0 +} + +# args: +# input - $1 +remove_trailing_slash() { + #eval $invocation + + local input="${1:-}" + echo "${input%/}" + return 0 +} + +# args: +# input - $1 +remove_beginning_slash() { + #eval $invocation + + local input="${1:-}" + echo "${input#/}" + return 0 +} + +# args: +# root_path - $1 +# child_path - $2 - this parameter can be empty +combine_paths() { + eval $invocation + + # TODO: Consider making it work with any number of paths. For now: + if [ ! -z "${3:-}" ]; then + say_err "combine_paths: Function takes two parameters." + return 1 + fi + + local root_path="$(remove_trailing_slash "$1")" + local child_path="$(remove_beginning_slash "${2:-}")" + say_verbose "combine_paths: root_path=$root_path" + say_verbose "combine_paths: child_path=$child_path" + echo "$root_path/$child_path" + return 0 +} + +get_machine_architecture() { + eval $invocation + + if command -v uname > /dev/null; then + CPUName=$(uname -m) + case $CPUName in + armv*l) + echo "arm" + return 0 + ;; + aarch64|arm64) + echo "arm64" + return 0 + ;; + esac + fi + + # Always default to 'x64' + echo "x64" + return 0 +} + +# args: +# architecture - $1 +get_normalized_architecture_from_architecture() { + eval $invocation + + local architecture="$(to_lowercase "$1")" + case "$architecture" in + \) + echo "$(get_normalized_architecture_from_architecture "$(get_machine_architecture)")" + return 0 + ;; + amd64|x64) + echo "x64" + return 0 + ;; + arm) + echo "arm" + return 0 + ;; + arm64) + echo "arm64" + return 0 + ;; + esac + + say_err "Architecture \`$architecture\` not supported. If you think this is a bug, report it at https://github.com/dotnet/install-scripts/issues" + return 1 +} + +# args: +# user_defined_os - $1 +get_normalized_os() { + eval $invocation + + local osname="$(to_lowercase "$1")" + if [ ! -z "$osname" ]; then + case "$osname" in + osx | freebsd | rhel.6 | linux-musl | linux) + echo "$osname" + return 0 + ;; + *) + say_err "'$user_defined_os' is not a supported value for --os option, supported values are: osx, linux, linux-musl, freebsd, rhel.6. If you think this is a bug, report it at https://github.com/dotnet/install-scripts/issues." + return 1 + ;; + esac + else + osname="$(get_current_os_name)" || return 1 + fi + echo "$osname" + return 0 +} + +# args: +# quality - $1 +get_normalized_quality() { + eval $invocation + + local quality="$(to_lowercase "$1")" + if [ ! -z "$quality" ]; then + case "$quality" in + daily | signed | validated | preview) + echo "$quality" + return 0 + ;; + ga) + #ga quality is available without specifying quality, so normalizing it to empty + return 0 + ;; + *) + say_err "'$quality' is not a supported value for --quality option. Supported values are: daily, signed, validated, preview, ga. If you think this is a bug, report it at https://github.com/dotnet/install-scripts/issues." + return 1 + ;; + esac + fi + return 0 +} + +# args: +# channel - $1 +get_normalized_channel() { + eval $invocation + + local channel="$(to_lowercase "$1")" + + if [[ $channel == release/* ]]; then + say_warning 'Using branch name with -Channel option is no longer supported with newer releases. Use -Quality option with a channel in X.Y format instead.'; + fi + + if [ ! -z "$channel" ]; then + case "$channel" in + lts) + echo "LTS" + return 0 + ;; + *) + echo "$channel" + return 0 + ;; + esac + fi + + return 0 +} + +# args: +# runtime - $1 +get_normalized_product() { + eval $invocation + + local runtime="$(to_lowercase "$1")" + if [[ "$runtime" == "dotnet" ]]; then + product="dotnet-runtime" + elif [[ "$runtime" == "aspnetcore" ]]; then + product="aspnetcore-runtime" + elif [ -z "$runtime" ]; then + product="dotnet-sdk" + fi + echo "$product" + return 0 +} + +# The version text returned from the feeds is a 1-line or 2-line string: +# For the SDK and the dotnet runtime (2 lines): +# Line 1: # commit_hash +# Line 2: # 4-part version +# For the aspnetcore runtime (1 line): +# Line 1: # 4-part version + +# args: +# version_text - stdin +get_version_from_version_info() { + eval $invocation + + cat | tail -n 1 | sed 's/\r$//' + return 0 +} + +# args: +# install_root - $1 +# relative_path_to_package - $2 +# specific_version - $3 +is_dotnet_package_installed() { + eval $invocation + + local install_root="$1" + local relative_path_to_package="$2" + local specific_version="${3//[$'\t\r\n']}" + + local dotnet_package_path="$(combine_paths "$(combine_paths "$install_root" "$relative_path_to_package")" "$specific_version")" + say_verbose "is_dotnet_package_installed: dotnet_package_path=$dotnet_package_path" + + if [ -d "$dotnet_package_path" ]; then + return 0 + else + return 1 + fi +} + +# args: +# azure_feed - $1 +# channel - $2 +# normalized_architecture - $3 +get_latest_version_info() { + eval $invocation + + local azure_feed="$1" + local channel="$2" + local normalized_architecture="$3" + + local version_file_url=null + if [[ "$runtime" == "dotnet" ]]; then + version_file_url="$uncached_feed/Runtime/$channel/latest.version" + elif [[ "$runtime" == "aspnetcore" ]]; then + version_file_url="$uncached_feed/aspnetcore/Runtime/$channel/latest.version" + elif [ -z "$runtime" ]; then + version_file_url="$uncached_feed/Sdk/$channel/latest.version" + else + say_err "Invalid value for \$runtime" + return 1 + fi + say_verbose "get_latest_version_info: latest url: $version_file_url" + + download "$version_file_url" + return $? +} + +# args: +# json_file - $1 +parse_jsonfile_for_version() { + eval $invocation + + local json_file="$1" + if [ ! -f "$json_file" ]; then + say_err "Unable to find \`$json_file\`" + return 1 + fi + + sdk_section=$(cat $json_file | awk '/"sdk"/,/}/') + if [ -z "$sdk_section" ]; then + say_err "Unable to parse the SDK node in \`$json_file\`" + return 1 + fi + + sdk_list=$(echo $sdk_section | awk -F"[{}]" '{print $2}') + sdk_list=${sdk_list//[\" ]/} + sdk_list=${sdk_list//,/$'\n'} + + local version_info="" + while read -r line; do + IFS=: + while read -r key value; do + if [[ "$key" == "version" ]]; then + version_info=$value + fi + done <<< "$line" + done <<< "$sdk_list" + if [ -z "$version_info" ]; then + say_err "Unable to find the SDK:version node in \`$json_file\`" + return 1 + fi + + unset IFS; + echo "$version_info" + return 0 +} + +# args: +# azure_feed - $1 +# channel - $2 +# normalized_architecture - $3 +# version - $4 +# json_file - $5 +get_specific_version_from_version() { + eval $invocation + + local azure_feed="$1" + local channel="$2" + local normalized_architecture="$3" + local version="$(to_lowercase "$4")" + local json_file="$5" + + if [ -z "$json_file" ]; then + if [[ "$version" == "latest" ]]; then + local version_info + version_info="$(get_latest_version_info "$azure_feed" "$channel" "$normalized_architecture" false)" || return 1 + say_verbose "get_specific_version_from_version: version_info=$version_info" + echo "$version_info" | get_version_from_version_info + return 0 + else + echo "$version" + return 0 + fi + else + local version_info + version_info="$(parse_jsonfile_for_version "$json_file")" || return 1 + echo "$version_info" + return 0 + fi +} + +# args: +# azure_feed - $1 +# channel - $2 +# normalized_architecture - $3 +# specific_version - $4 +# normalized_os - $5 +construct_download_link() { + eval $invocation + + local azure_feed="$1" + local channel="$2" + local normalized_architecture="$3" + local specific_version="${4//[$'\t\r\n']}" + local specific_product_version="$(get_specific_product_version "$1" "$4")" + local osname="$5" + + local download_link=null + if [[ "$runtime" == "dotnet" ]]; then + download_link="$azure_feed/Runtime/$specific_version/dotnet-runtime-$specific_product_version-$osname-$normalized_architecture.tar.gz" + elif [[ "$runtime" == "aspnetcore" ]]; then + download_link="$azure_feed/aspnetcore/Runtime/$specific_version/aspnetcore-runtime-$specific_product_version-$osname-$normalized_architecture.tar.gz" + elif [ -z "$runtime" ]; then + download_link="$azure_feed/Sdk/$specific_version/dotnet-sdk-$specific_product_version-$osname-$normalized_architecture.tar.gz" + else + return 1 + fi + + echo "$download_link" + return 0 +} + +# args: +# azure_feed - $1 +# specific_version - $2 +# download link - $3 (optional) +get_specific_product_version() { + # If we find a 'productVersion.txt' at the root of any folder, we'll use its contents + # to resolve the version of what's in the folder, superseding the specified version. + # if 'productVersion.txt' is missing but download link is already available, product version will be taken from download link + eval $invocation + + local azure_feed="$1" + local specific_version="${2//[$'\t\r\n']}" + local package_download_link="" + if [ $# -gt 2 ]; then + local package_download_link="$3" + fi + local specific_product_version=null + + # Try to get the version number, using the productVersion.txt file located next to the installer file. + local download_links=($(get_specific_product_version_url "$azure_feed" "$specific_version" true "$package_download_link") + $(get_specific_product_version_url "$azure_feed" "$specific_version" false "$package_download_link")) + + for download_link in "${download_links[@]}" + do + say_verbose "Checking for the existence of $download_link" + + if machine_has "curl" + then + specific_product_version=$(curl -s --fail "${download_link}${feed_credential}") + if [ $? = 0 ]; then + echo "${specific_product_version//[$'\t\r\n']}" + return 0 + fi + elif machine_has "wget" + then + specific_product_version=$(wget -qO- "${download_link}${feed_credential}") + if [ $? = 0 ]; then + echo "${specific_product_version//[$'\t\r\n']}" + return 0 + fi + fi + done + + # Getting the version number with productVersion.txt has failed. Try parsing the download link for a version number. + say_verbose "Failed to get the version using productVersion.txt file. Download link will be parsed instead." + specific_product_version="$(get_product_specific_version_from_download_link "$package_download_link" "$specific_version")" + echo "${specific_product_version//[$'\t\r\n']}" + return 0 +} + +# args: +# azure_feed - $1 +# specific_version - $2 +# is_flattened - $3 +# download link - $4 (optional) +get_specific_product_version_url() { + eval $invocation + + local azure_feed="$1" + local specific_version="$2" + local is_flattened="$3" + local package_download_link="" + if [ $# -gt 3 ]; then + local package_download_link="$4" + fi + + local pvFileName="productVersion.txt" + if [ "$is_flattened" = true ]; then + if [ -z "$runtime" ]; then + pvFileName="sdk-productVersion.txt" + elif [[ "$runtime" == "dotnet" ]]; then + pvFileName="runtime-productVersion.txt" + else + pvFileName="$runtime-productVersion.txt" + fi + fi + + local download_link=null + + if [ -z "$package_download_link" ]; then + if [[ "$runtime" == "dotnet" ]]; then + download_link="$azure_feed/Runtime/$specific_version/${pvFileName}" + elif [[ "$runtime" == "aspnetcore" ]]; then + download_link="$azure_feed/aspnetcore/Runtime/$specific_version/${pvFileName}" + elif [ -z "$runtime" ]; then + download_link="$azure_feed/Sdk/$specific_version/${pvFileName}" + else + return 1 + fi + else + download_link="${package_download_link%/*}/${pvFileName}" + fi + + say_verbose "Constructed productVersion link: $download_link" + echo "$download_link" + return 0 +} + +# args: +# download link - $1 +# specific version - $2 +get_product_specific_version_from_download_link() +{ + eval $invocation + + local download_link="$1" + local specific_version="$2" + local specific_product_version="" + + if [ -z "$download_link" ]; then + echo "$specific_version" + return 0 + fi + + #get filename + filename="${download_link##*/}" + + #product specific version follows the product name + #for filename 'dotnet-sdk-3.1.404-linux-x64.tar.gz': the product version is 3.1.404 + IFS='-' + read -ra filename_elems <<< "$filename" + count=${#filename_elems[@]} + if [[ "$count" -gt 2 ]]; then + specific_product_version="${filename_elems[2]}" + else + specific_product_version=$specific_version + fi + unset IFS; + echo "$specific_product_version" + return 0 +} + +# args: +# azure_feed - $1 +# channel - $2 +# normalized_architecture - $3 +# specific_version - $4 +construct_legacy_download_link() { + eval $invocation + + local azure_feed="$1" + local channel="$2" + local normalized_architecture="$3" + local specific_version="${4//[$'\t\r\n']}" + + local distro_specific_osname + distro_specific_osname="$(get_legacy_os_name)" || return 1 + + local legacy_download_link=null + if [[ "$runtime" == "dotnet" ]]; then + legacy_download_link="$azure_feed/Runtime/$specific_version/dotnet-$distro_specific_osname-$normalized_architecture.$specific_version.tar.gz" + elif [ -z "$runtime" ]; then + legacy_download_link="$azure_feed/Sdk/$specific_version/dotnet-dev-$distro_specific_osname-$normalized_architecture.$specific_version.tar.gz" + else + return 1 + fi + + echo "$legacy_download_link" + return 0 +} + +get_user_install_path() { + eval $invocation + + if [ ! -z "${DOTNET_INSTALL_DIR:-}" ]; then + echo "$DOTNET_INSTALL_DIR" + else + echo "$HOME/.dotnet" + fi + return 0 +} + +# args: +# install_dir - $1 +resolve_installation_path() { + eval $invocation + + local install_dir=$1 + if [ "$install_dir" = "" ]; then + local user_install_path="$(get_user_install_path)" + say_verbose "resolve_installation_path: user_install_path=$user_install_path" + echo "$user_install_path" + return 0 + fi + + echo "$install_dir" + return 0 +} + +# args: +# relative_or_absolute_path - $1 +get_absolute_path() { + eval $invocation + + local relative_or_absolute_path=$1 + echo "$(cd "$(dirname "$1")" && pwd -P)/$(basename "$1")" + return 0 +} + +# args: +# input_files - stdin +# root_path - $1 +# out_path - $2 +# override - $3 +copy_files_or_dirs_from_list() { + eval $invocation + + local root_path="$(remove_trailing_slash "$1")" + local out_path="$(remove_trailing_slash "$2")" + local override="$3" + local osname="$(get_current_os_name)" + local override_switch=$( + if [ "$override" = false ]; then + if [ "$osname" = "linux-musl" ]; then + printf -- "-u"; + else + printf -- "-n"; + fi + fi) + + cat | uniq | while read -r file_path; do + local path="$(remove_beginning_slash "${file_path#$root_path}")" + local target="$out_path/$path" + if [ "$override" = true ] || (! ([ -d "$target" ] || [ -e "$target" ])); then + mkdir -p "$out_path/$(dirname "$path")" + if [ -d "$target" ]; then + rm -rf "$target" + fi + cp -R $override_switch "$root_path/$path" "$target" + fi + done +} + +# args: +# zip_path - $1 +# out_path - $2 +extract_dotnet_package() { + eval $invocation + + local zip_path="$1" + local out_path="$2" + + local temp_out_path="$(mktemp -d "$temporary_file_template")" + + local failed=false + tar -xzf "$zip_path" -C "$temp_out_path" > /dev/null || failed=true + + local folders_with_version_regex='^.*/[0-9]+\.[0-9]+[^/]+/' + find "$temp_out_path" -type f | grep -Eo "$folders_with_version_regex" | sort | copy_files_or_dirs_from_list "$temp_out_path" "$out_path" false + find "$temp_out_path" -type f | grep -Ev "$folders_with_version_regex" | copy_files_or_dirs_from_list "$temp_out_path" "$out_path" "$override_non_versioned_files" + + rm -rf "$temp_out_path" + rm -f "$zip_path" && say_verbose "Temporary zip file $zip_path was removed" + + if [ "$failed" = true ]; then + say_err "Extraction failed" + return 1 + fi + return 0 +} + +# args: +# remote_path - $1 +# disable_feed_credential - $2 +get_http_header() +{ + eval $invocation + local remote_path="$1" + local disable_feed_credential="$2" + + local failed=false + local response + if machine_has "curl"; then + get_http_header_curl $remote_path $disable_feed_credential || failed=true + elif machine_has "wget"; then + get_http_header_wget $remote_path $disable_feed_credential || failed=true + else + failed=true + fi + if [ "$failed" = true ]; then + say_verbose "Failed to get HTTP header: '$remote_path'." + return 1 + fi + return 0 +} + +# args: +# remote_path - $1 +# disable_feed_credential - $2 +get_http_header_curl() { + eval $invocation + local remote_path="$1" + local disable_feed_credential="$2" + + remote_path_with_credential="$remote_path" + if [ "$disable_feed_credential" = false ]; then + remote_path_with_credential+="$feed_credential" + fi + + curl_options="-I -sSL --retry 5 --retry-delay 2 --connect-timeout 15 " + curl $curl_options "$remote_path_with_credential" || return 1 + return 0 +} + +# args: +# remote_path - $1 +# disable_feed_credential - $2 +get_http_header_wget() { + eval $invocation + local remote_path="$1" + local disable_feed_credential="$2" + + remote_path_with_credential="$remote_path" + if [ "$disable_feed_credential" = false ]; then + remote_path_with_credential+="$feed_credential" + fi + + wget_options="-q -S --spider --tries 5 --waitretry 2 --connect-timeout 15 " + wget $wget_options "$remote_path_with_credential" 2>&1 || return 1 + return 0 +} + +# args: +# remote_path - $1 +# [out_path] - $2 - stdout if not provided +download() { + eval $invocation + + local remote_path="$1" + local out_path="${2:-}" + + if [[ "$remote_path" != "http"* ]]; then + cp "$remote_path" "$out_path" + return $? + fi + + local failed=false + local attempts=0 + while [ $attempts -lt 3 ]; do + attempts=$((attempts+1)) + failed=false + if machine_has "curl"; then + downloadcurl "$remote_path" "$out_path" || failed=true + elif machine_has "wget"; then + downloadwget "$remote_path" "$out_path" || failed=true + else + say_err "Missing dependency: neither curl nor wget was found." + exit 1 + fi + + if [ "$failed" = false ] || [ $attempts -ge 3 ] || { [ ! -z $http_code ] && [ $http_code = "404" ]; }; then + break + fi + + say "Download attempt #$attempts has failed: $http_code $download_error_msg" + say "Attempt #$((attempts+1)) will start in $((attempts*10)) seconds." + sleep $((attempts*10)) + done + + + + if [ "$failed" = true ]; then + say_verbose "Download failed: $remote_path" + return 1 + fi + return 0 +} + +# Updates global variables $http_code and $download_error_msg +downloadcurl() { + eval $invocation + unset http_code + unset download_error_msg + local remote_path="$1" + local out_path="${2:-}" + # Append feed_credential as late as possible before calling curl to avoid logging feed_credential + # Avoid passing URI with credentials to functions: note, most of them echoing parameters of invocation in verbose output. + local remote_path_with_credential="${remote_path}${feed_credential}" + local curl_options="--retry 20 --retry-delay 2 --connect-timeout 15 -sSL -f --create-dirs " + local failed=false + if [ -z "$out_path" ]; then + curl $curl_options "$remote_path_with_credential" || failed=true + else + curl $curl_options -o "$out_path" "$remote_path_with_credential" || failed=true + fi + if [ "$failed" = true ]; then + local disable_feed_credential=false + local response=$(get_http_header_curl $remote_path $disable_feed_credential) + http_code=$( echo "$response" | awk '/^HTTP/{print $2}' | tail -1 ) + download_error_msg="Unable to download $remote_path." + if [[ $http_code != 2* ]]; then + download_error_msg+=" Returned HTTP status code: $http_code." + fi + say_verbose "$download_error_msg" + return 1 + fi + return 0 +} + + +# Updates global variables $http_code and $download_error_msg +downloadwget() { + eval $invocation + unset http_code + unset download_error_msg + local remote_path="$1" + local out_path="${2:-}" + # Append feed_credential as late as possible before calling wget to avoid logging feed_credential + local remote_path_with_credential="${remote_path}${feed_credential}" + local wget_options="--tries 20 --waitretry 2 --connect-timeout 15 " + local failed=false + if [ -z "$out_path" ]; then + wget -q $wget_options -O - "$remote_path_with_credential" || failed=true + else + wget $wget_options -O "$out_path" "$remote_path_with_credential" || failed=true + fi + if [ "$failed" = true ]; then + local disable_feed_credential=false + local response=$(get_http_header_wget $remote_path $disable_feed_credential) + http_code=$( echo "$response" | awk '/^ HTTP/{print $2}' | tail -1 ) + download_error_msg="Unable to download $remote_path." + if [[ $http_code != 2* ]]; then + download_error_msg+=" Returned HTTP status code: $http_code." + fi + say_verbose "$download_error_msg" + return 1 + fi + return 0 +} + +get_download_link_from_aka_ms() { + eval $invocation + + #quality is not supported for LTS or current channel + if [[ ! -z "$normalized_quality" && ("$normalized_channel" == "LTS" || "$normalized_channel" == "current") ]]; then + normalized_quality="" + say_warning "Specifying quality for current or LTS channel is not supported, the quality will be ignored." + fi + + say_verbose "Retrieving primary payload URL from aka.ms for channel: '$normalized_channel', quality: '$normalized_quality', product: '$normalized_product', os: '$normalized_os', architecture: '$normalized_architecture'." + + #construct aka.ms link + aka_ms_link="https://aka.ms/dotnet" + if [ "$internal" = true ]; then + aka_ms_link="$aka_ms_link/internal" + fi + aka_ms_link="$aka_ms_link/$normalized_channel" + if [[ ! -z "$normalized_quality" ]]; then + aka_ms_link="$aka_ms_link/$normalized_quality" + fi + aka_ms_link="$aka_ms_link/$normalized_product-$normalized_os-$normalized_architecture.tar.gz" + say_verbose "Constructed aka.ms link: '$aka_ms_link'." + + #get HTTP response + #do not pass credentials as a part of the $aka_ms_link and do not apply credentials in the get_http_header function + #otherwise the redirect link would have credentials as well + #it would result in applying credentials twice to the resulting link and thus breaking it, and in echoing credentials to the output as a part of redirect link + disable_feed_credential=true + response="$(get_http_header $aka_ms_link $disable_feed_credential)" + + say_verbose "Received response: $response" + # Get results of all the redirects. + http_codes=$( echo "$response" | awk '$1 ~ /^HTTP/ {print $2}' ) + # They all need to be 301, otherwise some links are broken (except for the last, which is not a redirect but 200 or 404). + broken_redirects=$( echo "$http_codes" | sed '$d' | grep -v '301' ) + + # All HTTP codes are 301 (Moved Permanently), the redirect link exists. + if [[ -z "$broken_redirects" ]]; then + aka_ms_download_link=$( echo "$response" | awk '$1 ~ /^Location/{print $2}' | tail -1 | tr -d '\r') + + if [[ -z "$aka_ms_download_link" ]]; then + say_verbose "The aka.ms link '$aka_ms_link' is not valid: failed to get redirect location." + return 1 + fi + + say_verbose "The redirect location retrieved: '$aka_ms_download_link'." + return 0 + else + say_verbose "The aka.ms link '$aka_ms_link' is not valid: received HTTP code: $(echo "$broken_redirects" | paste -sd "," -)." + return 1 + fi +} + +calculate_vars() { + eval $invocation + valid_legacy_download_link=true + + #normalize input variables + normalized_architecture="$(get_normalized_architecture_from_architecture "$architecture")" + say_verbose "Normalized architecture: '$normalized_architecture'." + normalized_os="$(get_normalized_os "$user_defined_os")" + say_verbose "Normalized OS: '$normalized_os'." + normalized_quality="$(get_normalized_quality "$quality")" + say_verbose "Normalized quality: '$normalized_quality'." + normalized_channel="$(get_normalized_channel "$channel")" + say_verbose "Normalized channel: '$normalized_channel'." + normalized_product="$(get_normalized_product "$runtime")" + say_verbose "Normalized product: '$normalized_product'." + + #try to get download location from aka.ms link + #not applicable when exact version is specified via command or json file + normalized_version="$(to_lowercase "$version")" + if [[ -z "$json_file" && "$normalized_version" == "latest" ]]; then + + valid_aka_ms_link=true; + get_download_link_from_aka_ms || valid_aka_ms_link=false + + if [ "$valid_aka_ms_link" == false ]; then + # if quality is specified - exit with error - there is no fallback approach + if [ ! -z "$normalized_quality" ]; then + say_err "Failed to locate the latest version in the channel '$normalized_channel' with '$normalized_quality' quality for '$normalized_product', os: '$normalized_os', architecture: '$normalized_architecture'." + say_err "Refer to: https://aka.ms/dotnet-os-lifecycle for information on .NET Core support." + return 1 + fi + say_verbose "Falling back to latest.version file approach." + else + say_verbose "Retrieved primary payload URL from aka.ms link: '$aka_ms_download_link'." + download_link=$aka_ms_download_link + + say_verbose "Downloading using legacy url will not be attempted." + valid_legacy_download_link=false + + #get version from the path + IFS='/' + read -ra pathElems <<< "$download_link" + count=${#pathElems[@]} + specific_version="${pathElems[count-2]}" + unset IFS; + say_verbose "Version: '$specific_version'." + + #Retrieve product specific version + specific_product_version="$(get_specific_product_version "$azure_feed" "$specific_version" "$download_link")" + say_verbose "Product specific version: '$specific_product_version'." + + install_root="$(resolve_installation_path "$install_dir")" + say_verbose "InstallRoot: '$install_root'." + return + fi + fi + + specific_version="$(get_specific_version_from_version "$azure_feed" "$channel" "$normalized_architecture" "$version" "$json_file")" + specific_product_version="$(get_specific_product_version "$azure_feed" "$specific_version")" + say_verbose "specific_version=$specific_version" + if [ -z "$specific_version" ]; then + say_err "Could not resolve version information." + return 1 + fi + + download_link="$(construct_download_link "$azure_feed" "$channel" "$normalized_architecture" "$specific_version" "$normalized_os")" + say_verbose "Constructed primary named payload URL: $download_link" + + legacy_download_link="$(construct_legacy_download_link "$azure_feed" "$channel" "$normalized_architecture" "$specific_version")" || valid_legacy_download_link=false + + if [ "$valid_legacy_download_link" = true ]; then + say_verbose "Constructed legacy named payload URL: $legacy_download_link" + else + say_verbose "Cound not construct a legacy_download_link; omitting..." + fi + + install_root="$(resolve_installation_path "$install_dir")" + say_verbose "InstallRoot: $install_root" +} + +install_dotnet() { + eval $invocation + local download_failed=false + local asset_name='' + local asset_relative_path='' + + if [[ "$runtime" == "dotnet" ]]; then + asset_relative_path="shared/Microsoft.NETCore.App" + asset_name=".NET Core Runtime" + elif [[ "$runtime" == "aspnetcore" ]]; then + asset_relative_path="shared/Microsoft.AspNetCore.App" + asset_name="ASP.NET Core Runtime" + elif [ -z "$runtime" ]; then + asset_relative_path="sdk" + asset_name=".NET Core SDK" + else + say_err "Invalid value for \$runtime" + return 1 + fi + + # Check if the SDK version is already installed. + if is_dotnet_package_installed "$install_root" "$asset_relative_path" "$specific_version"; then + say "$asset_name version $specific_version is already installed." + return 0 + fi + + mkdir -p "$install_root" + zip_path="$(mktemp "$temporary_file_template")" + say_verbose "Zip path: $zip_path" + + + # Failures are normal in the non-legacy case for ultimately legacy downloads. + # Do not output to stderr, since output to stderr is considered an error. + say "Downloading primary link $download_link" + + # The download function will set variables $http_code and $download_error_msg in case of failure. + download "$download_link" "$zip_path" 2>&1 || download_failed=true + + # if the download fails, download the legacy_download_link + if [ "$download_failed" = true ]; then + primary_path_http_code="$http_code"; primary_path_download_error_msg="$download_error_msg" + case $primary_path_http_code in + 404) + say "The resource at $download_link is not available." + ;; + *) + say "$primary_path_download_error_msg" + ;; + esac + rm -f "$zip_path" 2>&1 && say_verbose "Temporary zip file $zip_path was removed" + if [ "$valid_legacy_download_link" = true ]; then + download_failed=false + download_link="$legacy_download_link" + zip_path="$(mktemp "$temporary_file_template")" + say_verbose "Legacy zip path: $zip_path" + + say "Downloading legacy link $download_link" + + # The download function will set variables $http_code and $download_error_msg in case of failure. + download "$download_link" "$zip_path" 2>&1 || download_failed=true + + if [ "$download_failed" = true ]; then + legacy_path_http_code="$http_code"; legacy_path_download_error_msg="$download_error_msg" + case $legacy_path_http_code in + 404) + say "The resource at $download_link is not available." + ;; + *) + say "$legacy_path_download_error_msg" + ;; + esac + rm -f "$zip_path" 2>&1 && say_verbose "Temporary zip file $zip_path was removed" + fi + fi + fi + + if [ "$download_failed" = true ]; then + if [[ "$primary_path_http_code" = "404" && ( "$valid_legacy_download_link" = false || "$legacy_path_http_code" = "404") ]]; then + say_err "Could not find \`$asset_name\` with version = $specific_version" + say_err "Refer to: https://aka.ms/dotnet-os-lifecycle for information on .NET Core support" + else + say_err "Could not download: \`$asset_name\` with version = $specific_version" + # 404-NotFound is an expected response if it goes from only one of the links, do not show that error. + # If primary path is available (not 404-NotFound) then show the primary error else show the legacy error. + if [ "$primary_path_http_code" != "404" ]; then + say_err "$primary_path_download_error_msg" + return 1 + fi + if [[ "$valid_legacy_download_link" = true && "$legacy_path_http_code" != "404" ]]; then + say_err "$legacy_path_download_error_msg" + return 1 + fi + fi + return 1 + fi + + say "Extracting zip from $download_link" + extract_dotnet_package "$zip_path" "$install_root" || return 1 + + # Check if the SDK version is installed; if not, fail the installation. + # if the version contains "RTM" or "servicing"; check if a 'release-type' SDK version is installed. + if [[ $specific_version == *"rtm"* || $specific_version == *"servicing"* ]]; then + IFS='-' + read -ra verArr <<< "$specific_version" + release_version="${verArr[0]}" + unset IFS; + say_verbose "Checking installation: version = $release_version" + if is_dotnet_package_installed "$install_root" "$asset_relative_path" "$release_version"; then + return 0 + fi + fi + + # Check if the standard SDK version is installed. + say_verbose "Checking installation: version = $specific_product_version" + if is_dotnet_package_installed "$install_root" "$asset_relative_path" "$specific_product_version"; then + return 0 + fi + + # Version verification failed. More likely something is wrong either with the downloaded content or with the verification algorithm. + say_err "Failed to verify the version of installed \`$asset_name\`.\nInstallation source: $download_link.\nInstallation location: $install_root.\nReport the bug at https://github.com/dotnet/install-scripts/issues." + say_err "\`$asset_name\` with version = $specific_product_version failed to install with an unknown error." + return 1 +} + +args=("$@") + +local_version_file_relative_path="/.version" +bin_folder_relative_path="" +temporary_file_template="${TMPDIR:-/tmp}/dotnet.XXXXXXXXX" + +channel="LTS" +version="Latest" +json_file="" +install_dir="" +architecture="" +dry_run=false +no_path=false +no_cdn=false +azure_feed="https://dotnetcli.azureedge.net/dotnet" +uncached_feed="https://dotnetcli.blob.core.windows.net/dotnet" +feed_credential="" +verbose=false +runtime="" +runtime_id="" +quality="" +internal=false +override_non_versioned_files=true +non_dynamic_parameters="" +user_defined_os="" + +while [ $# -ne 0 ] +do + name="$1" + case "$name" in + -c|--channel|-[Cc]hannel) + shift + channel="$1" + ;; + -v|--version|-[Vv]ersion) + shift + version="$1" + ;; + -q|--quality|-[Qq]uality) + shift + quality="$1" + ;; + --internal|-[Ii]nternal) + internal=true + non_dynamic_parameters+=" $name" + ;; + -i|--install-dir|-[Ii]nstall[Dd]ir) + shift + install_dir="$1" + ;; + --arch|--architecture|-[Aa]rch|-[Aa]rchitecture) + shift + architecture="$1" + ;; + --os|-[Oo][SS]) + shift + user_defined_os="$1" + ;; + --shared-runtime|-[Ss]hared[Rr]untime) + say_warning "The --shared-runtime flag is obsolete and may be removed in a future version of this script. The recommended usage is to specify '--runtime dotnet'." + if [ -z "$runtime" ]; then + runtime="dotnet" + fi + ;; + --runtime|-[Rr]untime) + shift + runtime="$1" + if [[ "$runtime" != "dotnet" ]] && [[ "$runtime" != "aspnetcore" ]]; then + say_err "Unsupported value for --runtime: '$1'. Valid values are 'dotnet' and 'aspnetcore'." + if [[ "$runtime" == "windowsdesktop" ]]; then + say_err "WindowsDesktop archives are manufactured for Windows platforms only." + fi + exit 1 + fi + ;; + --dry-run|-[Dd]ry[Rr]un) + dry_run=true + ;; + --no-path|-[Nn]o[Pp]ath) + no_path=true + non_dynamic_parameters+=" $name" + ;; + --verbose|-[Vv]erbose) + verbose=true + non_dynamic_parameters+=" $name" + ;; + --no-cdn|-[Nn]o[Cc]dn) + no_cdn=true + non_dynamic_parameters+=" $name" + ;; + --azure-feed|-[Aa]zure[Ff]eed) + shift + azure_feed="$1" + non_dynamic_parameters+=" $name "\""$1"\""" + ;; + --uncached-feed|-[Uu]ncached[Ff]eed) + shift + uncached_feed="$1" + non_dynamic_parameters+=" $name "\""$1"\""" + ;; + --feed-credential|-[Ff]eed[Cc]redential) + shift + feed_credential="$1" + #feed_credential should start with "?", for it to be added to the end of the link. + #adding "?" at the beginning of the feed_credential if needed. + [[ -z "$(echo $feed_credential)" ]] || [[ $feed_credential == \?* ]] || feed_credential="?$feed_credential" + ;; + --runtime-id|-[Rr]untime[Ii]d) + shift + runtime_id="$1" + non_dynamic_parameters+=" $name "\""$1"\""" + say_warning "Use of --runtime-id is obsolete and should be limited to the versions below 2.1. To override architecture, use --architecture option instead. To override OS, use --os option instead." + ;; + --jsonfile|-[Jj][Ss]on[Ff]ile) + shift + json_file="$1" + ;; + --skip-non-versioned-files|-[Ss]kip[Nn]on[Vv]ersioned[Ff]iles) + override_non_versioned_files=false + non_dynamic_parameters+=" $name" + ;; + -?|--?|-h|--help|-[Hh]elp) + script_name="$(basename "$0")" + echo ".NET Tools Installer" + echo "Usage: $script_name [-c|--channel ] [-v|--version ] [-p|--prefix ]" + echo " $script_name -h|-?|--help" + echo "" + echo "$script_name is a simple command line interface for obtaining dotnet cli." + echo "" + echo "Options:" + echo " -c,--channel Download from the channel specified, Defaults to \`$channel\`." + echo " -Channel" + echo " Possible values:" + echo " - Current - most current release" + echo " - LTS - most current supported release" + echo " - 2-part version in a format A.B - represents a specific release" + echo " examples: 2.0; 1.0" + echo " - 3-part version in a format A.B.Cxx - represents a specific SDK release" + echo " examples: 5.0.1xx, 5.0.2xx." + echo " Supported since 5.0 release" + echo " Note: The version parameter overrides the channel parameter when any version other than `latest` is used." + echo " -v,--version Use specific VERSION, Defaults to \`$version\`." + echo " -Version" + echo " Possible values:" + echo " - latest - most latest build on specific channel" + echo " - 3-part version in a format A.B.C - represents specific version of build" + echo " examples: 2.0.0-preview2-006120; 1.1.0" + echo " -q,--quality Download the latest build of specified quality in the channel." + echo " -Quality" + echo " The possible values are: daily, signed, validated, preview, GA." + echo " Works only in combination with channel. Not applicable for current and LTS channels and will be ignored if those channels are used." + echo " For SDK use channel in A.B.Cxx format. Using quality for SDK together with channel in A.B format is not supported." + echo " Supported since 5.0 release." + echo " Note: The version parameter overrides the channel parameter when any version other than `latest` is used, and therefore overrides the quality." + echo " --internal,-Internal Download internal builds. Requires providing credentials via --feed-credential parameter." + echo " --feed-credential Token to access Azure feed. Used as a query string to append to the Azure feed." + echo " -FeedCredential This parameter typically is not specified." + echo " -i,--install-dir Install under specified location (see Install Location below)" + echo " -InstallDir" + echo " --architecture Architecture of dotnet binaries to be installed, Defaults to \`$architecture\`." + echo " --arch,-Architecture,-Arch" + echo " Possible values: x64, arm, and arm64" + echo " --os Specifies operating system to be used when selecting the installer." + echo " Overrides the OS determination approach used by the script. Supported values: osx, linux, linux-musl, freebsd, rhel.6." + echo " In case any other value is provided, the platform will be determined by the script based on machine configuration." + echo " Not supported for legacy links. Use --runtime-id to specify platform for legacy links." + echo " Refer to: https://aka.ms/dotnet-os-lifecycle for more information." + echo " --runtime Installs a shared runtime only, without the SDK." + echo " -Runtime" + echo " Possible values:" + echo " - dotnet - the Microsoft.NETCore.App shared runtime" + echo " - aspnetcore - the Microsoft.AspNetCore.App shared runtime" + echo " --dry-run,-DryRun Do not perform installation. Display download link." + echo " --no-path, -NoPath Do not set PATH for the current process." + echo " --verbose,-Verbose Display diagnostics information." + echo " --azure-feed,-AzureFeed Azure feed location. Defaults to $azure_feed, This parameter typically is not changed by the user." + echo " --uncached-feed,-UncachedFeed Uncached feed location. This parameter typically is not changed by the user." + echo " --skip-non-versioned-files Skips non-versioned files if they already exist, such as the dotnet executable." + echo " -SkipNonVersionedFiles" + echo " --no-cdn,-NoCdn Disable downloading from the Azure CDN, and use the uncached feed directly." + echo " --jsonfile Determines the SDK version from a user specified global.json file." + echo " Note: global.json must have a value for 'SDK:Version'" + echo " -?,--?,-h,--help,-Help Shows this help message" + echo "" + echo "Obsolete parameters:" + echo " --shared-runtime The recommended alternative is '--runtime dotnet'." + echo " This parameter is obsolete and may be removed in a future version of this script." + echo " Installs just the shared runtime bits, not the entire SDK." + echo " --runtime-id Installs the .NET Tools for the given platform (use linux-x64 for portable linux)." + echo " -RuntimeId" The parameter is obsolete and may be removed in a future version of this script. Should be used only for versions below 2.1. + echo " For primary links to override OS or/and architecture, use --os and --architecture option instead." + echo "" + echo "Install Location:" + echo " Location is chosen in following order:" + echo " - --install-dir option" + echo " - Environmental variable DOTNET_INSTALL_DIR" + echo " - $HOME/.dotnet" + exit 0 + ;; + *) + say_err "Unknown argument \`$name\`" + exit 1 + ;; + esac + + shift +done + +if [ "$no_cdn" = true ]; then + azure_feed="$uncached_feed" +fi + +say "Note that the intended use of this script is for Continuous Integration (CI) scenarios, where:" +say "- The SDK needs to be installed without user interaction and without admin rights." +say "- The SDK installation doesn't need to persist across multiple CI runs." +say "To set up a development environment or to run apps, use installers rather than this script. Visit https://dotnet.microsoft.com/download to get the installer.\n" + +if [ "$internal" = true ] && [ -z "$(echo $feed_credential)" ]; then + message="Provide credentials via --feed-credential parameter." + if [ "$dry_run" = true ]; then + say_warning "$message" + else + say_err "$message" + exit 1 + fi +fi + +check_min_reqs +calculate_vars +script_name=$(basename "$0") + +if [ "$dry_run" = true ]; then + say "Payload URLs:" + say "Primary named payload URL: ${download_link}" + if [ "$valid_legacy_download_link" = true ]; then + say "Legacy named payload URL: ${legacy_download_link}" + fi + repeatable_command="./$script_name --version "\""$specific_version"\"" --install-dir "\""$install_root"\"" --architecture "\""$normalized_architecture"\"" --os "\""$normalized_os"\""" + + if [ ! -z "$normalized_quality" ]; then + repeatable_command+=" --quality "\""$normalized_quality"\""" + fi + + if [[ "$runtime" == "dotnet" ]]; then + repeatable_command+=" --runtime "\""dotnet"\""" + elif [[ "$runtime" == "aspnetcore" ]]; then + repeatable_command+=" --runtime "\""aspnetcore"\""" + fi + + repeatable_command+="$non_dynamic_parameters" + + if [ -n "$feed_credential" ]; then + repeatable_command+=" --feed-credential "\"""\""" + fi + + say "Repeatable invocation: $repeatable_command" + exit 0 +fi + +install_dotnet + +bin_path="$(get_absolute_path "$(combine_paths "$install_root" "$bin_folder_relative_path")")" +if [ "$no_path" = false ]; then + say "Adding to current process PATH: \`$bin_path\`. Note: This change will be visible only when sourcing script." + export PATH="$bin_path":"$PATH" +else + say "Binaries of dotnet can be found in $bin_path" +fi + +say "Note that the script does not resolve dependencies during installation." +say "To check the list of dependencies, go to https://docs.microsoft.com/dotnet/core/install, select your operating system and check the \"Dependencies\" section." +say "Installation finished successfully." \ No newline at end of file diff --git a/global.json b/global.json new file mode 100644 index 000000000..550e1dfc7 --- /dev/null +++ b/global.json @@ -0,0 +1,5 @@ +{ + "sdk": { + "version": "6.0.100-rc.2.21505.57" + } +} \ No newline at end of file diff --git a/go.bat b/go.bat deleted file mode 100644 index 9f8805f56..000000000 --- a/go.bat +++ /dev/null @@ -1 +0,0 @@ -@bin\nant\NAnt.exe -buildfile:SharpArch.build %* diff --git a/mssql-setup.ps1 b/mssql-setup.ps1 new file mode 100644 index 000000000..3c042743b --- /dev/null +++ b/mssql-setup.ps1 @@ -0,0 +1,42 @@ +# Enable names pipes and set alias to TardisBank +# reference: https://www.appveyor.com/docs/services-databases/#enabling-tcpip-named-pipes-and-setting-instance-alias + +[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | Out-Null +[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.SqlWmiManagement") | Out-Null + +$serverName = $env:COMPUTERNAME +$instanceName = 'SQL2017' +$smo = 'Microsoft.SqlServer.Management.Smo.' +$wmi = new-object ($smo + 'Wmi.ManagedComputer') + +# Enable TCP/IP +$uri = "ManagedComputer[@Name='$serverName']/ServerInstance[@Name='$instanceName']/ServerProtocol[@Name='Tcp']" +$Tcp = $wmi.GetSmoObject($uri) +$Tcp.IsEnabled = $true +$Tcp.alter() + +# Disable named pipes +$uri = "ManagedComputer[@Name='$serverName']/ ServerInstance[@Name='$instanceName']/ServerProtocol[@Name='Np']" +$Np = $wmi.GetSmoObject($uri) +$Np.IsEnabled = $true +$Np.Alter() + +# Set Alias (64 bit) +New-Item HKLM:\SOFTWARE\Microsoft\MSSQLServer\Client -Name ConnectTo | Out-Null +Set-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\MSSQLServer\Client\ConnectTo -Name 'TardisBank' -Value "DBMSSOCN,$serverName\$instanceName" | Out-Null + +# Set Alias (32 bit) +New-Item HKLM:\SOFTWARE\WOW6432Node\Microsoft\MSSQLServer\Client -Name ConnectTo | Out-Null +Set-ItemProperty -Path HKLM:\SOFTWARE\WOW6432Node\Microsoft\MSSQLServer\Client\ConnectTo -Name 'TardisBank' -Value "DBMSSOCN,$serverName\$instanceName" | Out-Null + +$configPath=".\Samples\TardisBank\Src\Suteki.TardisBank.WebApi\NHibernate.config" + +((Get-Content -path $configPath -Raw) -replace 'Data Source=localhost,2433',"Data Source=$serverName\$instanceName") | Set-Content -Path $configPath + +# Start services +Set-Service SQLBrowser -StartupType Manual +Start-Service SQLBrowser +Start-Service "MSSQL`$$instanceName" + +sqlcmd -S TardisBank -U sa -P Password12! -Q "CREATE DATABASE TardisBank" + diff --git a/readthedocs.yml b/readthedocs.yml new file mode 100644 index 000000000..c098c6481 --- /dev/null +++ b/readthedocs.yml @@ -0,0 +1,23 @@ +# .readthedocs.yml +# Read the Docs configuration file +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details + +# Required +version: 2 + +# Build documentation in the docs/ directory with Sphinx +sphinx: + configuration: Artefacts/Documentation/source/conf.py + +# Build documentation with MkDocs +#mkdocs: +# configuration: mkdocs.yml + +# Optionally build your docs in additional formats such as PDF and ePub +formats: all + +# Optionally set the version of Python and requirements required to build your docs +python: + version: 3.7 + install: + - requirements: Artefacts/Documentation/requirements.txt diff --git a/src/NorthwindSample/CommonAssemblyInfo.cs b/src/NorthwindSample/CommonAssemblyInfo.cs deleted file mode 100644 index 803d7d5e4..000000000 --- a/src/NorthwindSample/CommonAssemblyInfo.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -[assembly: AssemblyCompany("Codai, LLC")] -[assembly: AssemblyCopyright("Copyright Codai, LLC 2009")] -[assembly: AssemblyConfiguration("debug")] -[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)] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] -[assembly: AssemblyInformationalVersion("1.0.0.0")] diff --git a/src/NorthwindSample/Northwind.sln b/src/NorthwindSample/Northwind.sln deleted file mode 100644 index 3b04d9145..000000000 --- a/src/NorthwindSample/Northwind.sln +++ /dev/null @@ -1,77 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Northwind.Core", "app\Northwind.Core\Northwind.Core.csproj", "{968B265E-AF3B-4153-B996-6EC4E83D9616}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Northwind.Data", "app\Northwind.Data\Northwind.Data.csproj", "{AAB1B13C-653C-4764-9360-4DA67F4CC959}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Northwind.Web", "app\Northwind.Web\Northwind.Web.csproj", "{47267265-B341-4954-829A-7F3A7F5E5F67}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Northwind.Tests", "tests\Northwind.Tests\Northwind.Tests.csproj", "{8AF76BE7-79B8-445D-9794-332B23D2D2F5}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Northwind.TestsUsingDevelopmentDatabase", "tests\Northwind.TestsUsingDevelopmentDatabase\Northwind.TestsUsingDevelopmentDatabase.csproj", "{467AE9B7-4107-4671-B0CA-A876150C69F2}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Code Generation", "Code Generation", "{66143917-5D9F-4B23-AD89-C2B0C3C68345}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CrudScaffolding", "tools\CrudScaffolding\CrudScaffolding.csproj", "{F9EBF6B7-DDD5-49B9-9DC7-CF48EACE1119}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Northwind.Web.Controllers", "app\Northwind.Web.Controllers\Northwind.Web.Controllers.csproj", "{4278C4DC-E2A8-4FB4-8172-82FB03E7DDF9}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Northwind.ApplicationServices", "app\Northwind.ApplicationServices\Northwind.ApplicationServices.csproj", "{DDD17CE0-17DC-4AA3-8CA7-D9B0F8D5E87C}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Northwind.Wcf", "app\Northwind.Wcf\Northwind.Wcf.csproj", "{7AB75E1D-30D2-4DF5-A2E6-03916FB24BBA}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Northwind.Wcf.Web", "app\Northwind.Wcf.Web\Northwind.Wcf.Web.csproj", "{BEE73053-51E5-413B-9931-A080930E4A69}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {968B265E-AF3B-4153-B996-6EC4E83D9616}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {968B265E-AF3B-4153-B996-6EC4E83D9616}.Debug|Any CPU.Build.0 = Debug|Any CPU - {968B265E-AF3B-4153-B996-6EC4E83D9616}.Release|Any CPU.ActiveCfg = Release|Any CPU - {968B265E-AF3B-4153-B996-6EC4E83D9616}.Release|Any CPU.Build.0 = Release|Any CPU - {AAB1B13C-653C-4764-9360-4DA67F4CC959}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AAB1B13C-653C-4764-9360-4DA67F4CC959}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AAB1B13C-653C-4764-9360-4DA67F4CC959}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AAB1B13C-653C-4764-9360-4DA67F4CC959}.Release|Any CPU.Build.0 = Release|Any CPU - {47267265-B341-4954-829A-7F3A7F5E5F67}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {47267265-B341-4954-829A-7F3A7F5E5F67}.Debug|Any CPU.Build.0 = Debug|Any CPU - {47267265-B341-4954-829A-7F3A7F5E5F67}.Release|Any CPU.ActiveCfg = Release|Any CPU - {47267265-B341-4954-829A-7F3A7F5E5F67}.Release|Any CPU.Build.0 = Release|Any CPU - {8AF76BE7-79B8-445D-9794-332B23D2D2F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8AF76BE7-79B8-445D-9794-332B23D2D2F5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8AF76BE7-79B8-445D-9794-332B23D2D2F5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8AF76BE7-79B8-445D-9794-332B23D2D2F5}.Release|Any CPU.Build.0 = Release|Any CPU - {467AE9B7-4107-4671-B0CA-A876150C69F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {467AE9B7-4107-4671-B0CA-A876150C69F2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {467AE9B7-4107-4671-B0CA-A876150C69F2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {467AE9B7-4107-4671-B0CA-A876150C69F2}.Release|Any CPU.Build.0 = Release|Any CPU - {F9EBF6B7-DDD5-49B9-9DC7-CF48EACE1119}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F9EBF6B7-DDD5-49B9-9DC7-CF48EACE1119}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4278C4DC-E2A8-4FB4-8172-82FB03E7DDF9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4278C4DC-E2A8-4FB4-8172-82FB03E7DDF9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4278C4DC-E2A8-4FB4-8172-82FB03E7DDF9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4278C4DC-E2A8-4FB4-8172-82FB03E7DDF9}.Release|Any CPU.Build.0 = Release|Any CPU - {DDD17CE0-17DC-4AA3-8CA7-D9B0F8D5E87C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DDD17CE0-17DC-4AA3-8CA7-D9B0F8D5E87C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DDD17CE0-17DC-4AA3-8CA7-D9B0F8D5E87C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DDD17CE0-17DC-4AA3-8CA7-D9B0F8D5E87C}.Release|Any CPU.Build.0 = Release|Any CPU - {7AB75E1D-30D2-4DF5-A2E6-03916FB24BBA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7AB75E1D-30D2-4DF5-A2E6-03916FB24BBA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7AB75E1D-30D2-4DF5-A2E6-03916FB24BBA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7AB75E1D-30D2-4DF5-A2E6-03916FB24BBA}.Release|Any CPU.Build.0 = Release|Any CPU - {BEE73053-51E5-413B-9931-A080930E4A69}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BEE73053-51E5-413B-9931-A080930E4A69}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BEE73053-51E5-413B-9931-A080930E4A69}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BEE73053-51E5-413B-9931-A080930E4A69}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {F9EBF6B7-DDD5-49B9-9DC7-CF48EACE1119} = {66143917-5D9F-4B23-AD89-C2B0C3C68345} - EndGlobalSection -EndGlobal diff --git a/src/NorthwindSample/app/Northwind.ApplicationServices/DashboardService.cs b/src/NorthwindSample/app/Northwind.ApplicationServices/DashboardService.cs deleted file mode 100644 index d6411328d..000000000 --- a/src/NorthwindSample/app/Northwind.ApplicationServices/DashboardService.cs +++ /dev/null @@ -1,70 +0,0 @@ -using Northwind.Core; -using SharpArch.Core; -using Northwind.Core.DataInterfaces; -using System.Collections.Generic; - -namespace Northwind.ApplicationServices -{ - public interface IDashboardService - { - DashboardService.DashboardSummaryDto GetDashboardSummary(); - } - - /// - /// This is an "application service" for coordinating the activities required by the view. - /// Arguably, this service is so simplistic that I would lean towards putting this "logic" - /// in the controller itself...but others would argue that ALL coordination with other services, - /// such as repositories should be done within an application service, such as this. The - /// nice thing about this service is that it encapsulates a bit of logic that is agnostic of - /// the technology context; e.g., web services, ASP.NET MVC, WCF, console app, etc. Consequently, - /// it's easy to reuse without having any duplicated code amongst the various project types. - /// - public class DashboardService : IDashboardService - { - /// - /// Since DashboardService is registered as a component within Northwind.Web.CastleWindsor.ComponentRegistrar, - /// its dependencies (e.g. supplierRepository) will automatically be injected when this service is - /// injected into the constructor of another object (e.g., Northwind.Web.Controllers.DashboardController). - /// - /// Note that the constructor isn't limited to a single dependency. You can pass in multiple repositories, - /// WCF services (e.g., as in Northwind.Web.Controllers.TerritoriesController), or even other application - /// services if you wanted to make it really ugly. - /// - public DashboardService(ISupplierRepository supplierRepository) { - Check.Require(supplierRepository != null, "supplierRepository may not be null"); - - this.supplierRepository = supplierRepository; - } - - /// - /// Uses the repository and domain layer to gather a few summary items for a dashboard view. - /// - public DashboardSummaryDto GetDashboardSummary() { - DashboardSummaryDto dashboardSummaryDto = new DashboardSummaryDto(); - - IList allSuppliers = supplierRepository.GetAll(); - - // Arguably, the following two collection extension methods could be moved to - // ISupplierRepository, but since there's only 29 suppliers in the Northwind database, - // pushing this to the data layer isn't going to buy us any performance improvement. - // Consequently, IMO, I lean towards keeping such logic on the application side. - // Furthermore, you should let a profiler inform you if have a bottle neck and then decide - // to optimize on the application or by pushing the logic and/or filtering to the database. - dashboardSummaryDto.SuppliersCarryingMostProducts = allSuppliers.FindSuppliersCarryingMostProducts(); - dashboardSummaryDto.SuppliersCarryingFewestProducts = allSuppliers.FindSuppliersCarryingFewestProducts(); - - return dashboardSummaryDto; - } - - /// - /// Arguably, this could go into a dedicated DTO layer. - /// - public class DashboardSummaryDto - { - public IList SuppliersCarryingMostProducts { get; set; } - public IList SuppliersCarryingFewestProducts { get; set; } - } - - private readonly ISupplierRepository supplierRepository; - } -} diff --git a/src/NorthwindSample/app/Northwind.ApplicationServices/Northwind.ApplicationServices.csproj b/src/NorthwindSample/app/Northwind.ApplicationServices/Northwind.ApplicationServices.csproj deleted file mode 100644 index a2e384f38..000000000 --- a/src/NorthwindSample/app/Northwind.ApplicationServices/Northwind.ApplicationServices.csproj +++ /dev/null @@ -1,72 +0,0 @@ - - - - Debug - AnyCPU - 9.0.30729 - 2.0 - {DDD17CE0-17DC-4AA3-8CA7-D9B0F8D5E87C} - Library - Properties - Northwind.ApplicationServices - Northwind.ApplicationServices - v3.5 - 512 - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - False - ..\..\..\..\bin\SharpArch.Core.dll - - - - 3.5 - - - 3.5 - - - 3.5 - - - - - - - Properties\CommonAssemblyInfo.cs - - - - - - - {968B265E-AF3B-4153-B996-6EC4E83D9616} - Northwind.Core - - - - - \ No newline at end of file diff --git a/src/NorthwindSample/app/Northwind.ApplicationServices/Properties/AssemblyInfo.cs b/src/NorthwindSample/app/Northwind.ApplicationServices/Properties/AssemblyInfo.cs deleted file mode 100644 index 283cadf4c..000000000 --- a/src/NorthwindSample/app/Northwind.ApplicationServices/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,13 +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("Northwind.ApplicationServices")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyProduct("Northwind.ApplicationServices")] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("2f49d2bf-666f-4527-99a9-5864f84ff326")] diff --git a/src/NorthwindSample/app/Northwind.Core/Category.cs b/src/NorthwindSample/app/Northwind.Core/Category.cs deleted file mode 100644 index ec4e20349..000000000 --- a/src/NorthwindSample/app/Northwind.Core/Category.cs +++ /dev/null @@ -1,21 +0,0 @@ -using NHibernate.Validator.Constraints; -using SharpArch.Core.DomainModel; - -namespace Northwind.Core -{ - public class Category : Entity - { - public Category() { } - - /// - /// Creates valid domain object - /// - public Category(string name) { - CategoryName = name; - } - - [DomainSignature] - [NotNullNotEmpty] - public virtual string CategoryName { get; protected set; } - } -} diff --git a/src/NorthwindSample/app/Northwind.Core/Customer.cs b/src/NorthwindSample/app/Northwind.Core/Customer.cs deleted file mode 100644 index fdcaf05d9..000000000 --- a/src/NorthwindSample/app/Northwind.Core/Customer.cs +++ /dev/null @@ -1,57 +0,0 @@ -using System.Collections.Generic; -using SharpArch.Core.PersistenceSupport; -using SharpArch.Core.DomainModel; -using NHibernate.Validator.Constraints; -using SharpArch.Core; - -namespace Northwind.Core -{ - /// - /// I'd like to be perfectly clear that I think assigned IDs are almost always a terrible - /// idea; this is a major complaint I have with the Northwind database. With that said, - /// some legacy databases require such techniques. - /// - public class Customer : EntityWithTypedId, IHasAssignedId - { - public Customer() { - InitMembers(); - } - - /// - /// Creates valid domain object - /// - public Customer(string companyName) : this() { - CompanyName = companyName; - } - - /// - /// Since we want to leverage automatic properties, init appropriate members here. - /// - private void InitMembers() { - Orders = new List(); - } - - [DomainSignature] - [NotNullNotEmpty] - public virtual string CompanyName { get; set; } - - [DomainSignature] - public virtual string ContactName { get; set; } - - public virtual string Country { get; set; } - public virtual string Fax { get; set; } - - /// - /// Note the protected set...only the ORM should set the collection reference directly - /// after it's been initialized in - /// - public virtual IList Orders { get; protected set; } - - public virtual void SetAssignedIdTo(string assignedId) { - Check.Require(!string.IsNullOrEmpty(assignedId), "assignedId may not be null or empty"); - Check.Require(assignedId.Trim().Length == 5, "assignedId must be exactly 5 characters"); - - Id = assignedId.Trim().ToUpper(); - } - } -} diff --git a/src/NorthwindSample/app/Northwind.Core/DataInterfaces/ICustomerRepository.cs b/src/NorthwindSample/app/Northwind.Core/DataInterfaces/ICustomerRepository.cs deleted file mode 100644 index 8b1088911..000000000 --- a/src/NorthwindSample/app/Northwind.Core/DataInterfaces/ICustomerRepository.cs +++ /dev/null @@ -1,16 +0,0 @@ -using SharpArch.Core.DomainModel; -using SharpArch.Core.PersistenceSupport.NHibernate; -using System.Collections.Generic; - -namespace Northwind.Core.DataInterfaces -{ - /// - /// Needs to implement INHibernateRepositoryWithTypedId because it has an assigned Id - /// and will need to be explicit about called Save or Update appropriately. Assigned - /// Ids are EVil with a capital E and V...yes, they're just that evil. - /// - public interface ICustomerRepository : INHibernateRepositoryWithTypedId - { - List FindByCountry(string countryName); - } -} diff --git a/src/NorthwindSample/app/Northwind.Core/DataInterfaces/ISupplierRepository.cs b/src/NorthwindSample/app/Northwind.Core/DataInterfaces/ISupplierRepository.cs deleted file mode 100644 index b2a580451..000000000 --- a/src/NorthwindSample/app/Northwind.Core/DataInterfaces/ISupplierRepository.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using SharpArch.Core.PersistenceSupport; -using SharpArch.Core.DomainModel; - -namespace Northwind.Core.DataInterfaces -{ - public interface ISupplierRepository : IRepository - { - List GetSuppliersBy(string productCategoryName); - } -} diff --git a/src/NorthwindSample/app/Northwind.Core/Northwind.Core.csproj b/src/NorthwindSample/app/Northwind.Core/Northwind.Core.csproj deleted file mode 100644 index cfd81eec0..000000000 --- a/src/NorthwindSample/app/Northwind.Core/Northwind.Core.csproj +++ /dev/null @@ -1,90 +0,0 @@ - - - - Debug - AnyCPU - 9.0.30729 - 2.0 - {968B265E-AF3B-4153-B996-6EC4E83D9616} - Library - Properties - Northwind.Core - Northwind.Core - v3.5 - 512 - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - False - ..\..\..\..\bin\Microsoft.Practices.ServiceLocation.dll - - - False - ..\..\..\..\bin\NHibernate.Validator.dll - - - False - ..\..\..\..\bin\SharpArch.Core.dll - - - False - ..\..\..\..\bin\SharpArch.Core.NHibernateValidator.dll - - - - 3.5 - - - - 3.5 - - - - - - Properties\CommonAssemblyInfo.cs - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/NorthwindSample/app/Northwind.Core/Order.cs b/src/NorthwindSample/app/Northwind.Core/Order.cs deleted file mode 100644 index 03c012fe5..000000000 --- a/src/NorthwindSample/app/Northwind.Core/Order.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using SharpArch.Core.PersistenceSupport; -using SharpArch.Core.DomainModel; -using SharpArch.Core; - -namespace Northwind.Core -{ - public class Order : Entity - { - /// - /// This is a placeholder constructor for NHibernate. - /// A no-argument constructor must be avilable for NHibernate to create the object. - /// - protected Order() { } - - public Order(Customer orderedBy) { - Check.Require(orderedBy != null, "orderedBy may not be null"); - - OrderedBy = orderedBy; - } - - public virtual DateTime? OrderDate { get; set; } - public virtual string ShipToName { get; set; } - public virtual Customer OrderedBy { get; protected set; } - - /// - /// Should ONLY contain the "business value signature" of the object and not the Id, - /// which is handled by . This method should return a unique - /// int representing a unique signature of the domain object. For - /// example, no two different orders should have the same ShipToName, OrderDate and OrderedBy; - /// therefore, the returned "signature" should be expressed as demonstrated below. - /// - /// Alternatively, we could decorate properties with the [DomainSignature] attribute, as shown in - /// , but here's an example of overriding it nonetheless. - /// - public override bool HasSameObjectSignatureAs(BaseObject compareTo) { - Order orderCompareTo = compareTo as Order; - - return orderCompareTo != null && ShipToName.Equals(orderCompareTo.ShipToName) && - (OrderDate ?? DateTime.MinValue).Equals((orderCompareTo.OrderDate ?? DateTime.MinValue)) && - OrderedBy.Equals(orderCompareTo.OrderedBy); - } - } -} diff --git a/src/NorthwindSample/app/Northwind.Core/OrdersExtensions.cs b/src/NorthwindSample/app/Northwind.Core/OrdersExtensions.cs deleted file mode 100644 index 69cbd02ff..000000000 --- a/src/NorthwindSample/app/Northwind.Core/OrdersExtensions.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using SharpArch.Core.DomainModel; - -namespace Northwind.Core -{ - /// - /// Extends IList<Order> with other, customer-specific collection methods. - /// - public static class OrdersExtensions - { - public static List FindOrdersPlacedOn(this IList orders, DateTime whenPlaced) { - return ( - from order in orders - where order.OrderDate == whenPlaced - orderby order.OrderDate - select order - ).ToList(); - } - } -} diff --git a/src/NorthwindSample/app/Northwind.Core/Organization/Employee.cs b/src/NorthwindSample/app/Northwind.Core/Organization/Employee.cs deleted file mode 100644 index 4fd4f24d5..000000000 --- a/src/NorthwindSample/app/Northwind.Core/Organization/Employee.cs +++ /dev/null @@ -1,60 +0,0 @@ -using SharpArch.Core.PersistenceSupport; -using SharpArch.Core.DomainModel; -using System.Collections.Generic; -using NHibernate.Validator.Constraints; -using SharpArch.Core.NHibernateValidator; - -namespace Northwind.Core.Organization -{ - /// - /// The domain signature of this object isn't very realistic as you'll likely have same named - /// people in a large company. Regardless, the Northwind DB doesn't provide a great domain - /// identifier, so the full name will have to do. Alternatively, you don't have to have - /// domain signature properties. If you don't, then Equals will use it's default behavior and - /// compare the object references themselves. - /// - [HasUniqueDomainSignature(Message="An employee already exists with the same first and last name")] - public class Employee : Entity - { - public Employee() { - InitMembers(); - } - - /// - /// Creates valid domain object - /// - public Employee(string firstName, string lastName) - : this() { - FirstName = firstName; - LastName = lastName; - } - - private void InitMembers() { - // Init the collection so it's never null - Territories = new List(); - } - - [DomainSignature] - [NotNullNotEmpty(Message = "Last name must be provided")] - public virtual string LastName { get; set; } - - [DomainSignature] - [NotNullNotEmpty(Message = "First name must be provided")] - public virtual string FirstName { get; set; } - - [Range(1, 9999, Message = "Phone extension must be between 1 and 9999")] - public virtual int PhoneExtension { get; set; } - - public virtual string FullName { - get { - return LastName + ", " + FirstName; - } - } - - /// - /// Note the protected set...only the ORM should set the collection reference directly - /// after it's been initialized in - /// - public virtual IList Territories { get; protected set; } - } -} diff --git a/src/NorthwindSample/app/Northwind.Core/Product.cs b/src/NorthwindSample/app/Northwind.Core/Product.cs deleted file mode 100644 index dd689af1b..000000000 --- a/src/NorthwindSample/app/Northwind.Core/Product.cs +++ /dev/null @@ -1,28 +0,0 @@ -using SharpArch.Core.DomainModel; -using NHibernate.Validator.Constraints; - -namespace Northwind.Core -{ - public class Product : Entity - { - public Product() { } - - /// - /// Creates valid domain object - /// - public Product(string name, Supplier supplier) { - Supplier = supplier; - ProductName = name; - } - - [DomainSignature] - [NotNullNotEmpty] - public virtual string ProductName { get; set; } - - [DomainSignature] - [NotNull] - public virtual Supplier Supplier { get; protected set; } - - public virtual Category Category { get; set; } - } -} diff --git a/src/NorthwindSample/app/Northwind.Core/Properties/AssemblyInfo.cs b/src/NorthwindSample/app/Northwind.Core/Properties/AssemblyInfo.cs deleted file mode 100644 index 5a899ceed..000000000 --- a/src/NorthwindSample/app/Northwind.Core/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,13 +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("Northwind.Core")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyProduct("Northwind.Core")] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("d87e8032-116d-4c66-8366-102b3bb19852")] diff --git a/src/NorthwindSample/app/Northwind.Core/Region.cs b/src/NorthwindSample/app/Northwind.Core/Region.cs deleted file mode 100644 index 206a7572f..000000000 --- a/src/NorthwindSample/app/Northwind.Core/Region.cs +++ /dev/null @@ -1,29 +0,0 @@ -using SharpArch.Core.DomainModel; -using SharpArch.Core.PersistenceSupport; -using NHibernate.Validator.Constraints; -using SharpArch.Core; - -namespace Northwind.Core -{ - public class Region : Entity, IHasAssignedId - { - /// - /// The Northwind DB doesn't make the Id of this object an identity field; - /// not using an identity setting on the DB was a bad design decision for - /// Northwind - learn from their mistakes! - /// - protected Region() { } - - public Region(string description) { - Check.Require(!string.IsNullOrEmpty(description)); - Description = description; - } - - [DomainSignature] - public virtual string Description { get; protected set; } - - public virtual void SetAssignedIdTo(int assignedId) { - Id = assignedId; - } - } -} diff --git a/src/NorthwindSample/app/Northwind.Core/Supplier.cs b/src/NorthwindSample/app/Northwind.Core/Supplier.cs deleted file mode 100644 index a28138a35..000000000 --- a/src/NorthwindSample/app/Northwind.Core/Supplier.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using SharpArch.Core.PersistenceSupport; -using SharpArch.Core.DomainModel; -using NHibernate.Validator.Constraints; - -namespace Northwind.Core -{ - public class Supplier : Entity - { - protected Supplier() { - InitMembers(); - } - - /// - /// Creates valid domain object - /// - public Supplier(string companyName) : this() { - CompanyName = companyName; - } - - private void InitMembers() { - Products = new List(); - } - - [DomainSignature] - [NotNullNotEmpty] - public virtual string CompanyName { get; set; } - - /// - /// Note the protected set...only the ORM should set the collection reference directly - /// after it's been initialized in - /// - public virtual IList Products { get; protected set; } - } -} diff --git a/src/NorthwindSample/app/Northwind.Core/SuppliersExtensions.cs b/src/NorthwindSample/app/Northwind.Core/SuppliersExtensions.cs deleted file mode 100644 index b8b6f791b..000000000 --- a/src/NorthwindSample/app/Northwind.Core/SuppliersExtensions.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System.Linq; -using SharpArch.Core.DomainModel; -using System.Collections.Generic; - -namespace Northwind.Core -{ - /// - /// Extends IList<Supplier> with other, customer-specific collection methods. - /// - public static class SuppliersExtensions - { - public static List FindSuppliersCarryingMostProducts(this IList suppliers) { - int maxProductsCount = suppliers.Max(supplier => supplier.Products.Count); - return GetSuppliersWithProductCountOf(maxProductsCount, suppliers); - } - - public static List FindSuppliersCarryingFewestProducts(this IList suppliers) { - int minProductsCount = suppliers.Min(supplier => supplier.Products.Count); - return GetSuppliersWithProductCountOf(minProductsCount, suppliers); - } - - private static List GetSuppliersWithProductCountOf(int productsCount, IList suppliers) { - return (from supplier in suppliers - where supplier.Products.Count == productsCount - select supplier).ToList(); - } - } -} diff --git a/src/NorthwindSample/app/Northwind.Core/Territory.cs b/src/NorthwindSample/app/Northwind.Core/Territory.cs deleted file mode 100644 index 653c1f20a..000000000 --- a/src/NorthwindSample/app/Northwind.Core/Territory.cs +++ /dev/null @@ -1,54 +0,0 @@ -using SharpArch.Core.PersistenceSupport; -using SharpArch.Core.DomainModel; -using System.Collections.Generic; -using NHibernate.Validator.Constraints; -using Northwind.Core.Organization; -using SharpArch.Core; - -namespace Northwind.Core -{ - public class Territory : EntityWithTypedId, IHasAssignedId - { - public Territory() { - InitMembers(); - } - - /// - /// Creates valid domain object - /// - public Territory(string description, Region regionBelongingTo) : this() { - RegionBelongingTo = regionBelongingTo; - Description = description; - } - - private void InitMembers() { - // Init the collection so it's never null - Employees = new List(); - } - - /// - /// Let me remind you that I completely disdane assigned Ids...another lesson to be learned - /// from the fallacies of the Northwind DB. - /// - public virtual void SetAssignedIdTo(string assignedId) { - Check.Require(!string.IsNullOrEmpty(assignedId) && assignedId.Length <= ID_MAX_LENGTH); - Id = assignedId; - } - - [DomainSignature] - [NotNull] - public virtual Region RegionBelongingTo { get; set; } - - [DomainSignature] - [NotNullNotEmpty] - public virtual string Description { get; set; } - - /// - /// Note the protected set...only the ORM should set the collection reference directly - /// after it's been initialized in - /// - public virtual IList Employees { get; protected set; } - - private const int ID_MAX_LENGTH = 20; - } -} diff --git a/src/NorthwindSample/app/Northwind.Data/CustomerRepository.cs b/src/NorthwindSample/app/Northwind.Data/CustomerRepository.cs deleted file mode 100644 index 16c4fcb36..000000000 --- a/src/NorthwindSample/app/Northwind.Data/CustomerRepository.cs +++ /dev/null @@ -1,19 +0,0 @@ -using Northwind.Core.DataInterfaces; -using Northwind.Core; -using NHibernate; -using SharpArch.Data.NHibernate; -using NHibernate.Criterion; -using System.Collections.Generic; - -namespace Northwind.Data -{ - public class CustomerRepository : NHibernateRepositoryWithTypedId, ICustomerRepository - { - public List FindByCountry(string countryName) { - ICriteria criteria = Session.CreateCriteria(typeof(Customer)) - .Add(Expression.Eq("Country", countryName)); - - return criteria.List() as List; - } - } -} diff --git a/src/NorthwindSample/app/Northwind.Data/NHibernateMaps/AutoPersistenceModelGenerator.cs b/src/NorthwindSample/app/Northwind.Data/NHibernateMaps/AutoPersistenceModelGenerator.cs deleted file mode 100644 index 6bffb3a5a..000000000 --- a/src/NorthwindSample/app/Northwind.Data/NHibernateMaps/AutoPersistenceModelGenerator.cs +++ /dev/null @@ -1,59 +0,0 @@ -using System; -using System.Linq; -using FluentNHibernate; -using FluentNHibernate.AutoMap; -using Northwind.Core; -using Northwind.Data.NHibernateMappings; -using SharpArch.Core.DomainModel; -using Northwind.Data.NHibernateMappings.Organization; -using Northwind.Data.NHibernateMaps.Conventions; -using FluentNHibernate.Conventions; -using SharpArch.Data.NHibernate.FluentNHibernate; - -namespace Northwind.Data.NHibernateMaps -{ - public class AutoPersistenceModelGenerator : IAutoPersistenceModelGenerator - { - public AutoPersistenceModel Generate() { - AutoPersistenceModel mappings = AutoPersistenceModel - .MapEntitiesFromAssemblyOf() - .Where(GetAutoMappingFilter) - .ConventionDiscovery.Setup(GetConventions()) - .WithSetup(GetSetup()) - .UseOverridesFromAssemblyOf(); - - return mappings; - } - - private Action GetSetup() { - return c => { - c.FindIdentity = type => type.Name == "Id"; - c.IsBaseType = IsBaseTypeConvention; - }; - } - - private Action GetConventions() { - return c => { - c.Add(); - c.Add(); - c.Add(); - }; - } - - /// - /// Provides a filter for only including types which inherit from the IEntityWithTypedId interface. - /// - private bool GetAutoMappingFilter(Type t) { - return t.GetInterfaces().Any(x => - x.IsGenericType && x.GetGenericTypeDefinition() == typeof(IEntityWithTypedId<>)); - } - - private bool IsBaseTypeConvention(Type arg) { - bool derivesFromEntity = arg == typeof(Entity); - bool derivesFromEntityWithTypedId = arg.IsGenericType && - (arg.GetGenericTypeDefinition() == typeof(EntityWithTypedId<>)); - - return derivesFromEntity || derivesFromEntityWithTypedId; - } - } -} diff --git a/src/NorthwindSample/app/Northwind.Data/NHibernateMaps/CategoryMap.cs b/src/NorthwindSample/app/Northwind.Data/NHibernateMaps/CategoryMap.cs deleted file mode 100644 index e6bb591f9..000000000 --- a/src/NorthwindSample/app/Northwind.Data/NHibernateMaps/CategoryMap.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Northwind.Core; -using FluentNHibernate; -using FluentNHibernate.Mapping; -using SharpArch.Data.NHibernate.FluentNHibernate; - -namespace Northwind.Data.NHibernateMappings -{ - public class CategoryMap : ClassMap, IMapGenerator - { - public CategoryMap() { - WithTable("Categories"); - - Id(x => x.ID, "CategoryID") - .WithUnsavedValue(0) - .GeneratedBy.Identity(); - - Map(x => x.Name, "CategoryName"); - } - - #region IMapGenerator Members - - public System.Xml.XmlDocument Generate() { - return CreateMapping(new MappingVisitor()); - } - - #endregion - } -} diff --git a/src/NorthwindSample/app/Northwind.Data/NHibernateMaps/Conventions/HasManyConvention.cs b/src/NorthwindSample/app/Northwind.Data/NHibernateMaps/Conventions/HasManyConvention.cs deleted file mode 100644 index 0b3ebd143..000000000 --- a/src/NorthwindSample/app/Northwind.Data/NHibernateMaps/Conventions/HasManyConvention.cs +++ /dev/null @@ -1,17 +0,0 @@ -using FluentNHibernate.Conventions; -using FluentNHibernate.Mapping; - -namespace Northwind.Data.NHibernateMaps.Conventions -{ - public class HasManyConvention : IHasManyConvention - { - public bool Accept(IOneToManyPart oneToManyPart) { - return true; - } - - public void Apply(IOneToManyPart oneToManyPart) { - oneToManyPart.KeyColumnNames.Clear(); - oneToManyPart.KeyColumnNames.Add(oneToManyPart.EntityType.Name + "ID"); - } - } -} diff --git a/src/NorthwindSample/app/Northwind.Data/NHibernateMaps/Conventions/PrimaryKeyConvention.cs b/src/NorthwindSample/app/Northwind.Data/NHibernateMaps/Conventions/PrimaryKeyConvention.cs deleted file mode 100644 index 408282a59..000000000 --- a/src/NorthwindSample/app/Northwind.Data/NHibernateMaps/Conventions/PrimaryKeyConvention.cs +++ /dev/null @@ -1,21 +0,0 @@ -using FluentNHibernate.Conventions; -using FluentNHibernate.Mapping; - -namespace Northwind.Data.NHibernateMaps.Conventions -{ - public class PrimaryKeyConvention : IIdConvention - { - public bool Accept(IIdentityPart id) { - return true; - } - - public void Apply(IIdentityPart id) { - id.ColumnName(id.EntityType.Name + "ID"); - // We could include other details, such as those shown below, but the Northwind DB - // mixes up assigned Ids, generated Ids, string Ids and int Ids; thus, making it - // difficult to put in a single convention for this - //.WithUnsavedValue(0) - //.GeneratedBy.Identity(); - } - } -} diff --git a/src/NorthwindSample/app/Northwind.Data/NHibernateMaps/Conventions/TableNameConvention.cs b/src/NorthwindSample/app/Northwind.Data/NHibernateMaps/Conventions/TableNameConvention.cs deleted file mode 100644 index cb45712bf..000000000 --- a/src/NorthwindSample/app/Northwind.Data/NHibernateMaps/Conventions/TableNameConvention.cs +++ /dev/null @@ -1,19 +0,0 @@ -using FluentNHibernate.Conventions; -using FluentNHibernate.Mapping; -using Northwind.Core; - -namespace Northwind.Data.NHibernateMaps.Conventions -{ - public class TableNameConvention : IClassConvention - { - public bool Accept(IClassMap classMap) { - // There's a class level exclusion here, but you can also create an override for the class - // itself discussed at http://groups.google.com/group/fluent-nhibernate/browse_thread/thread/b0fbb7988b904028 - return classMap.EntityType != typeof(Region); - } - - public void Apply(IClassMap classMap) { - classMap.WithTable(Inflector.Net.Inflector.Pluralize(classMap.EntityType.Name)); - } - } -} diff --git a/src/NorthwindSample/app/Northwind.Data/NHibernateMaps/CustomerMap.cs b/src/NorthwindSample/app/Northwind.Data/NHibernateMaps/CustomerMap.cs deleted file mode 100644 index b7528d0a6..000000000 --- a/src/NorthwindSample/app/Northwind.Data/NHibernateMaps/CustomerMap.cs +++ /dev/null @@ -1,14 +0,0 @@ -using FluentNHibernate.AutoMap; -using Northwind.Core; -using SharpArch.Data.NHibernate.FluentNHibernate; -using FluentNHibernate.AutoMap.Alterations; - -namespace Northwind.Data.NHibernateMappings -{ - public class CustomerMap : IAutoMappingOverride - { - public void Override(AutoMap mapping) { - mapping.SetAttribute("lazy", "false"); - } - } -} diff --git a/src/NorthwindSample/app/Northwind.Data/NHibernateMaps/OrderMap.cs b/src/NorthwindSample/app/Northwind.Data/NHibernateMaps/OrderMap.cs deleted file mode 100644 index 7ed65ecf4..000000000 --- a/src/NorthwindSample/app/Northwind.Data/NHibernateMaps/OrderMap.cs +++ /dev/null @@ -1,21 +0,0 @@ -using FluentNHibernate.AutoMap; -using Northwind.Core; -using SharpArch.Data.NHibernate.FluentNHibernate; -using FluentNHibernate.AutoMap.Alterations; - -namespace Northwind.Data.NHibernateMappings -{ - public class OrderMap : IAutoMappingOverride - { - public void Override(AutoMap mapping) { - mapping.Id(x => x.Id, "OrderID") - .WithUnsavedValue(0) - .GeneratedBy.Identity(); - - mapping.Map(x => x.ShipToName, "ShipName"); - - mapping.References(x => x.OrderedBy, "CustomerID") - .SetAttribute("not-null", "true"); - } - } -} diff --git a/src/NorthwindSample/app/Northwind.Data/NHibernateMaps/Organization/EmployeeMap.cs b/src/NorthwindSample/app/Northwind.Data/NHibernateMaps/Organization/EmployeeMap.cs deleted file mode 100644 index 4fd32487b..000000000 --- a/src/NorthwindSample/app/Northwind.Data/NHibernateMaps/Organization/EmployeeMap.cs +++ /dev/null @@ -1,28 +0,0 @@ -using FluentNHibernate.AutoMap; -using Northwind.Core.Organization; -using Northwind.Core; -using SharpArch.Data.NHibernate.FluentNHibernate; -using FluentNHibernate.AutoMap.Alterations; - -namespace Northwind.Data.NHibernateMappings.Organization -{ - public class EmployeeMap : IAutoMappingOverride - { - public void Override(AutoMap mapping) { - mapping.Id(x => x.Id, "EmployeeID") - .WithUnsavedValue(0) - .GeneratedBy.Identity(); - - // No need to specify the column name when it's the same as the property name - mapping.Map(x => x.FirstName); - mapping.Map(x => x.LastName); - mapping.Map(x => x.PhoneExtension, "Extension"); - - mapping.HasManyToMany(x => x.Territories) - .WithTableName("EmployeeTerritories") - .WithParentKeyColumn("EmployeeID") - .WithChildKeyColumn("TerritoryID") - .AsBag(); - } - } -} diff --git a/src/NorthwindSample/app/Northwind.Data/NHibernateMaps/ProductMap.cs b/src/NorthwindSample/app/Northwind.Data/NHibernateMaps/ProductMap.cs deleted file mode 100644 index d39eccfc0..000000000 --- a/src/NorthwindSample/app/Northwind.Data/NHibernateMaps/ProductMap.cs +++ /dev/null @@ -1,19 +0,0 @@ -using FluentNHibernate.AutoMap; -using Northwind.Core; -using SharpArch.Data.NHibernate.FluentNHibernate; -using FluentNHibernate.AutoMap.Alterations; - -namespace Northwind.Data.NHibernateMappings -{ - public class ProductMap : IAutoMappingOverride - { - public void Override(AutoMap mapping) { - mapping.Id(x => x.Id, "ProductID") - .WithUnsavedValue(0) - .GeneratedBy.Identity(); - - mapping.References(x => x.Supplier, "SupplierID"); - mapping.References(x => x.Category, "CategoryID"); - } - } -} diff --git a/src/NorthwindSample/app/Northwind.Data/NHibernateMaps/RegionMap.cs b/src/NorthwindSample/app/Northwind.Data/NHibernateMaps/RegionMap.cs deleted file mode 100644 index 198830113..000000000 --- a/src/NorthwindSample/app/Northwind.Data/NHibernateMaps/RegionMap.cs +++ /dev/null @@ -1,23 +0,0 @@ -using FluentNHibernate.AutoMap; -using Northwind.Core; -using SharpArch.Data.NHibernate.FluentNHibernate; -using FluentNHibernate.AutoMap.Alterations; - -namespace Northwind.Data.NHibernateMappings -{ - public class RegionMap : IAutoMappingOverride - { - public void Override(AutoMap mapping) { - // Why they didn't make this plural, when every other table is, is beyond me - mapping.WithTable("Region"); - // This seems to be a reference type in Northwind, so let's make it immutable - mapping.SetAttribute("mutable", "false"); - - mapping.Id(x => x.Id, "RegionID") - .WithUnsavedValue(0) - .GeneratedBy.Assigned(); - - mapping.Map(x => x.Description, "RegionDescription"); - } - } -} diff --git a/src/NorthwindSample/app/Northwind.Data/NHibernateMaps/SupplierMap.cs b/src/NorthwindSample/app/Northwind.Data/NHibernateMaps/SupplierMap.cs deleted file mode 100644 index f879ab3eb..000000000 --- a/src/NorthwindSample/app/Northwind.Data/NHibernateMaps/SupplierMap.cs +++ /dev/null @@ -1,25 +0,0 @@ -using FluentNHibernate.AutoMap; -using Northwind.Core; -using SharpArch.Data.NHibernate.FluentNHibernate; -using FluentNHibernate.AutoMap.Alterations; - -namespace Northwind.Data.NHibernateMappings -{ - public class SupplierMap : IAutoMappingOverride - { - public void Override(AutoMap mapping) { - mapping.SetAttribute("lazy", "false"); - - mapping.Id(x => x.Id, "SupplierID") - .WithUnsavedValue(0) - .GeneratedBy.Identity(); - - mapping.Map(x => x.CompanyName); - - mapping.HasMany(x => x.Products) - .Inverse() - .KeyColumnNames.Add("SupplierID") - .AsBag(); - } - } -} diff --git a/src/NorthwindSample/app/Northwind.Data/NHibernateMaps/TerritoryMap.cs b/src/NorthwindSample/app/Northwind.Data/NHibernateMaps/TerritoryMap.cs deleted file mode 100644 index f278a8103..000000000 --- a/src/NorthwindSample/app/Northwind.Data/NHibernateMaps/TerritoryMap.cs +++ /dev/null @@ -1,29 +0,0 @@ -using FluentNHibernate.AutoMap; -using Northwind.Core.Organization; -using Northwind.Core; -using SharpArch.Data.NHibernate.FluentNHibernate; -using FluentNHibernate.AutoMap.Alterations; - -namespace Northwind.Data.NHibernateMappings -{ - public class TerritoryMap : IAutoMappingOverride - { - public void Override(AutoMap mapping) { - // Evil assigned ID - use identity instead unless you're working with a legacy DB - mapping.Id(x => x.Id, "TerritoryID") - .GeneratedBy.Assigned(); - - mapping.Map(x => x.Description, "TerritoryDescription"); - - mapping.References(x => x.RegionBelongingTo, "RegionID") - .SetAttribute("not-null", "true"); - - mapping.HasManyToMany(x => x.Employees) - .WithTableName("EmployeeTerritories") - .Inverse() - .WithParentKeyColumn("TerritoryID") - .WithChildKeyColumn("EmployeeID") - .AsBag(); - } - } -} diff --git a/src/NorthwindSample/app/Northwind.Data/Northwind.Data.csproj b/src/NorthwindSample/app/Northwind.Data/Northwind.Data.csproj deleted file mode 100644 index 506c1f421..000000000 --- a/src/NorthwindSample/app/Northwind.Data/Northwind.Data.csproj +++ /dev/null @@ -1,110 +0,0 @@ - - - - Debug - AnyCPU - 9.0.30729 - 2.0 - {AAB1B13C-653C-4764-9360-4DA67F4CC959} - Library - Properties - Northwind.Data - Northwind.Data - v3.5 - 512 - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - False - ..\..\..\..\bin\FluentNHibernate.dll - - - False - ..\..\..\..\bin\Inflector.Net.dll - - - False - ..\..\..\..\bin\Microsoft.Practices.ServiceLocation.dll - - - False - ..\..\..\..\bin\NHibernate.dll - - - False - ..\..\..\..\bin\NHibernate.Linq.dll - - - False - ..\..\..\..\bin\SharpArch.Core.dll - - - False - ..\..\..\..\bin\SharpArch.Data.dll - - - - 3.5 - - - 3.5 - - - 3.5 - - - - - - - - - - - Code - - - - - - - - - - Properties\CommonAssemblyInfo.cs - - - - - - - {968B265E-AF3B-4153-B996-6EC4E83D9616} - Northwind.Core - - - - - \ No newline at end of file diff --git a/src/NorthwindSample/app/Northwind.Data/Properties/AssemblyInfo.cs b/src/NorthwindSample/app/Northwind.Data/Properties/AssemblyInfo.cs deleted file mode 100644 index 9b41f91c3..000000000 --- a/src/NorthwindSample/app/Northwind.Data/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,13 +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("Northwind.Data")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyProduct("Northwind.Data")] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("286c82b1-5b6a-461b-af83-7dbeba08b634")] diff --git a/src/NorthwindSample/app/Northwind.Data/SupplierRepository.cs b/src/NorthwindSample/app/Northwind.Data/SupplierRepository.cs deleted file mode 100644 index b220ebf98..000000000 --- a/src/NorthwindSample/app/Northwind.Data/SupplierRepository.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System.Collections.Generic; -using Northwind.Core.DataInterfaces; -using Northwind.Core; -using NHibernate; -using NHibernate.Transform; -using SharpArch.Data.NHibernate; -using NHibernate.Criterion; - -namespace Northwind.Data -{ - public class SupplierRepository : Repository, ISupplierRepository - { - /// - /// Uses NHibernate's CreateAlias to create a join query from the - /// to its collection of items to the category in which each - /// product belongs. This - /// - /// Note that a category alias would not be necessary if we were trying to match the category ID. - public List GetSuppliersBy(string productCategoryName) { - ICriteria criteria = Session.CreateCriteria(typeof(Supplier)) - .CreateAlias("Products", "product") - .CreateAlias("product.Category", "productCategory") - .Add(Expression.Eq("productCategory.CategoryName", productCategoryName)) - .SetResultTransformer(new DistinctRootEntityResultTransformer()); - - return criteria.List() as List; - } - } -} diff --git a/src/NorthwindSample/app/Northwind.Wcf.Web/CastleWindsor/ComponentRegistrar.cs b/src/NorthwindSample/app/Northwind.Wcf.Web/CastleWindsor/ComponentRegistrar.cs deleted file mode 100644 index 3003b4902..000000000 --- a/src/NorthwindSample/app/Northwind.Wcf.Web/CastleWindsor/ComponentRegistrar.cs +++ /dev/null @@ -1,42 +0,0 @@ -using Castle.Windsor; -using SharpArch.Core.PersistenceSupport.NHibernate; -using SharpArch.Data.NHibernate; -using SharpArch.Core.PersistenceSupport; -using SharpArch.Web.Castle; -using Castle.MicroKernel.Registration; - -namespace Northwind.Wcf.Web.CastleWindsor -{ - public class ComponentRegistrar - { - public static void AddComponentsTo(IWindsorContainer container) { - AddGenericRepositoriesTo(container); - AddCustomRepositoriesTo(container); - AddWcfServicesTo(container); - } - - private static void AddWcfServicesTo(IWindsorContainer container) { - // Since the TerritoriesService.svc must be associated with a concrete class, - // we must register the concrete implementation here as the service - container.AddComponent("territoriesWcfService", typeof(TerritoriesWcfService)); - } - - private static void AddCustomRepositoriesTo(IWindsorContainer container) { - container.Register( - AllTypes.Pick() - .FromAssemblyNamed("Northwind.Data") - .WithService.FirstNonGenericCoreInterface("Northwind.Core")); - } - - private static void AddGenericRepositoriesTo(IWindsorContainer container) { - container.AddComponent("repositoryType", - typeof(IRepository<>), typeof(Repository<>)); - container.AddComponent("nhibernateRepositoryType", - typeof(INHibernateRepository<>), typeof(NHibernateRepository<>)); - container.AddComponent("repositoryWithTypedId", - typeof(IRepositoryWithTypedId<,>), typeof(RepositoryWithTypedId<,>)); - container.AddComponent("nhibernateRepositoryWithTypedId", - typeof(INHibernateRepositoryWithTypedId<,>), typeof(NHibernateRepositoryWithTypedId<,>)); - } - } -} diff --git a/src/NorthwindSample/app/Northwind.Wcf.Web/Global.asax b/src/NorthwindSample/app/Northwind.Wcf.Web/Global.asax deleted file mode 100644 index 5ef9a5d85..000000000 --- a/src/NorthwindSample/app/Northwind.Wcf.Web/Global.asax +++ /dev/null @@ -1 +0,0 @@ -<%@ Application Codebehind="Global.asax.cs" Inherits="Northwind.Wcf.Web.Global" Language="C#" %> diff --git a/src/NorthwindSample/app/Northwind.Wcf.Web/Global.asax.cs b/src/NorthwindSample/app/Northwind.Wcf.Web/Global.asax.cs deleted file mode 100644 index 938426c48..000000000 --- a/src/NorthwindSample/app/Northwind.Wcf.Web/Global.asax.cs +++ /dev/null @@ -1,62 +0,0 @@ -using System; -using Castle.Windsor; -using System.Web; -using CommonServiceLocator.WindsorAdapter; -using Microsoft.Practices.ServiceLocation; -using SharpArch.Data.NHibernate; -using SharpArch.Wcf.NHibernate; -using Northwind.Data.NHibernateMaps; -using Northwind.Wcf.Web.CastleWindsor; - -namespace Northwind.Wcf.Web -{ - public class Global : HttpApplication - { - protected void Application_Start(object sender, EventArgs e) { - InitializeServiceLocator(); - } - - /// - /// Instantiate the container and add components. - /// - protected virtual void InitializeServiceLocator() { - IWindsorContainer container = new WindsorContainer(); - ComponentRegistrar.AddComponentsTo(container); - - ServiceLocator.SetLocatorProvider(() => new WindsorServiceLocator(container)); - } - - /// - /// Due to issues on IIS7, the NHibernate initialization must occur in Init(). - /// But Init() may be invoked more than once; accordingly, we introduce a thread-safe - /// mechanism to ensure it's only initialized once. - /// - /// See http://msdn.microsoft.com/en-us/magazine/cc188793.aspx for explanation details. - /// - public override void Init() { - base.Init(); - - // Only allow the NHibernate session to be initialized once - if (!wasNHibernateInitialized) { - lock (lockObject) { - if (!wasNHibernateInitialized) { - // Note the use of WcfSessionStorage below...very important! - NHibernateSession.Init(new WcfSessionStorage(), - new string[] { Server.MapPath("~/bin/Northwind.Data.dll") }, - new AutoPersistenceModelGenerator().Generate(), - Server.MapPath("~/NHibernate.config")); - - wasNHibernateInitialized = true; - } - } - } - } - - private static bool wasNHibernateInitialized = false; - - /// - /// Private, static object used only for synchronization - /// - private static object lockObject = new object(); - } -} \ No newline at end of file diff --git a/src/NorthwindSample/app/Northwind.Wcf.Web/NHibernate.config b/src/NorthwindSample/app/Northwind.Wcf.Web/NHibernate.config deleted file mode 100644 index 120ad78ca..000000000 --- a/src/NorthwindSample/app/Northwind.Wcf.Web/NHibernate.config +++ /dev/null @@ -1,19 +0,0 @@ - - - - Data Source=YOUR_SERVER;Database=Northwind;UID=YOUR_USERNAME;pwd=YOUR_PASSWORD; - NHibernate.Dialect.MsSql2005Dialect - NHibernate.Connection.DriverConnectionProvider - NHibernate.Driver.SqlClientDriver - false - auto - 500 - NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle - - - - - - diff --git a/src/NorthwindSample/app/Northwind.Wcf.Web/Northwind.Wcf.Web.csproj b/src/NorthwindSample/app/Northwind.Wcf.Web/Northwind.Wcf.Web.csproj deleted file mode 100644 index f70bb27f4..000000000 --- a/src/NorthwindSample/app/Northwind.Wcf.Web/Northwind.Wcf.Web.csproj +++ /dev/null @@ -1,162 +0,0 @@ - - - Debug - AnyCPU - 9.0.30729 - 2.0 - {BEE73053-51E5-413B-9931-A080930E4A69} - {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} - Library - Properties - Northwind.Wcf.Web - Northwind.Wcf.Web - v3.5 - - - true - full - false - bin\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\ - TRACE - prompt - 4 - - - - False - ..\..\..\..\bin\Castle.Core.dll - - - False - ..\..\..\..\bin\Castle.MicroKernel.dll - - - False - ..\..\..\..\bin\Castle.Windsor.dll - - - False - ..\..\..\..\bin\CommonServiceLocator.WindsorAdapter.dll - - - False - ..\..\..\..\bin\FluentNHibernate.dll - - - False - ..\..\..\..\bin\Microsoft.Practices.ServiceLocation.dll - - - False - ..\..\..\..\bin\NHibernate.dll - - - False - ..\..\..\..\bin\NHibernate.ByteCode.Castle.dll - - - False - ..\..\..\..\bin\SharpArch.Core.dll - - - False - ..\..\..\..\bin\SharpArch.Data.dll - - - False - ..\..\..\..\bin\SharpArch.Wcf.dll - - - False - ..\..\..\..\bin\SharpArch.Web.Castle.dll - - - - - 3.5 - - - - - - 3.0 - - - 3.0 - - - - 3.5 - - - - - - 3.5 - - - - - - - - - - - Global.asax - - - - - - {AAB1B13C-653C-4764-9360-4DA67F4CC959} - Northwind.Data - - - {7AB75E1D-30D2-4DF5-A2E6-03916FB24BBA} - Northwind.Wcf - - - - - - - - - - - - - - - - False - True - 1382 - / - - - False - False - - - False - - - - - \ No newline at end of file diff --git a/src/NorthwindSample/app/Northwind.Wcf.Web/Properties/AssemblyInfo.cs b/src/NorthwindSample/app/Northwind.Wcf.Web/Properties/AssemblyInfo.cs deleted file mode 100644 index 779ec9ec3..000000000 --- a/src/NorthwindSample/app/Northwind.Wcf.Web/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +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("Northwind.Wcf.Web")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Codai, LLC")] -[assembly: AssemblyProduct("Northwind.Wcf.Web")] -[assembly: AssemblyCopyright("Copyright © Codai, LLC 2009")] -[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("0218b2c2-71a7-401c-b739-bf37484e4741")] - -// 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.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/src/NorthwindSample/app/Northwind.Wcf.Web/TerritoriesService.svc b/src/NorthwindSample/app/Northwind.Wcf.Web/TerritoriesService.svc deleted file mode 100644 index fbf4debce..000000000 --- a/src/NorthwindSample/app/Northwind.Wcf.Web/TerritoriesService.svc +++ /dev/null @@ -1,3 +0,0 @@ -<%@ ServiceHost Language="C#" Debug="true" - Service="Northwind.Wcf.TerritoriesWcfService" - Factory="SharpArch.Wcf.NHibernate.ServiceHostFactory, SharpArch.Wcf" %> diff --git a/src/NorthwindSample/app/Northwind.Wcf.Web/Web.config b/src/NorthwindSample/app/Northwind.Wcf.Web/Web.config deleted file mode 100644 index 682c89366..000000000 --- a/src/NorthwindSample/app/Northwind.Wcf.Web/Web.config +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - -
            - -
            -
            -
            -
            - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/NorthwindSample/app/Northwind.Wcf/Dtos/EmployeeDto.cs b/src/NorthwindSample/app/Northwind.Wcf/Dtos/EmployeeDto.cs deleted file mode 100644 index 86279f51a..000000000 --- a/src/NorthwindSample/app/Northwind.Wcf/Dtos/EmployeeDto.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Northwind.Core.Organization; - -namespace Northwind.Wcf.Dtos -{ - public class EmployeeDto - { - /// - /// Transfers the employee entity's property values to the DTO. - /// Strongly consider Jimmy Bogard's AutoMapper (http://automapper.codeplex.com/) - /// for doing this kind of work in a more automated fashion. - /// - public static EmployeeDto Create(Employee employee) { - if (employee == null) - return null; - - return new EmployeeDto() { - Id = employee.Id, - FirstName = employee.FirstName, - LastName = employee.LastName - }; - } - - private EmployeeDto() { } - - public int Id { get; set; } - public string FirstName { get; set; } - public string LastName { get; set; } - } -} diff --git a/src/NorthwindSample/app/Northwind.Wcf/Dtos/README.txt b/src/NorthwindSample/app/Northwind.Wcf/Dtos/README.txt deleted file mode 100644 index ee3070578..000000000 --- a/src/NorthwindSample/app/Northwind.Wcf/Dtos/README.txt +++ /dev/null @@ -1,3 +0,0 @@ -Although this DTO (Data Transfer Object) folder resides in Northwind.Wcf, a better design might be -to create a Northwind.Dto project which could be leveraged by application services to transfer data -to the presentation layer as well as being used by the WCF service. \ No newline at end of file diff --git a/src/NorthwindSample/app/Northwind.Wcf/Dtos/RegionDto.cs b/src/NorthwindSample/app/Northwind.Wcf/Dtos/RegionDto.cs deleted file mode 100644 index c501c2da0..000000000 --- a/src/NorthwindSample/app/Northwind.Wcf/Dtos/RegionDto.cs +++ /dev/null @@ -1,31 +0,0 @@ -using Northwind.Core; -using SharpArch.Core; - -namespace Northwind.Wcf.Dtos -{ - /// - /// DTO for a region entity. - /// - public class RegionDto - { - /// - /// Transfers the region entity's property values to the DTO. - /// Strongly consider Jimmy Bogard's AutoMapper (http://automapper.codeplex.com/) - /// for doing this kind of work in a more automated fashion. - /// - public static RegionDto Create(Region region) { - if (region == null) - return null; - - return new RegionDto() { - Id = region.Id, - Description = region.Description - }; - } - - private RegionDto() { } - - public int Id { get; set; } - public string Description { get; set; } - } -} diff --git a/src/NorthwindSample/app/Northwind.Wcf/Dtos/TerritoryDto.cs b/src/NorthwindSample/app/Northwind.Wcf/Dtos/TerritoryDto.cs deleted file mode 100644 index fe2287440..000000000 --- a/src/NorthwindSample/app/Northwind.Wcf/Dtos/TerritoryDto.cs +++ /dev/null @@ -1,47 +0,0 @@ -using Northwind.Core; -using Northwind.Core.Organization; -using System.Collections.Generic; -using System; -using System.Xml.Serialization; - -namespace Northwind.Wcf.Dtos -{ - public class TerritoryDto - { - /// - /// Transfers the territory entity's property values to the DTO. - /// Strongly consider Jimmy Bogard's AutoMapper (http://automapper.codeplex.com/) - /// for doing this kind of work in a more automated fashion. - /// - public static TerritoryDto Create(Territory territory) { - if (territory == null) - return null; - - TerritoryDto territoryDto = new TerritoryDto(); - territoryDto.Id = territory.Id; - territoryDto.RegionBelongingTo = RegionDto.Create(territory.RegionBelongingTo); - territoryDto.Description = territory.Description; - - foreach (Employee employee in territory.Employees) { - territoryDto.Employees.Add(EmployeeDto.Create(employee)); - } - - return territoryDto; - } - - private TerritoryDto() { - Employees = new List(); - } - - public string Id { get; set; } - public RegionDto RegionBelongingTo { get; set; } - public string Description { get; set; } - - /// - /// I'd prefer to have a protected setter, but since we need it to be XML-serializable, the setter must be public - /// - //[XmlArray("Employees")] - //[XmlArrayItem("Employee", typeof(EmployeeDto))] - public List Employees { get; set; } - } -} diff --git a/src/NorthwindSample/app/Northwind.Wcf/ITerritoriesWcfService.cs b/src/NorthwindSample/app/Northwind.Wcf/ITerritoriesWcfService.cs deleted file mode 100644 index c76d881bd..000000000 --- a/src/NorthwindSample/app/Northwind.Wcf/ITerritoriesWcfService.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System.Collections.Generic; -using System.Runtime.Serialization; -using System.ServiceModel; -using Northwind.Core; -using Northwind.Wcf.Dtos; -using SharpArch.Wcf; - -namespace Northwind.Wcf -{ - /// - /// This inherits from so that it can be - /// interchanged with a WCF client proxy without having to worry about if you can call Close() - /// and Abort() on it. In this way, you can treat everything as if it were a client proxy - /// which needs to be disposed with Close/Abort. - /// - [ServiceContract] - public interface ITerritoriesWcfService : ICloseableAndAbortable - { - /// - /// Returns all territories as DTOs. - /// - /// - /// Although this returns an IList, an argument can be made for making it IEnumerable to - /// make the client less coupled to a specific list interface. - /// - [OperationContract] - IList GetTerritories(); - } -} diff --git a/src/NorthwindSample/app/Northwind.Wcf/Northwind.Wcf.csproj b/src/NorthwindSample/app/Northwind.Wcf/Northwind.Wcf.csproj deleted file mode 100644 index 8ba261374..000000000 --- a/src/NorthwindSample/app/Northwind.Wcf/Northwind.Wcf.csproj +++ /dev/null @@ -1,93 +0,0 @@ - - - Debug - AnyCPU - 9.0.30729 - 2.0 - {7AB75E1D-30D2-4DF5-A2E6-03916FB24BBA} - Library - Properties - Northwind.WcfServices - Northwind.WcfServices - {3D9AD99F-2412-4246-B90B-4EAA41C64699};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - /client:"WcfTestClient.exe" - v3.5 - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - False - ..\..\..\..\bin\SharpArch.Core.dll - - - False - ..\..\..\..\bin\SharpArch.Wcf.dll - - - - 3.5 - - - - 3.0 - - - 3.0 - - - - 3.5 - - - - - - - - - - - - - - {968B265E-AF3B-4153-B996-6EC4E83D9616} - Northwind.Core - - - - - - - - - - - - True - - - - - \ No newline at end of file diff --git a/src/NorthwindSample/app/Northwind.Wcf/Properties/AssemblyInfo.cs b/src/NorthwindSample/app/Northwind.Wcf/Properties/AssemblyInfo.cs deleted file mode 100644 index b8cd5025f..000000000 --- a/src/NorthwindSample/app/Northwind.Wcf/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +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("Northwind.WcfServices")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Codai, LLC")] -[assembly: AssemblyProduct("Northwind.WcfServices")] -[assembly: AssemblyCopyright("Copyright © Codai, LLC 2009")] -[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("84560795-67b2-4272-bf2b-5f5496f9eb02")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/src/NorthwindSample/app/Northwind.Wcf/TerritoriesWcfService.cs b/src/NorthwindSample/app/Northwind.Wcf/TerritoriesWcfService.cs deleted file mode 100644 index 212da39d0..000000000 --- a/src/NorthwindSample/app/Northwind.Wcf/TerritoriesWcfService.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System.Runtime.Serialization; -using System.ServiceModel; -using Northwind.Core; -using SharpArch.Core.PersistenceSupport; -using Northwind.Wcf.Dtos; -using System.Collections.Generic; -using SharpArch.Core; - -namespace Northwind.Wcf -{ - /// - /// Concrete implementation of the service. - /// - public class TerritoriesWcfService : ITerritoriesWcfService - { - public TerritoriesWcfService(IRepository territoryRepository) { - Check.Require(territoryRepository != null, "territoryRepository may not be null"); - - this.territoryRepository = territoryRepository; - } - - public IList GetTerritories() { - // I'd rather have the transaction begun via an attribute, like with a controller action, - // or within a service object, but this works for the current example. - territoryRepository.DbContext.BeginTransaction(); - - IList territories = territoryRepository.GetAll(); - List territoryDtos = new List(); - - foreach (Territory territory in territories) { - territoryDtos.Add(TerritoryDto.Create(territory)); - } - - // Since we're certainly not going to require lazy loading, commit the transcation - // before returning the data. - territoryRepository.DbContext.CommitTransaction(); - - return territoryDtos; - } - - private readonly IRepository territoryRepository; - - /// - /// Doesn't do anything because it only exists to be interchangeable with WCF client - /// proxies, such as - /// - public void Abort() { } - - /// - /// Doesn't do anything because it only exists to be interchangeable with WCF client - /// proxies, such as - /// - public void Close() { } - } -} diff --git a/src/NorthwindSample/app/Northwind.Wcf/TerritoriesWcfServiceClient.cs b/src/NorthwindSample/app/Northwind.Wcf/TerritoriesWcfServiceClient.cs deleted file mode 100644 index f3e7e55d1..000000000 --- a/src/NorthwindSample/app/Northwind.Wcf/TerritoriesWcfServiceClient.cs +++ /dev/null @@ -1,25 +0,0 @@ -using Northwind.Wcf; -using Northwind.Wcf.Dtos; -using System.Collections.Generic; -using System.ServiceModel.Channels; -using System.ServiceModel; - -namespace Northwind.WcfServices -{ - /// - /// Provides a strongly typed client proxy to use the WCF service without having to configure - /// it via WCF configuration. - /// - public partial class TerritoriesWcfServiceClient : ClientBase, ITerritoriesWcfService - { - public TerritoriesWcfServiceClient() { } - public TerritoriesWcfServiceClient(string endpointName) - : base(endpointName) { } - public TerritoriesWcfServiceClient(Binding binding, EndpointAddress address) - : base(binding, address) { } - - public IList GetTerritories() { - return Channel.GetTerritories(); - } - } -} diff --git a/src/NorthwindSample/app/Northwind.Web.Controllers/CategoriesController.cs b/src/NorthwindSample/app/Northwind.Web.Controllers/CategoriesController.cs deleted file mode 100644 index f1b395030..000000000 --- a/src/NorthwindSample/app/Northwind.Web.Controllers/CategoriesController.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System.Web.Mvc; -using Northwind.Core; -using SharpArch.Core.PersistenceSupport; -using SharpArch.Core.DomainModel; -using System.Collections.Generic; -using SharpArch.Web.NHibernate; -using System; -using SharpArch.Core; - -namespace Northwind.Web.Controllers -{ - [HandleError] - public class CategoriesController : Controller - { - public CategoriesController(IRepository categoryRepository) { - Check.Require(categoryRepository != null, "categoryRepository may not be null"); - - this.categoryRepository = categoryRepository; - } - - /// - /// The transaction on this action is optional, but recommended for performance reasons - /// - [Transaction] - public ActionResult Index() { - IList categories = categoryRepository.GetAll(); - return View(categories); - } - - /// - /// The transaction on this action is optional, but recommended for performance reasons - /// - [Transaction] - public ActionResult Show(int id) { - Category category = categoryRepository.Get(id); - return View(category); - } - - /// - /// An example of creating an object with an auto incrementing ID. - /// - /// Because this uses a declarative transaction, everything within this method is wrapped - /// within a single transaction. - /// - [Transaction] - public ActionResult Create(string categoryName) { - Category category = new Category(categoryName); - category = categoryRepository.SaveOrUpdate(category); - - return View(category); - } - - private readonly IRepository categoryRepository; - } -} diff --git a/src/NorthwindSample/app/Northwind.Web.Controllers/ControllerEnums.cs b/src/NorthwindSample/app/Northwind.Web.Controllers/ControllerEnums.cs deleted file mode 100644 index 32f351232..000000000 --- a/src/NorthwindSample/app/Northwind.Web.Controllers/ControllerEnums.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace Northwind.Web.Controllers -{ - public class ControllerEnums - { - public enum GlobalViewDataProperty - { - PageMessage - } - } -} diff --git a/src/NorthwindSample/app/Northwind.Web.Controllers/CustomersController.cs b/src/NorthwindSample/app/Northwind.Web.Controllers/CustomersController.cs deleted file mode 100644 index 29f1d42db..000000000 --- a/src/NorthwindSample/app/Northwind.Web.Controllers/CustomersController.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System.Web.Mvc; -using Northwind.Core; -using System.Collections.Generic; -using Northwind.Core.DataInterfaces; -using SharpArch.Web.NHibernate; -using SharpArch.Core; - -namespace Northwind.Web.Controllers -{ - [HandleError] - public class CustomersController : Controller - { - public CustomersController(ICustomerRepository customerRepository) { - Check.Require(customerRepository != null, "customerRepository may not be null"); - - this.customerRepository = customerRepository; - } - - /// - /// The transaction on this action is optional, but recommended for performance reasons - /// - [Transaction] - public ActionResult Index() { - List customers = customerRepository.FindByCountry("Venezuela"); - return View(customers); - } - - /// - /// An example of creating an object with an assigned ID. Because this uses a declarative - /// transaction, everything within this method is wrapped within a single transaction. - /// - /// I'd like to be perfectly clear that I think assigned IDs are almost always a terrible - /// idea; this is a major complaint I have with the Northwind database. With that said, - /// some legacy databases require such techniques. - /// - [Transaction] - public ActionResult Create(string companyName, string assignedId) { - Customer customer = new Customer(companyName); - customer.SetAssignedIdTo(assignedId); - customerRepository.Save(customer); - - return View(customer); - } - - private readonly ICustomerRepository customerRepository; - } -} diff --git a/src/NorthwindSample/app/Northwind.Web.Controllers/DashboardController.cs b/src/NorthwindSample/app/Northwind.Web.Controllers/DashboardController.cs deleted file mode 100644 index 67c1915a6..000000000 --- a/src/NorthwindSample/app/Northwind.Web.Controllers/DashboardController.cs +++ /dev/null @@ -1,31 +0,0 @@ -using SharpArch.Core; -using System.Web.Mvc; -using Northwind.ApplicationServices; - -namespace Northwind.Web.Controllers -{ - public class DashboardController : Controller - { - /// - /// Note that the application service gets injected into the controller. Since it's not a - /// repository (which gets automatically wired up for dependency injection), the service - /// needs to be manually registered within Northwind.Web.CastleWindsor.ComponentRegistrar - /// - public DashboardController(IDashboardService dashboardService) { - Check.Require(dashboardService != null, "dashboardService may not be null"); - - this.dashboardService = dashboardService; - } - - /// - /// Uses the application summary to collate the dashboard summary information - /// - public ActionResult Index() { - DashboardService.DashboardSummaryDto summary = dashboardService.GetDashboardSummary(); - - return View(summary); - } - - private readonly IDashboardService dashboardService; - } -} diff --git a/src/NorthwindSample/app/Northwind.Web.Controllers/HomeController.cs b/src/NorthwindSample/app/Northwind.Web.Controllers/HomeController.cs deleted file mode 100644 index 71742d6e8..000000000 --- a/src/NorthwindSample/app/Northwind.Web.Controllers/HomeController.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.Web.Mvc; -using System; - -namespace Northwind.Web.Controllers -{ - [HandleError] - public class HomeController : Controller - { - public ActionResult Index() { - return View(); - } - } -} diff --git a/src/NorthwindSample/app/Northwind.Web.Controllers/Northwind.Web.Controllers.csproj b/src/NorthwindSample/app/Northwind.Web.Controllers/Northwind.Web.Controllers.csproj deleted file mode 100644 index 726cf0afb..000000000 --- a/src/NorthwindSample/app/Northwind.Web.Controllers/Northwind.Web.Controllers.csproj +++ /dev/null @@ -1,131 +0,0 @@ - - - - Debug - AnyCPU - 9.0.30729 - 2.0 - {4278C4DC-E2A8-4FB4-8172-82FB03E7DDF9} - Library - Properties - Northwind.Web.Controllers - Northwind.Web.Controllers - v3.5 - 512 - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - False - ..\..\..\..\bin\Iesi.Collections.dll - - - False - ..\..\..\..\bin\Microsoft.Practices.ServiceLocation.dll - - - False - ..\..\..\..\bin\MvcContrib.dll - - - False - ..\..\..\..\bin\NHibernate.Validator.dll - - - False - ..\..\..\..\bin\SharpArch.Core.dll - - - False - ..\..\..\..\bin\SharpArch.Wcf.dll - - - False - ..\..\..\..\bin\SharpArch.Web.dll - - - - 3.5 - - - - 3.0 - - - 3.0 - - - - False - ..\..\..\..\bin\System.Web.Abstractions.dll - - - False - ..\..\..\..\bin\System.Web.Mvc.dll - - - False - ..\..\..\..\bin\System.Web.Routing.dll - - - 3.5 - - - - - - - - - - - Properties\CommonAssemblyInfo.cs - - - - - - - - - {DDD17CE0-17DC-4AA3-8CA7-D9B0F8D5E87C} - Northwind.ApplicationServices - - - {968B265E-AF3B-4153-B996-6EC4E83D9616} - Northwind.Core - - - {7AB75E1D-30D2-4DF5-A2E6-03916FB24BBA} - Northwind.Wcf - - - - - - - - - \ No newline at end of file diff --git a/src/NorthwindSample/app/Northwind.Web.Controllers/Northwind.Web.Controllers.csproj.user b/src/NorthwindSample/app/Northwind.Web.Controllers/Northwind.Web.Controllers.csproj.user deleted file mode 100644 index 5c2d6e6a7..000000000 --- a/src/NorthwindSample/app/Northwind.Web.Controllers/Northwind.Web.Controllers.csproj.user +++ /dev/null @@ -1,5 +0,0 @@ - - - ShowAllFiles - - \ No newline at end of file diff --git a/src/NorthwindSample/app/Northwind.Web.Controllers/Organization/EmployeesController.cs b/src/NorthwindSample/app/Northwind.Web.Controllers/Organization/EmployeesController.cs deleted file mode 100644 index 62e4c3fd8..000000000 --- a/src/NorthwindSample/app/Northwind.Web.Controllers/Organization/EmployeesController.cs +++ /dev/null @@ -1,181 +0,0 @@ -using System.Web.Mvc; -using Northwind.Core.Organization; -using SharpArch.Core.PersistenceSupport; -using SharpArch.Core.DomainModel; -using System.Collections.Generic; -using System; -using SharpArch.Web.NHibernate; -using NHibernate.Validator.Engine; -using System.Text; -using SharpArch.Web.CommonValidator; -using SharpArch.Core; -using Northwind.Core; -using System.Linq; - -namespace Northwind.Web.Controllers.Organization -{ - [HandleError] - public class EmployeesController : Controller - { - /// This service dependency will be used by the controller - /// to populate the view model with a listing of all the available territories to select from. - /// Instead of passing this to the controller, the repository could instead be used by an - /// application service, which would be injected into this controller, to populate the view - /// model. - public EmployeesController(IRepository employeeRepository, IRepository territoriesRepository) { - Check.Require(employeeRepository != null, "employeeRepository may not be null"); - Check.Require(territoriesRepository != null, "territoriesRepository may not be null"); - - this.employeeRepository = employeeRepository; - this.territoriesRepository = territoriesRepository; - } - - /// - /// The transaction on this action is optional, but recommended for performance reasons - /// - [Transaction] - public ActionResult Index() { - IList employees = employeeRepository.GetAll(); - return View(employees); - } - - /// - /// The transaction on this action is optional, but recommended for performance reasons - /// - [Transaction] - public ActionResult Show(int id) { - Employee employee = employeeRepository.Get(id); - return View(employee); - } - - public ActionResult Create() { - EmployeeFormViewModel viewModel = EmployeeFormViewModel.CreateEmployeeFormViewModel(territoriesRepository); - return View(viewModel); - } - - [ValidateAntiForgeryToken] // Helps avoid CSRF attacks - [Transaction] // Wraps a transaction around the action - [AcceptVerbs(HttpVerbs.Post)] // Limits the method to only accept post requests - public ActionResult Create(Employee employee) { - if (ViewData.ModelState.IsValid && employee.IsValid()) { - employeeRepository.SaveOrUpdate(employee); - - TempData[ControllerEnums.GlobalViewDataProperty.PageMessage.ToString()] = - "The employee was successfully created."; - return RedirectToAction("Index"); - } - - EmployeeFormViewModel viewModel = EmployeeFormViewModel.CreateEmployeeFormViewModel(territoriesRepository); - viewModel.Employee = employee; - return View(viewModel); - } - - /// - /// The transaction on this action is optional, but recommended for performance reasons - /// - [Transaction] - public ActionResult Edit(int id) { - EmployeeFormViewModel viewModel = EmployeeFormViewModel.CreateEmployeeFormViewModel(territoriesRepository); - viewModel.Employee = employeeRepository.Get(id); - return View(viewModel); - } - - /// - /// Accepts the form submission to update an existing item. This uses - /// to bind the model from the form. - /// - [ValidateAntiForgeryToken] - [Transaction] - [AcceptVerbs(HttpVerbs.Post)] - public ActionResult Edit(Employee employee) { - Employee employeeToUpdate = employeeRepository.Get(employee.Id); - TransferFormValuesTo(employeeToUpdate, employee); - - if (ViewData.ModelState.IsValid && employee.IsValid()) { - TempData[ControllerEnums.GlobalViewDataProperty.PageMessage.ToString()] = - "The employee was successfully updated."; - return RedirectToAction("Index"); - } - else { - employeeRepository.DbContext.RollbackTransaction(); - - EmployeeFormViewModel viewModel = EmployeeFormViewModel.CreateEmployeeFormViewModel(territoriesRepository); - viewModel.Employee = employee; - return View(viewModel); - } - } - - private void TransferFormValuesTo(Employee employeeToUpdate, Employee employeeFromForm) { - employeeToUpdate.FirstName = employeeFromForm.FirstName; - employeeToUpdate.LastName = employeeFromForm.LastName; - employeeToUpdate.PhoneExtension = employeeFromForm.PhoneExtension; - - // Update the territory selections with those from the form - employeeToUpdate.Territories.Clear(); - - foreach (Territory territory in employeeFromForm.Territories) { - employeeToUpdate.Territories.Add(territory); - } - } - - /// - /// As described at http://stephenwalther.com/blog/archive/2009/01/21/asp.net-mvc-tip-46-ndash-donrsquot-use-delete-links-because.aspx - /// there are a lot of arguments against doing a delete via a GET request. This addresses that, accordingly. - /// - [ValidateAntiForgeryToken] - [Transaction] - [AcceptVerbs(HttpVerbs.Post)] - public ActionResult Delete(int id) { - string resultMessage = "The employee was successfully deleted."; - Employee employeeToDelete = employeeRepository.Get(id); - - if (employeeToDelete != null) { - employeeRepository.Delete(employeeToDelete); - - try { - employeeRepository.DbContext.CommitChanges(); - } - catch { - resultMessage = "A problem was encountered preventing the employee from being deleted. " + - "Another item likely depends on this employee."; - employeeRepository.DbContext.RollbackTransaction(); - } - } - else { - resultMessage = "The employee could not be found for deletion. It may already have been deleted."; - } - - TempData[ControllerEnums.GlobalViewDataProperty.PageMessage.ToString()] = resultMessage; - return RedirectToAction("Index"); - } - - /// - /// Holds data to be passed to the Employee form for creates and edits - /// - public class EmployeeFormViewModel - { - private EmployeeFormViewModel() { } - - /// - /// Creation method for creating the view model. Services may be passed to the creation - /// method to instantiate items such as lists for drop down boxes. - /// - /// Service needed to get all the territories that - /// are available for association with the employee. - public static EmployeeFormViewModel CreateEmployeeFormViewModel(IRepository territoriesRepository) { - EmployeeFormViewModel viewModel = new EmployeeFormViewModel(); - - viewModel.AvailableTerritories = - territoriesRepository.GetAll().OrderBy(territory => territory.Description).ToList(); - - return viewModel; - } - - public Employee Employee { get; internal set; } - public IList AvailableTerritories { get; internal set; } - } - - private readonly IRepository employeeRepository; - private readonly IRepository territoriesRepository; - } -} diff --git a/src/NorthwindSample/app/Northwind.Web.Controllers/Properties/AssemblyInfo.cs b/src/NorthwindSample/app/Northwind.Web.Controllers/Properties/AssemblyInfo.cs deleted file mode 100644 index 16c103739..000000000 --- a/src/NorthwindSample/app/Northwind.Web.Controllers/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,13 +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("Northwind.Web.Controllers")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyProduct("Northwind.Web.Controllers")] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("c644f3f8-e748-4b2c-be6a-394875caabb0")] diff --git a/src/NorthwindSample/app/Northwind.Web.Controllers/RouteRegistrar.cs b/src/NorthwindSample/app/Northwind.Web.Controllers/RouteRegistrar.cs deleted file mode 100644 index 3dc7c5063..000000000 --- a/src/NorthwindSample/app/Northwind.Web.Controllers/RouteRegistrar.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System.Web.Mvc; -using System.Web.Routing; -using SharpArch.Web.Areas; - -namespace Northwind.Web.Controllers -{ - public class RouteRegistrar - { - public static void RegisterRoutesTo(RouteCollection routes) { - routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); - routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" }); - - // The areas below must be registered from greater subareas to fewer; - // i.e., the root area should be the last area registered - - // Example illustrative route with a nested area - //routes.CreateArea("Organization/Department", "Northwind.Web.Controllers.Organization.Department", - // routes.MapRoute(null, "Organization/Department/{controller}/{action}", new { action = "Index" }) - //); - - routes.CreateArea("Organization", "Northwind.Web.Controllers.Organization", - routes.MapRoute(null, "Organization/{controller}/{action}", new { action = "Index" }), - routes.MapRoute(null, "Organization/{controller}/{action}/{id}") - ); - - // Routing config for the root area - routes.CreateArea("Root", "Northwind.Web.Controllers", - routes.MapRoute(null, "{controller}/{action}", new { controller = "Home", action = "Index" }) - ); - } - } -} diff --git a/src/NorthwindSample/app/Northwind.Web.Controllers/TerritoriesController.cs b/src/NorthwindSample/app/Northwind.Web.Controllers/TerritoriesController.cs deleted file mode 100644 index 3400cd6ea..000000000 --- a/src/NorthwindSample/app/Northwind.Web.Controllers/TerritoriesController.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System.Web.Mvc; -using Northwind.Wcf; -using System.ServiceModel; -using Northwind.WcfServices; -using System; -using Northwind.Wcf.Dtos; -using System.Collections.Generic; -using SharpArch.Core; - -namespace Northwind.Web.Controllers -{ - public class TerritoriesController : Controller - { - public TerritoriesController(ITerritoriesWcfService territoriesWcfService) { - Check.Require(territoriesWcfService != null, "territoriesWcfService may not be null"); - - this.territoriesWcfService = territoriesWcfService; - } - - public ActionResult Index() { - IList territories = null; - - // WCF service closing advice taken from http://msdn.microsoft.com/en-us/library/aa355056.aspx - // As alternative to this verbose-ness, use the SharpArch.WcfClient.Castle.WcfSessionFacility - // for automatically closing the WCF service. - try { - territories = territoriesWcfService.GetTerritories(); - territoriesWcfService.Close(); - } - catch (CommunicationException) { - territoriesWcfService.Abort(); - } - catch (TimeoutException) { - territoriesWcfService.Abort(); - } - catch (Exception) { - territoriesWcfService.Abort(); - throw; - } - - return View(territories); - } - - private readonly ITerritoriesWcfService territoriesWcfService; - } -} diff --git a/src/NorthwindSample/app/Northwind.Web/CastleWindsor/ComponentRegistrar.cs b/src/NorthwindSample/app/Northwind.Web/CastleWindsor/ComponentRegistrar.cs deleted file mode 100644 index 8f418d532..000000000 --- a/src/NorthwindSample/app/Northwind.Web/CastleWindsor/ComponentRegistrar.cs +++ /dev/null @@ -1,74 +0,0 @@ -using Castle.Windsor; -using SharpArch.Core.PersistenceSupport.NHibernate; -using SharpArch.Data.NHibernate; -using SharpArch.Core.PersistenceSupport; -using SharpArch.Web.Castle; -using Castle.MicroKernel.Registration; -using SharpArch.Core.CommonValidator; -using SharpArch.Core.NHibernateValidator.CommonValidatorAdapter; -using Castle.Core.Configuration; -using Northwind.Web.WcfServices; -using Northwind.Wcf; -using Northwind.WcfServices; -using Castle.Core; -using Castle.Facilities.FactorySupport; -using Castle.Core.Interceptor; - -namespace Northwind.Web.CastleWindsor -{ - public class ComponentRegistrar - { - public static void AddComponentsTo(IWindsorContainer container) { - AddGenericRepositoriesTo(container); - AddCustomRepositoriesTo(container); - AddApplicationServicesTo(container); - AddWcfServiceFactoriesTo(container); - - container.AddComponent("validator", - typeof(IValidator), typeof(Validator)); - } - - private static void AddApplicationServicesTo(IWindsorContainer container) { - container.Register( - AllTypes.Pick() - .FromAssemblyNamed("Northwind.ApplicationServices") - .WithService.FirstInterface()); - } - - private static void AddWcfServiceFactoriesTo(IWindsorContainer container) { - container.AddFacility("factories", new FactorySupportFacility()); - container.AddComponent("standard.interceptor", typeof(StandardInterceptor)); - - string factoryKey = "territoriesWcfServiceFactory"; - string serviceKey = "territoriesWcfService"; - - container.AddComponent(factoryKey, typeof(TerritoriesWcfServiceFactory)); - MutableConfiguration config = new MutableConfiguration(serviceKey); - config.Attributes["factoryId"] = factoryKey; - config.Attributes["factoryCreate"] = "Create"; - container.Kernel.ConfigurationStore.AddComponentConfiguration(serviceKey, config); - container.Kernel.AddComponent(serviceKey, typeof(ITerritoriesWcfService), - typeof(TerritoriesWcfServiceClient), LifestyleType.PerWebRequest); - } - - private static void AddCustomRepositoriesTo(IWindsorContainer container) { - container.Register( - AllTypes.Pick() - .FromAssemblyNamed("Northwind.Data") - .WithService.FirstNonGenericCoreInterface("Northwind.Core")); - } - - private static void AddGenericRepositoriesTo(IWindsorContainer container) { - container.AddComponent("entityDuplicateChecker", - typeof(IEntityDuplicateChecker), typeof(EntityDuplicateChecker)); - container.AddComponent("repositoryType", - typeof(IRepository<>), typeof(Repository<>)); - container.AddComponent("nhibernateRepositoryType", - typeof(INHibernateRepository<>), typeof(NHibernateRepository<>)); - container.AddComponent("repositoryWithTypedId", - typeof(IRepositoryWithTypedId<,>), typeof(RepositoryWithTypedId<,>)); - container.AddComponent("nhibernateRepositoryWithTypedId", - typeof(INHibernateRepositoryWithTypedId<,>), typeof(NHibernateRepositoryWithTypedId<,>)); - } - } -} diff --git a/src/NorthwindSample/app/Northwind.Web/Content/Site.css b/src/NorthwindSample/app/Northwind.Web/Content/Site.css deleted file mode 100644 index bf0c90caf..000000000 --- a/src/NorthwindSample/app/Northwind.Web/Content/Site.css +++ /dev/null @@ -1,277 +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 -{ - border-bottom: 1px solid #5c87b2; - 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: 80%; - margin-top: 20px; - margin-left: auto; - margin-right: auto; -} - -#header -{ - position: relative; - margin-bottom: 0px; - color: #000; - padding: 0 0px 0 0; -} - -#sharpArchLogo -{ - text-align: right; -} - -p#logo, h1#logo -{ - font-weight: bold; - font-size: 24px !important; - padding: 10px 0; - margin: 0; - color: #FFF; - border: none; - line-height: 2em; - font-family: Arial, Helvetica, sans-serif; -} - -#logo a -{ - color: #FFF; - text-decoration: none; - font-size: 32px !important; -} - -#mainContent -{ - padding: 30px 30px 15px 30px; - background-color: #FFF; - border-bottom: 3px groove #4b6f92; - margin-bottom: 30px; - _height: 1px; /* only IE6 applies CSS properties starting with an underscrore */ -} - -.columnsContainer -{ - position: relative; -} - -.leftColumn -{ - width: 25%; - margin-right: 4%; - float: left; -} - -.rightColumn -{ - float: right; - width: 70%; -} - -#footer -{ - color: #999; - padding: 5px 0 0 0; - border-top: 1px solid #5C87B2; - text-align: center; - line-height: normal; -} - -#footer p -{ - padding: 5px 0; - margin: 0; -} - -/* MAIN MENU -----------------------------------------------------------*/ -ul#mainMenu -{ - border-bottom: 1px #5C87B2 solid; - padding: 0 0 2px; - position: relative; - margin: 0; - text-align: right; -} - -ul#mainMenu li -{ - display: inline; - list-style: none; -} - -ul#mainMenu li a -{ - padding: 10px 20px; - font-weight: bold; - text-decoration: none; - line-height: 2.8em; - background-color: #e8eef4; - color: #034af3; -} - -ul#mainMenu li a:hover -{ - background-color: #FFF; - text-decoration: none; -} - -ul#mainMenu li a:active -{ - background-color: #a6e2a6; - text-decoration: none; -} - -ul#mainMenu li.selected a -{ - background-color: #FFF; - color: #000; -} - -/* SIDE COLUMN LINKS & HEADINGS -----------------------------------------------------------*/ -.leftColumn ul -{ - margin: 0; - padding: 0 0 30px 0; -} - -.leftColumn ul li -{ - list-style: none; - margin-top: 5px; - line-height: normal; -} - -.leftColumn ul li a -{ - list-style: none; - padding: 5px; - border: 1px solid #e8eef4; - line-height: normal; - display: block; - text-decoration: none; - background-color: #e8eef4; - font-size: .9em; - _height: 1px; /* only IE6 applies CSS properties starting with an underscrore */ -} - -.leftColumn ul li a:hover -{ - text-decoration: none; - background-color: #FFF; - border-color: #e2e7ed; -} - -.leftColumn ul li a:active -{ - text-decoration: none; - background-color: #a6e2a6; - border-color: #a6e2a6; - color: #FFF; -} - -.leftColumn h2 -{ - font-size: 1.2em; - padding: 5px; - margin: 0px; - border-color: #5C87B2; - background-color: #5C87B2; - color: #FFF; -} - -/* MISC -----------------------------------------------------------*/ -.clear -{ - clear: both; -} - -.input-validation-error -{ - border: 1px solid #ff0000; - background-color: #ffeeee; -} \ No newline at end of file diff --git a/src/NorthwindSample/app/Northwind.Web/Default.aspx b/src/NorthwindSample/app/Northwind.Web/Default.aspx deleted file mode 100644 index 842ecf302..000000000 --- a/src/NorthwindSample/app/Northwind.Web/Default.aspx +++ /dev/null @@ -1,3 +0,0 @@ -<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Northwind.Web._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/src/NorthwindSample/app/Northwind.Web/Default.aspx.cs b/src/NorthwindSample/app/Northwind.Web/Default.aspx.cs deleted file mode 100644 index ab994989c..000000000 --- a/src/NorthwindSample/app/Northwind.Web/Default.aspx.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System.Web; -using System.Web.Mvc; -using System.Web.UI; - -namespace Northwind.Web -{ - public partial class _Default : Page - { - public void Page_Load(object sender, System.EventArgs e) { - HttpContext.Current.RewritePath(Request.ApplicationPath, false); - IHttpHandler httpHandler = new MvcHttpHandler(); - httpHandler.ProcessRequest(HttpContext.Current); - } - } -} diff --git a/src/NorthwindSample/app/Northwind.Web/Global.asax b/src/NorthwindSample/app/Northwind.Web/Global.asax deleted file mode 100644 index 0ed2c4716..000000000 --- a/src/NorthwindSample/app/Northwind.Web/Global.asax +++ /dev/null @@ -1 +0,0 @@ -<%@ Application Codebehind="Global.asax.cs" Inherits="Northwind.Web.MvcApplication" Language="C#" %> diff --git a/src/NorthwindSample/app/Northwind.Web/Global.asax.cs b/src/NorthwindSample/app/Northwind.Web/Global.asax.cs deleted file mode 100644 index a052e29c0..000000000 --- a/src/NorthwindSample/app/Northwind.Web/Global.asax.cs +++ /dev/null @@ -1,96 +0,0 @@ -using System; -using System.Web; -using System.Web.Mvc; -using System.Web.Routing; -using System.Reflection; -using Castle.Windsor; -using Northwind.Core; -using Northwind.Data.NHibernateMaps; -using Northwind.Web.Controllers; -using MvcContrib.Castle; -using Northwind.Web.CastleWindsor; -using SharpArch.Core.DomainModel; -using SharpArch.Data.NHibernate; -using SharpArch.Web.NHibernate; -using SharpArch.Web.Castle; -using Microsoft.Practices.ServiceLocation; -using CommonServiceLocator.WindsorAdapter; -using SharpArch.Web.Areas; -using SharpArch.Web.CommonValidator; -using SharpArch.Web.ModelBinder; - -namespace Northwind.Web -{ - // Note: For instructions on enabling IIS6 or IIS7 classic mode, - // visit http://go.microsoft.com/?LinkId=9394801 - - public class MvcApplication : HttpApplication - { - protected void Application_Start() { - log4net.Config.XmlConfigurator.Configure(); - - ViewEngines.Engines.Clear(); - ViewEngines.Engines.Add(new AreaViewEngine()); - - ModelBinders.Binders.DefaultBinder = new SharpModelBinder(); - - IWindsorContainer container = InitializeServiceLocator(); - - RouteRegistrar.RegisterRoutesTo(RouteTable.Routes); - } - - /// - /// Instantiate the container and add all Controllers that derive from - /// WindsorController to the container. Also associate the Controller - /// with the WindsorContainer ControllerFactory. - /// - protected virtual IWindsorContainer InitializeServiceLocator() { - IWindsorContainer container = new WindsorContainer(); - ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory(container)); - - container.RegisterControllers(typeof(HomeController).Assembly); - ComponentRegistrar.AddComponentsTo(container); - - ServiceLocator.SetLocatorProvider(() => new WindsorServiceLocator(container)); - - return container; - } - - public override void Init() { - base.Init(); - - // The WebSessionStorage must be created during the Init() to tie in HttpApplication events - webSessionStorage = new WebSessionStorage(this); - } - - /// - /// Due to issues on IIS7, the NHibernate initialization cannot reside in Init() but - /// must only be called once. Consequently, we invoke a thread-safe singleton class to - /// ensure it's only initialized once. - /// - protected void Application_BeginRequest(object sender, EventArgs e) { - NHibernateInitializer.Instance().InitializeNHibernateOnce( - () => InitializeNHibernateSession()); - } - - /// - /// If you need to communicate to multiple databases, you'd add a line to this method to - /// initialize the other database as well. - /// - private void InitializeNHibernateSession() { - NHibernateSession.Init( - webSessionStorage, - new string[] { Server.MapPath("~/bin/Northwind.Data.dll") }, - new AutoPersistenceModelGenerator().Generate(), - Server.MapPath("~/NHibernate.config")); - } - - protected void Application_Error(object sender, EventArgs e) { - // Useful for debugging - Exception ex = Server.GetLastError(); - ReflectionTypeLoadException reflectionTypeLoadException = ex as ReflectionTypeLoadException; - } - - private WebSessionStorage webSessionStorage; - } -} diff --git a/src/NorthwindSample/app/Northwind.Web/NHibernate.config b/src/NorthwindSample/app/Northwind.Web/NHibernate.config deleted file mode 100644 index 120ad78ca..000000000 --- a/src/NorthwindSample/app/Northwind.Web/NHibernate.config +++ /dev/null @@ -1,19 +0,0 @@ - - - - Data Source=YOUR_SERVER;Database=Northwind;UID=YOUR_USERNAME;pwd=YOUR_PASSWORD; - NHibernate.Dialect.MsSql2005Dialect - NHibernate.Connection.DriverConnectionProvider - NHibernate.Driver.SqlClientDriver - false - auto - 500 - NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle - - - - - - diff --git a/src/NorthwindSample/app/Northwind.Web/Northwind.Web.csproj b/src/NorthwindSample/app/Northwind.Web/Northwind.Web.csproj deleted file mode 100644 index 56767a3aa..000000000 --- a/src/NorthwindSample/app/Northwind.Web/Northwind.Web.csproj +++ /dev/null @@ -1,274 +0,0 @@ - - - Debug - AnyCPU - 9.0.30729 - 2.0 - {47267265-B341-4954-829A-7F3A7F5E5F67} - {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} - Library - Properties - Northwind.Web - Northwind.Web - v3.5 - false - - - true - full - false - bin\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\ - TRACE - prompt - 4 - - - - False - ..\..\..\..\bin\Castle.Core.dll - - - False - ..\..\..\..\bin\Castle.MicroKernel.dll - - - False - ..\..\..\..\bin\Castle.Windsor.dll - - - False - ..\..\..\..\bin\CommonServiceLocator.WindsorAdapter.dll - - - False - ..\..\..\..\bin\FluentNHibernate.dll - - - False - ..\..\..\..\bin\Iesi.Collections.dll - - - False - ..\..\..\..\bin\Inflector.Net.dll - - - False - ..\..\..\..\bin\log4net.dll - - - False - ..\..\..\..\bin\Microsoft.Practices.ServiceLocation.dll - - - False - ..\..\..\..\bin\Microsoft.Web.Mvc.dll - - - False - ..\..\..\..\bin\MvcContrib.Castle.dll - - - False - ..\..\..\..\bin\Newtonsoft.Json.dll - - - False - ..\..\..\..\bin\NHibernate.dll - - - False - ..\..\..\..\bin\NHibernate.ByteCode.Castle.dll - - - False - ..\..\..\..\bin\NHibernate.Validator.dll - - - False - ..\..\..\..\bin\SharpArch.Core.dll - - - False - ..\..\..\..\bin\SharpArch.Core.NHibernateValidator.dll - - - False - ..\..\..\..\bin\SharpArch.Data.dll - - - False - ..\..\..\..\bin\SharpArch.Wcf.dll - - - False - ..\..\..\..\bin\SharpArch.Web.dll - - - False - ..\..\..\..\bin\SharpArch.Web.Castle.dll - - - - - 3.5 - - - 3.5 - - - 3.0 - - - 3.0 - - - False - ..\..\..\..\bin\System.Web.Abstractions.dll - True - - - False - ..\..\..\..\bin\System.Web.Mvc.dll - True - - - False - ..\..\..\..\bin\System.Web.Routing.dll - True - - - 3.5 - - - - - - - - - - - - - - Default.aspx - ASPXCodeBehind - - - Global.asax - - - Properties\CommonAssemblyInfo.cs - - - - Index.aspx - ASPXCodeBehind - - - Index.aspx - - - Index.aspx - ASPXCodeBehind - - - Index.aspx - - - - - - - - - - - - - - - - - - - - - - - - - - - {DDD17CE0-17DC-4AA3-8CA7-D9B0F8D5E87C} - Northwind.ApplicationServices - - - {968B265E-AF3B-4153-B996-6EC4E83D9616} - Northwind.Core - - - {AAB1B13C-653C-4764-9360-4DA67F4CC959} - Northwind.Data - - - {7AB75E1D-30D2-4DF5-A2E6-03916FB24BBA} - Northwind.Wcf - - - {4278C4DC-E2A8-4FB4-8172-82FB03E7DDF9} - Northwind.Web.Controllers - - - - - - - - - - - - - - - - - - - - - - - - - - - False - True - 2386 - / - - - False - False - - - False - - - - - \ No newline at end of file diff --git a/src/NorthwindSample/app/Northwind.Web/Properties/AssemblyInfo.cs b/src/NorthwindSample/app/Northwind.Web/Properties/AssemblyInfo.cs deleted file mode 100644 index 52a62feab..000000000 --- a/src/NorthwindSample/app/Northwind.Web/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,13 +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("Northwind.Web")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyProduct("Northwind.Web")] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("c7bb4854-4617-4c1b-849d-f4532e218e52")] diff --git a/src/NorthwindSample/app/Northwind.Web/Scripts/MicrosoftAjax.debug.js b/src/NorthwindSample/app/Northwind.Web/Scripts/MicrosoftAjax.debug.js deleted file mode 100644 index 054b46d97..000000000 --- a/src/NorthwindSample/app/Northwind.Web/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/src/NorthwindSample/app/Northwind.Web/Scripts/MicrosoftAjax.js b/src/NorthwindSample/app/Northwind.Web/Scripts/MicrosoftAjax.js deleted file mode 100644 index 646f63319..000000000 --- a/src/NorthwindSample/app/Northwind.Web/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/src/NorthwindSample/app/Northwind.Web/Scripts/MicrosoftMvcAjax.js b/src/NorthwindSample/app/Northwind.Web/Scripts/MicrosoftMvcAjax.js deleted file mode 100644 index 880c1b45d..000000000 --- a/src/NorthwindSample/app/Northwind.Web/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/src/NorthwindSample/app/Northwind.Web/Scripts/jquery-1.3.2.js b/src/NorthwindSample/app/Northwind.Web/Scripts/jquery-1.3.2.js deleted file mode 100644 index 926357433..000000000 --- a/src/NorthwindSample/app/Northwind.Web/Scripts/jquery-1.3.2.js +++ /dev/null @@ -1,4376 +0,0 @@ -/*! - * jQuery JavaScript Library v1.3.2 - * http://jquery.com/ - * - * Copyright (c) 2009 John Resig - * Dual licensed under the MIT and GPL licenses. - * http://docs.jquery.com/License - * - * 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 ) { - // 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 ) { - // 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() { - 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 ) { - 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 ) { - // 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 ) { - // 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 ) { - return jQuery.each( this, callback, args ); - }, - - // Determine the position of an element within - // the matched set of elements - index: function( elem ) { - // 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 ) { - 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 ) { - // 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 ) { - 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 ) { - 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 ) { - return this.each(function(){ - jQuery( this ).contents().wrapAll( html ); - }); - }, - - wrap: function( html ) { - return this.each(function(){ - jQuery( this ).wrapAll( html ); - }); - }, - - append: function() { - return this.domManip(arguments, true, function(elem){ - if (this.nodeType == 1) - this.appendChild( elem ); - }); - }, - - prepend: function() { - return this.domManip(arguments, true, function(elem){ - if (this.nodeType == 1) - this.insertBefore( elem, this.firstChild ); - }); - }, - - before: function() { - return this.domManip(arguments, false, function(elem){ - this.parentNode.insertBefore( elem, this ); - }); - }, - - after: function() { - return this.domManip(arguments, false, function(elem){ - this.parentNode.insertBefore( elem, this.nextSibling ); - }); - }, - - end: function() { - 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 ) { - 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 ) { - // 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 ) { - 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 ) { - 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 ) { - 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 ) { - return this.pushStack( jQuery.unique( jQuery.merge( - this.get(), - typeof selector === "string" ? - jQuery( selector ) : - jQuery.makeArray( selector ) - ))); - }, - - is: function( selector ) { - return !!selector && jQuery.multiFilter( selector, this ).length > 0; - }, - - hasClass: function( selector ) { - return !!selector && this.is( "." + selector ); - }, - - val: function( 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 ) { - return value === undefined ? - (this[0] ? - this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g, "") : - null) : - this.empty().append( value ); - }, - - replaceWith: function( value ) { - return this.after( value ).remove(); - }, - - eq: function( i ) { - return this.slice( i, +i + 1 ); - }, - - slice: function() { - return this.pushStack( Array.prototype.slice.apply( this, arguments ), - "slice", Array.prototype.slice.call(arguments).join(",") ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map(this, function(elem, i){ - return callback.call( elem, i, elem ); - })); - }, - - andSelf: function() { - return this.add( this.prevObject ); - }, - - domManip: function( args, table, callback ) { - 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 ) { - 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(){ - return +new Date; -} - -jQuery.extend = jQuery.fn.extend = function() { - // 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 ) { - 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 ) { - return toString.call(obj) === "[object Function]"; - }, - - isArray: function( obj ) { - return toString.call(obj) === "[object Array]"; - }, - - // check if an element is in a (or is an) XML document - isXMLDoc: function( elem ) { - return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" || - !!elem.ownerDocument && jQuery.isXMLDoc( elem.ownerDocument ); - }, - - // Evalulates a script in a global context - globalEval: function( data ) { - 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 ) { - return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase(); - }, - - // args is for internal usage only - each: function( object, callback, args ) { - var name, i = 0, length = object.length; - - 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 ) { - // 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 ) { - 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 ) { - 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 ) { - 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 ) { - 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 ) { - 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 ) { - 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 ) { - 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